La campagne Hades lance de nouvelles attaques de la chaîne d'approvisionnement Python ciblant les secrets des développeurs
Une nouvelle vague d'attaques de la chaîne d'approvisionnement, baptisée 'Hades', a émergé de la campagne 'Miasma', infiltrant le registre Python Package Index (PyPI). Cette opération sophistiquée exploite 37 artefacts wheel malveillants dans 19 paquets, poursuivant la lignée d'attaques 'Mini Shai-Hulud' conçues pour voler les identifiants sensibles des développeurs et se propager sur les réseaux.
La campagne de la chaîne d'approvisionnement **Miasma** s'est intensifiée avec une nouvelle vague d'attaques nommée **Hades**, impactant le registre **Python Package Index (PyPI)**. Cette dernière itération implique 37 artefacts wheel malveillants répartis sur 19 paquets, affinant davantage les attaques de type 'Mini Shai-Hulud' pour cibler des écosystèmes de développeurs spécifiques.
Selon une analyse de **Socket**, les versions compromises incluaient un fichier `*-setup.pth`. Ce fichier est conçu pour s'exécuter automatiquement au démarrage de Python, télécharger le runtime JavaScript **Bun**, puis lancer une charge utile JavaScript obfusquée nommée `_index.js`.
### Paquets Malveillants Identifiés
Les paquets suivants ont été identifiés comme faisant partie de la campagne **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
### Charge Utile et Exfiltration Évoluées
Conformément aux campagnes précédentes **Shai-Hulud** et **Miasma**, la charge utile malveillante télécharge et installe le runtime JavaScript **Bun**. Ce runtime est ensuite utilisé pour exécuter un voleur JavaScript fortement obfusqué, capable d'exfiltrer un large éventail de données des systèmes des développeurs.
Les données volées comprennent des secrets liés à **GitHub**, **npm**, **PyPI**, **RubyGems**, **JFrog**, **CircleCI**, **Anthropic**, **AWS**, **GCP**, **Azure**, et **Kubernetes**. Elle cible également les configurations **Docker**, les jetons **Vault**, les clés **SSH**, l'historique des shells, les fichiers `.env`, les fichiers `.npmrc`, les fichiers `.pypirc`, les configurations **Claude**/**MCP**, et d'autres identifiants locaux ou accessibles par le runner.
Un changement clé dans la campagne **Hades** est le marqueur d'exfiltration. Alors que les itérations précédentes utilisaient des descriptions de dépôt **GitHub** comme "Miasma: The Spreading Blight", la dernière vague emploie "Hades - The End for the Damned" ou "Hades * The End for the Damned".
**Socket** précise que **Hades** est une branche directe de la lignée **Mini Shai-Hulud** / **Miasma**, et non un incident distinct. La méthodologie principale reste la même : abuser des canaux de paquets de confiance, s'exécuter avant l'utilisation normale du paquet, déployer une charge utile JavaScript alimentée par **Bun**, voler les identifiants des développeurs et des CI/CD, et utiliser l'exfiltration et la propagation centrées sur **GitHub**.
### Vecteur d'Exécution Novateur
Cette fois, les attaquants exploitent un fichier `*-setup.pth`, traité par le module `site` de Python lors du démarrage de l'interpréteur. Cela permet à la charge utile malveillante de s'exécuter immédiatement après l'installation, sans nécessiter que la victime importe explicitement le paquet empoisonné. La charge utile télécharge ensuite et exécute **Bun** depuis **GitHub** pour exécuter le voleur, mais seulement après avoir vérifié si la locale du système est russe.
**Socket** note le parallèle avec le problème `npm install-hook` exploité dans les attaques précédentes **Shai-Hulud** et **Miasma**, soulignant que bien que la syntaxe diffère, l'implication de sécurité — l'exécution lors de l'installation des dépendances avant la revue du code — reste la même.
### Cluster Hades et Évasion IA
La campagne **Hades** a également compromis des paquets au sein de l'écosystème de la biologie computationnelle, de la bioinformatique et de l'analyse génotype-phénotype, notamment :
* 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
Ce cluster utilise une approche distincte, intégrant le point d'entrée sous forme de hook d'importation obfusqué en une seule ligne dans le fichier `__init__.py` du paquet. Le résultat, cependant, est identique : téléchargement et exécution du runtime **Bun** suivi de la charge utile JavaScript.
**StepSecurity** souligne l'utilisation constante du runtime **Bun**. Le téléchargement de **Bun** sous forme de fichier ZIP autonome permet au malware d'exécuter des tâches JavaScript complexes dans des environnements ne disposant pas d'une installation **Node.js**, contournant ainsi les contrôles traditionnels des gestionnaires de paquets et les journaux de proxy réseau.
Dans un développement notable, le malware intègre une technique novatrice d'évasion des défenses par intelligence artificielle (IA). Il inclut une injection de prompt en texte brut conçue pour induire en erreur les outils d'analyse de paquets basés sur les grands modèles de langage (**LLM**) afin de classer le paquet comme sûr.
De plus, le malware interroge les commits **GitHub** pour le mot-clé "TheBeautifulSnadsOfTime" afin d'extraire une charge utile JavaScript encodée en Base64. Il interroge également **GitHub** pour les commits correspondant à "firedalazer" afin de récupérer et d'exécuter un dropper basé sur Python.
### Capacités du Malware Hades
Le malware **Hades** possède plusieurs fonctionnalités avancées :
* **Mouvement Latéral** : Se réplique et se propage sur les réseaux de développeurs via **SSH** ou **SCP**, en poussant des paquets **PyPI** trojanisés depuis des systèmes compromis en exploitant les configurations de confiance **OpenID Connect (OIDC)** des développeurs.
* **Ciblage des Dépôts GitHub** : Extrait les secrets d'organisation à l'aide des runners **GitHub Actions** si le jeton **GitHub** récolté possède les autorisations d'écriture appropriées.
* **Backdoor des Espaces de Travail** : Installe des backdoors dans les dossiers d'espaces de travail locaux pour déclencher l'exécution de code lorsqu'ils sont analysés par des assistants IA ou ouverts dans des IDE. Les cibles incluent **Anthropic Claude**, **OpenAI Codex**, **Google Gemini**, **Microsoft Copilot**, **Cline**, **Aider**, **Tabby**, **Amazon Q**, **Cody**, **Bolt**, et **Continue**.
* **Fonctionnalité d'Effacement** : Installe un service d'arrière-plan nommé "gh-token-monitor" qui agit comme un effaceur, supprimant toutes les données (`rm -rf ~/; rm -rf ~/Documents`) si le jeton **GitHub** volé est révoqué.
Le chercheur en sécurité **Rohan Prabhu** souligne une capacité clé de l'acteur **Miasma** : lire la mémoire du processus du runner **GitHub Actions** (le processus `Runner.Worker`) pour extraire les secrets. Bien qu'initialement limité aux systèmes Linux utilisant `/proc/{pid}/mem`, la campagne **Hades** introduit des scrapers de mémoire adaptés pour **macOS** et **Windows**.
### Variante Shai-Hulud sur GitHub
Ce développement coïncide avec la révélation par **StepSecurity** d'un attaquant inconnu ayant compromis le compte **GitHub** ("LeonOstrez") lié à **Pythagora-io/gpt-pilot**, un outil populaire de développement IA open-source. L'attaquant a forcé la poussée d'une variante du ver voleur d'identifiants **Shai-Hulud** sur la branche principale. Ce malware est conçu pour s'activer silencieusement lors de l'exécution du projet par un développeur inconscient, tout en évitant les systèmes avec une locale russe.
**Ashish Kurmi**, co-fondateur et CTO de **StepSecurity**, a noté que le malware a été contrecarré par **ruff**, un formateur de code Python. Les tentatives de l'attaquant de contourner les CI ont échoué deux fois car leur fichier Python injecté violait les règles de formatage et de linting du projet.
**Snyk** décrit ces attaques comme faisant partie de la lignée plus large **Shai-Hulud** / **Miasma**, chaque vague exploitant un voleur obfusqué basé sur le runtime **Bun** combiné à de nouveaux mécanismes de persistance, des routes d'exfiltration et une exécution automatisée du code lors de l'installation ou de la compilation.
**Cloudsmith** avertit que les clés signées et les comptes de mainteneur authentifiés ne garantissent plus une sécurité absolue. Lorsque les registres et dépôts en amont sont compromis, le code public devient un vecteur de compromission direct et puissant.