Campaña Hades Desata Nuevos Ataques a la Cadena de Suministro en Python, Apuntando a Secretos de Desarrolladores
Una nueva ola de ataques a la cadena de suministro, denominada 'Hades', ha surgido de la campaña 'Miasma', infiltrándose en el registro del Índice de Paquetes de Python (PyPI). Esta sofisticada operación aprovecha 37 artefactos maliciosos de tipo 'wheel' en 19 paquetes, continuando el linaje de ataques 'Mini Shai-Hulud' diseñados para robar credenciales sensibles de desarrolladores y propagarse por las redes.
La campaña de cadena de suministro **Miasma** ha escalado con una nueva ola de ataques llamada **Hades**, afectando al registro del **Índice de Paquetes de Python (PyPI)**. Esta última iteración involucra 37 artefactos maliciosos de tipo 'wheel' en 19 paquetes, refinando aún más los ataques al estilo 'Mini Shai-Hulud' para dirigirse a ecosistemas de desarrolladores específicos.
Según un análisis de **Socket**, los lanzamientos comprometidos incluían un archivo `*-setup.pth`. Este archivo está diseñado para ejecutarse automáticamente durante el inicio de Python, descargando el tiempo de ejecución de JavaScript **Bun** y, posteriormente, lanzando un 'payload' de JavaScript ofuscado llamado `_index.js`.
### Paquetes Maliciosos Identificados
Los siguientes paquetes han sido identificados como parte de la campaña **Hades**:
* bramin 0.0.2, 0.0.3, 0.0.4
* cmd2func 0.2.2, 0.2.3
* coolbox 0.4.1, 0.4.2
* dynamo-release 1.5.4
* executor-engine 0.3.4, 0.3.5
* executor-http 0.1.3, 0.1.4
* funcdesc 0.2.2, 0.2.3
* magique 0.6.8, 0.6.9
* magique-ai 0.4.4, 0.4.5
* mrbios 0.1.1, 0.1.2
* napari-ufish 0.0.2, 0.0.3
* nucbox 0.1.2, 0.1.3
* okite 0.0.7, 0.0.8
* pantheon-agents 0.6.1, 0.6.2
* pantheon-toolsets 0.5.5, 0.5.6
* spateo-release 1.1.2
* synago 0.1.1, 0.1.2
* ufish 0.1.2, 0.1.3
* uprobe 0.1.3, 0.1.4
### Evolución del 'Payload' y Exfiltración
En consonancia con las campañas anteriores de **Shai-Hulud** y **Miasma**, el 'payload' malicioso descarga e instala el tiempo de ejecución de JavaScript **Bun**. Este tiempo de ejecución se utiliza luego para ejecutar un 'stealer' de JavaScript fuertemente ofuscado, capaz de exfiltrar una amplia gama de datos de los sistemas de los desarrolladores.
Los datos robados incluyen secretos relacionados con **GitHub**, **npm**, **PyPI**, **RubyGems**, **JFrog**, **CircleCI**, **Anthropic**, **AWS**, **GCP**, **Azure** y **Kubernetes**. También apunta a configuraciones de **Docker**, tokens de **Vault**, claves **SSH**, historiales de comandos, archivos `.env`, archivos `.npmrc`, archivos `.pypirc`, configuraciones de **Claude**/**MCP**, y otras credenciales locales o accesibles desde el 'runner'.
Un cambio clave en la campaña **Hades** es el marcador de exfiltración. Mientras que las iteraciones anteriores utilizaban descripciones de repositorios de **GitHub** como "Miasma: The Spreading Blight", la última ola emplea "Hades - The End for the Damned" o "Hades * The End for the Damned".
**Socket** elabora que **Hades** es una rama directa del linaje **Mini Shai-Hulud** / **Miasma**, no un incidente separado. La metodología central permanece: abusar de canales de paquetes confiables, ejecutarse antes del uso normal del paquete, preparar un 'payload' de JavaScript impulsado por **Bun**, robar credenciales de desarrolladores y CI/CD, y utilizar la exfiltración y propagación centradas en **GitHub**.
### Nuevo Vector de Ejecución
Esta vez, los atacantes están aprovechando un archivo `*-setup.pth`, procesado por el módulo `site` de Python durante el inicio del intérprete. Esto permite que el 'payload' malicioso se ejecute inmediatamente después de la instalación, sin requerir que la víctima importe explícitamente el paquete envenenado. El 'payload' luego descarga y ejecuta **Bun** desde **GitHub** para ejecutar el 'stealer', pero solo después de verificar si la configuración regional del sistema es rusa.
**Socket** señala el paralelismo con el problema de `npm install-hook` explotado en ataques anteriores de **Shai-Hulud** y **Miasma**, destacando que, si bien la sintaxis difiere, la implicación de seguridad —ejecución durante la instalación de dependencias antes de la revisión del código— sigue siendo la misma.
### Clúster Hades y Evasión de IA
La campaña **Hades** también comprometió paquetes dentro del ecosistema de biología computacional, bioinformática y análisis genotipo-fenotipo, incluyendo:
* embiggen 0.11.97
* ensmallen 0.8.101
* gpsea 0.9.14
* mflux-streamlit 0.0.3, 0.0.4
* nhmpy 2.4.7
* ppkt2synergy 0.1.1
* pyphetools 0.9.120
Este clúster utiliza un enfoque distinto, incrustando el punto de entrada como un 'import hook' ofuscado de una sola línea dentro del archivo `__init__.py` del paquete. El resultado, sin embargo, es idéntico: descargar y ejecutar el tiempo de ejecución **Bun** seguido del 'payload' de JavaScript.
**StepSecurity** enfatiza el uso constante del tiempo de ejecución **Bun**. Descargar **Bun** como un archivo ZIP independiente permite al 'malware' ejecutar tareas complejas de JavaScript en entornos que carecen de una instalación de **Node.js**, eludiendo así los controles tradicionales del gestor de paquetes y los registros de proxy de red.
En un desarrollo notable, el 'malware' incorpora una técnica novedosa de evasión de defensa de inteligencia artificial (IA). Incluye una inyección de 'prompt' en texto plano diseñada para engañar a las herramientas de análisis de paquetes basadas en Modelos de Lenguaje Grandes (**LLM**) para que clasifiquen el paquete como seguro.
Además, el 'malware' consulta los 'commits' de **GitHub** para la palabra clave "TheBeautifulSnadsOfTime" para extraer un 'payload' de JavaScript codificado en Base64. También sondea **GitHub** para 'commits' que coincidan con "firedalazer" para obtener y ejecutar un 'dropper' basado en Python.
### Capacidades del 'Malware' Hades
El 'malware' **Hades** cuenta con varias características avanzadas:
* **Movimiento Lateral**: Se replica y se propaga por las redes de desarrolladores a través de **SSH** o **SCP**, enviando paquetes de **PyPI** troyanizados desde sistemas comprometidos al explotar las configuraciones de confianza de **OpenID Connect (OIDC)** de los desarrolladores.
* **Objetivo de Repositorios de GitHub**: Extrae secretos de organización utilizando 'runners' de **GitHub Actions** si el token de **GitHub** cosechado posee permisos de escritura apropiados.
* **Backdooring de Espacios de Trabajo**: Crea 'backdoors' en carpetas de espacios de trabajo locales para activar la ejecución de código cuando son analizados por asistentes de IA o abiertos en IDEs. Los objetivos incluyen **Anthropic Claude**, **OpenAI Codex**, **Google Gemini**, **Microsoft Copilot**, **Cline**, **Aider**, **Tabby**, **Amazon Q**, **Cody**, **Bolt** y **Continue**.
* **Funcionalidad de Borrado (Wiper)**: Instala un servicio en segundo plano llamado "gh-token-monitor" que actúa como un borrador, eliminando todos los datos (`rm -rf ~/; rm -rf ~/Documents`) si el token de **GitHub** robado es revocado.
El investigador de seguridad **Rohan Prabhu** destaca una capacidad clave del actor de **Miasma**: leer la memoria del proceso del 'runner' de **GitHub Actions** (el proceso `Runner.Worker`) para extraer secretos. Si bien inicialmente se limitaba a sistemas Linux que usaban `/proc/{pid}/mem`, la campaña **Hades** introduce 'scrapers' de memoria personalizados para **macOS** y **Windows**.
### Variante de Shai-Hulud en GitHub
Este desarrollo coincide con la revelación de **StepSecurity** de un atacante desconocido que comprometió la cuenta de **GitHub** ("LeonOstrez") vinculada a **Pythagora-io/gpt-pilot**, una popular herramienta de desarrollador de IA de código abierto. El atacante forzó el 'push' de una variante del gusano roba-credenciales **Shai-Hulud** a la rama principal. Este 'malware' está diseñado para activarse silenciosamente al ejecutar el proyecto por un desarrollador desprevenido, mientras evita sistemas con configuración regional rusa.
**Ashish Kurmi**, cofundador y CTO de **StepSecurity**, señaló que el 'malware' fue frustrado por **ruff**, un formateador de código de Python. Los intentos del atacante de eludir la CI fallaron dos veces porque su archivo Python inyectado violaba las reglas de formato y 'linting' del proyecto.
**Snyk** describe estos ataques como parte del linaje más amplio **Shai-Hulud** / **Miasma**, con cada ola aprovechando un 'stealer' ofuscado con tiempo de ejecución **Bun** combinado con nuevos mecanismos de persistencia, rutas de exfiltración y ejecución automatizada de código en el momento de la instalación o compilación.
**Cloudsmith** advierte que las claves firmadas y las cuentas de mantenedor autenticadas ya no garantizan una seguridad absoluta. Cuando los registros y repositorios 'upstream' se ven comprometidos, el código público se convierte en un vector de compromiso directo y potente.