SOC Prime Bias: Crítico

12 Jun 2026 18:43 UTC

Ataque Masivo a la Cadena de Suministro de PyPI Recolecta Credenciales en la Nube mediante Hooks de Inicio de Python

Author Photo
SOC Prime Team linkedin icon Seguir
Ataque Masivo a la Cadena de Suministro de PyPI Recolecta Credenciales en la Nube mediante Hooks de Inicio de Python
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Una operación coordinada de la cadena de suministro conocida como la Campaña Hades ha comprometido 26 paquetes PyPI para robar credenciales en la nube. El ataque abusa de Python .pth archivos para activar código malicioso durante el inicio del intérprete, utilizando el entorno de ejecución de JavaScript Bun para ejecutar la carga útil. Está diseñado para recolectar secretos vinculados a AWS, GCP, Azure, Kubernetes y GitHub a través de múltiples sistemas operativos.

Investigación

Orca Security identificó 37 archivos wheel maliciosos distribuidos en ecosistemas de bioinformática y herramientas de desarrollo. Su análisis expuso una técnica de ejecución cruzada en la que el malware descarga Bun para ejecutar cargas útiles de JavaScript ofuscadas. La campaña también genera tráfico señuelo hacia servicios de Anthropic AI y utiliza técnicas de inyección de comandos para reducir la efectividad de la revisión de seguridad basada en LLM.

Mitigación

Las organizaciones deben eliminar inmediatamente los paquetes afectados o fijarlos a versiones seguras y rotar todas las credenciales potencialmente expuestas. Esto incluye tokens de acceso a la nube, tokens de acceso personal de GitHub, claves SSH y credenciales de registro de Docker. Los equipos de seguridad también deben buscar los artefactos de persistencia conocidos en hosts de Linux, macOS y Windows.

Respuesta

Cuando se sospecha de un compromiso, aísle el sistema afectado antes de rotar las credenciales para reducir el riesgo de extorsión a través del daemon de monitorización de tokens GitHub . Reconstruya cualquier estación de trabajo de desarrollador y corredores CI/CD que hayan ejecutado los paquetes contaminados. Revise los repositorios de GitHub para detectar commits no autorizados y para nuevos repositorios creados que coincidan con los patrones de nombres de los atacantes.

"graph TB %% Class Definitions Section classDef technique fill:#99ccff %% Azul para Técnicas MITRE ATT&CK classDef tool fill:#cccccc %% Gris para Herramientas y Software classDef action fill:#ff99cc %% Rosa para Acciones o comportamientos específicos classDef persistence fill:#ccffcc %% Verde para mecanismos de Persistencia %% Node Definitions %% Fase de Acceso Inicial y Ejecución tech_supply_chain["<b>Técnica</b> – <b>T1195.001 Compromiso de la Cadena de Suministro: Compromiso de Dependencias de Software y Herramientas de Desarrollo</b><br/>Archivos wheel maliciosos distribuidos vía PyPI."] class tech_supply_chain technique tech_user_exec["<b>Técnica</b> – <b>T1204.005 Ejecución de Usuario: Biblioteca Maliciosa</b><br/>Activado durante la inicialización del intérprete de Python a través de archivos *-setup.pth."] class tech_user_exec technique tech_poison_pipeline["<b>Técnica</b> – <b>T1677 Ejecución de Tubería Envenenada</b><br/>El código se ejecuta automáticamente en entornos de desarrollo y CI."] class tech_poison_pipeline technique %% Payload and Execution Phase tool_bun["<b>Herramienta</b> – <b>Nombre</b>: Entorno de ejecución de JavaScript Bun<br/>Descargado para ejecutar carga útil ofuscada."] class tool_bun tool tech_ipc["<b>Técnica</b> – <b>T1559.003 Comunicación entre procesos: Servicios XPC</b><br/>Usado para ejecutar la carga útil _index.js ofuscada."] class tech_ipc technique payload_js["<b>Archivo</b> – <b>Nombre</b>: _index.js<br/>Carga útil de JavaScript ofuscada."] class payload_js tool %% Persistencia tech_persistence["<b>Técnica</b> – <b>Persistencia</b><br/>Mantener acceso en el sistema comprometido."] class tech_persistence technique tech_launch_daemon["<b>Técnica</b> – <b>T1543.004 Crear o Modificar Proceso del Sistema: Demonio de Lanzamiento</b><br/>Usa servicios de systemd en Linux y LaunchAgents en macOS."] class tech_launch_daemon technique svc_monitor["<b>Proceso/Servicio</b> – <b>Nombre</b>: gh-token-monitor.service<br/>Ejemplo de mecanismo de persistencia."] class svc_monitor persistence %% Credential Access and Exfiltration Phase tech_cred_access["<b>Técnica</b> – <b>T1212 Explotación para Acceso a Credenciales</b><br/>Raspado de memoria de procesos para recolectar tokens de AWS, GCP, Azure y GitHub."] class tech_cred_access technique tech_archive["<b>Técnica</b> – <b>T1560 Archivar Datos Recopilados</b><br/>Comprimiendo secretos robados utilizando gzip."] class tech_archive technique tech_exfil["<b>Técnica</b> – <b>T1567.001 Exfiltración a través de Servicio Web: Exfiltración a Repositorio de Código</b><br/>Enviando datos cifrados a repositorios de GitHub controlados por atacantes."] class tech_exfil technique %% Conexiones %% La cadena de suministro conduce a la ejecución del usuario tech_supply_chain –>|conduce_a| tech_user_exec %% La ejecución del usuario lleva a una tubería envenenada tech_user_exec –>|activa| tech_poison_pipeline %% La tubería envenenada activa la ejecución de la carga útil tech_poison_pipeline –>|ejecuta| tool_bun %% Las herramientas usan IPC para ejecutar la carga de JS tool_bun –>|utiliza| tech_ipc tech_ipc –>|ejecuta| payload_js %% La carga útil lleva a la persistencia payload_js –>|establece| tech_persistence tech_persistence –>|implementa| tech_launch_daemon tech_launch_daemon –>|crea| svc_monitor %% La persistencia permite el acceso a credenciales svc_monitor –>|permite| tech_cred_access %% El acceso a credenciales lleva a archivado tech_cred_access –>|resulta_en| tech_archive %% El archivado lleva a la exfiltración final tech_archive –>|prepara_datos_para| tech_exfil "

Flujo de Ataque

Ejecución de Simulación

Prerequisito: La Verificación Previa de Telemetría y Línea de Base debe haber pasado.

Racional: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTP identificados y buscan generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un diagnóstico erróneo.

  • Narrativa del Ataque y Comandos: El adversario ha comprometido con éxito la estación de trabajo de un desarrollador a través de un paquete malicioso de PyPI (Campaña Hades). Un gancho de inicio de Python se ha ejecutado, raspando exitosamente un token de autenticación de Azure de la memoria/cache local. Para simular la detección de esta actividad en los Registros de Auditoría de Azure, simularemos la generación de una entrada de Registro de Auditoría que contenga la cadena específica «tokens de autenticación de Azure» en el campo de descripción, imitando la telemetría de evento que un sistema automatizado podría reportar cuando detecta tal exfiltración.

  • Script de Prueba de Regresión: Dado que no podemos forzar fácilmente al backend real de Azure a generar una cadena de descripción maliciosa específica sin una verdadera violación, simulamos la presencia del registro en el flujo de telemetría (a menudo realizado en BAS inyectando un registro sintético en el espacio de trabajo).

    # Inyección de Registro Sintético para simular la detección de exfiltración de tokens
    # Esto simula el campo 'Descripción' siendo poblado con la cadena objetivo.
    $LogEntry = @{
        TimeGenerated = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ssZ")
        OperationName = "TokenExfiltrationDetected"
        Result = "Success"
        Description = "Actividad de malware detectada: Tokens de autenticación de Azure fueron exfiltrados de un proceso local."
        Identity = "gancho-python-malicioso@atacante.com"
    }
    
    Write-Host "Inyectando telemetría sintética para validar la regla de detección..."
    # En un BAS real, esto llamaría a la API de Recolección de Datos de Análisis de Registros
    # Para propósitos de simulación, representamos la entrada de registro resultante:
    $LogEntry | ConvertTo-Json
  • Comandos de Limpieza:

    # Si los registros sintéticos se inyectaron a través de la API, elimine el ID de correlación específico
    # Para esta simulación, no se realizaron cambios persistentes en el Inquilino de Azure.
    Write-Host "Limpieza completa. No quedan artefactos persistentes del adversario."