🗓️ Contexte

Le 8 juin 2026, StepSecurity publie une analyse technique détaillée de la campagne Hades, une opération de compromission de la chaîne d’approvisionnement Python ciblant l’écosystème PyPI. Cette campagne est attribuée à l’acteur Miasma, déjà documenté dans des attaques npm précédentes.

📦 Packages compromis

Au total, 27 packages PyPI sont identifiés comme compromis, couvrant les domaines de la bioinformatique, du machine learning graphique et de l’analyse génotype-phénotype. Parmi les plus notables :

  • ensmallen 0.8.101 (package ML graphique populaire)
  • pyphetools 0.9.120, gpsea 0.9.14, dynamo-release 1.5.4
  • rlask 3.1.4–3.1.7, magique 0.6.8–0.6.9, pantheon-agents 0.6.1–0.6.2

⚙️ Chaîne d’exécution

Étape 1 – Hook d’import Python : Un hook obfusqué dans __init__.py télécharge le runtime Bun v1.3.14 depuis GitHub et exécute _index.js. Un fichier verrou /tmp/.bun_ran empêche les exécutions multiples.

Étape 2 – Injection de prompt LLM : Le fichier _index.js contient un bloc de texte conçu pour tromper les pipelines d’analyse automatisés basés sur des LLM, leur faisant classifier le package comme sain.

Étape 3 – Déchiffrement modulaire : 16 blobs indépendants chiffrés en AES-256-GCM et compressés en gzip sont déchiffrés à l’exécution selon l’OS cible.

Étape 4 – Scrapers mémoire cross-platform :

  • Linux : lecture de /proc/{pid}/mem
  • macOS : utilisation des APIs Mach kernel (task_for_pid, mach_vm_read_overwrite) via ctypes
  • Windows : script PowerShell compilant du C# avec VirtualQueryEx et ReadProcessMemory

Étape 5 – Canaux C2 via GitHub :

  • DontRevokeOrItGoesBoom : dépôt de tokens GitHub Personal Access volés
  • TheBeautifulSnadsOfTime : payloads JavaScript signés RSA-PSS exécutés via eval()
  • firedalazer : daemon Python updater.py interrogeant GitHub toutes les heures

Étape 6 – Exfiltration : Secrets chiffrés hybride (AES-256-GCM + RSA-2048) poussés vers des dépôts GitHub publics nommés selon le pattern stygian-cerberus-[N] ou tartarean-charon-[N] avec la description “Hades - The End for the Damned”.

Étape 7 – Propagation worm :

  • SSH/SCP : lecture de ~/.ssh/known_hosts et ~/.ssh/config pour se propager
  • OIDC/SLSA bypass : exploitation des tokens OIDC GitHub Actions pour publier des packages compromis avec une provenance Sigstore valide sur PyPI et npm
  • Injection de workflows GitHub Actions : deux méthodes (push-triggered et deployment-triggered) pour extraire les secrets organisationnels via un workflow nommé Run Copilot
  • Backdoor IDE/AI : modification de fichiers de configuration pour 14 assistants IA (Claude, Codex, Gemini, Copilot, Cline, Aider, etc.)

Étape 8 – Persistance et wiper : Installation d’un service update-monitor (C2) et d’un service gh-token-monitor qui déclenche rm -rf ~/ si le token volé est révoqué, dissuadant les équipes de sécurité d’agir rapidement.

🎯 Secteurs ciblés

Développeurs Python, équipes CI/CD, organisations utilisant GitHub Actions, écosystème bioinformatique et machine learning.

📋 Type d’article

Analyse technique approfondie publiée par StepSecurity, visant à documenter la chaîne d’attaque complète, fournir les IOCs et alerter les équipes de sécurité sur une campagne active de supply chain.

🧠 TTPs et IOCs détectés

Acteurs de menace

  • Miasma (unknown) —

TTP

  • T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
  • T1059.006 — Command and Scripting Interpreter: Python (Execution)
  • T1059.001 — Command and Scripting Interpreter: PowerShell (Execution)
  • T1059.007 — Command and Scripting Interpreter: JavaScript (Execution)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1055 — Process Injection (Defense Evasion)
  • T1003 — OS Credential Dumping (Credential Access)
  • T1552.001 — Unsecured Credentials: Credentials In Files (Credential Access)
  • T1041 — Exfiltration Over C2 Channel (Exfiltration)
  • T1567.001 — Exfiltration Over Web Service: Exfiltration to Code Repository (Exfiltration)
  • T1021.004 — Remote Services: SSH (Lateral Movement)
  • T1543.001 — Create or Modify System Process: Launch Agent (Persistence)
  • T1543.002 — Create or Modify System Process: Systemd Service (Persistence)
  • T1485 — Data Destruction (Impact)
  • T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
  • T1102.002 — Web Service: Bidirectional Communication (Command and Control)
  • T1553 — Subvert Trust Controls (Defense Evasion)
  • T1601 — Modify System Image (Defense Evasion)

IOC

  • Domaines : fulcio.sigstore.devVT · URLhaus · ThreatFox
  • Domaines : rekor.sigstore.devVT · URLhaus · ThreatFox
  • URLs : https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/bun-linux-x64.zipURLhaus
  • URLs : https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/bun-darwin-x64.zipURLhaus
  • URLs : https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/bun-windows-x64.zipURLhaus
  • URLs : https://api.github.com/search/commits?q=firedalazerURLhaus
  • URLs : https://api.github.com/userURLhaus
  • Fichiers : _index.js
  • Fichiers : updater.py
  • Fichiers : gh-token-monitor.sh
  • Fichiers : ai_setup.sh
  • Fichiers : ai_init.js
  • Fichiers : codeql.yml
  • Fichiers : format-results.txt
  • Chemins : /tmp/.bun_ran
  • Chemins : /tmp/tmp.0144018410.lock
  • Chemins : /var/tmp/.gh_update_state
  • Chemins : ~/.local/share/updater/update.py
  • Chemins : ~/.config/systemd/user/update-monitor.service
  • Chemins : ~/.config/systemd/user/gh-token-monitor.service
  • Chemins : ~/Library/LaunchAgents/com.user.update-monitor.plist
  • Chemins : ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
  • Chemins : ~/.local/bin/gh-token-monitor.sh
  • Chemins : ~/.config/gh-token-monitor/token
  • Chemins : .claude/settings.json
  • Chemins : .claude/index.js
  • Chemins : .claude/setup.mjs
  • Chemins : .vscode/tasks.json
  • Chemins : .vscode/setup.mjs
  • Chemins : .github/workflows/codeql.yml
  • Chemins : /tmp/b/bun

Malware / Outils

  • Hades Campaign payload (other)
  • Bun runtime loader (loader)
  • updater.py (C2 daemon) (backdoor)
  • gh-token-monitor (wiper) (other)
  • macOS Mach VM Scraper (tool)
  • Windows MemDump (PowerShell/C#) (tool)

🟢 Indice de vérification factuelle : 67/100 (haute)

  • ⬜ stepsecurity.io — source non référencée (0pts)
  • ✅ 28893 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 31 IOCs (IPs/domaines/CVEs) (10pts)
  • ✅ 2/5 IOCs confirmés (ThreatFox, URLhaus, VirusTotal) (12pts)
  • ✅ 18 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ✅ acteur(s) identifié(s) : Miasma (5pts)
  • ⬜ pas de CVE à vérifier (0pts)

IOCs confirmés externellement :

  • fulcio.sigstore.dev (domain) → VT (15/92 détections)
  • rekor.sigstore.dev (domain) → VT (16/92 détections)

🔗 Source originale : https://www.stepsecurity.io/blog/the-hades-campaign-pypi-packages