🎯 Contexte

Analyse technique publiée le 12 novembre 2026 par Endor Labs (Sriram Subramanian, Henrik Plate, Bhavik Malhotra), basée sur les indicateurs publiés par Aikido Security. L’attaque est en cours depuis le 10 novembre 2026 et touche des milliers de dépôts GitHub à l’échelle mondiale.

🔓 Vecteur d’infection

L’attaquant utilise des credentials GitHub volés appartenant à 4 837 développeurs réels (dont au moins un via un token OAuth GitHub CLI leaked) pour se connecter et pousser du code malveillant. Aucun typosquat ni dependency confusion n’est impliqué : l’accès est légitime du point de vue de GitHub.

⛓️ Chaîne d’attaque

  1. Prise de contrôle de compte via credentials volés
  2. PR sonde (titre : “docs: dependency audit notes”, branche wfx-docs) pour tester l’accès en écriture
  3. Injection du payload via l’une de trois méthodes :
    • Injection dans un workflow existant (commit “ci: refresh build cache”)
    • Hook postinstall npm (commit “chore: add ci helper”, script .ci-xxxxxx.sh)
    • Nouveau workflow sur branche jetable (commit “chore: add dependency audit workflow”)
  4. Exécution par GitHub Actions
  5. Exfiltration par HTTP POST vers le serveur attaquant (port 8080, endpoint /exfil)
  6. Effacement des traces : revert du commit en quelques secondes, suppression du workflow run et de ses logs

🦠 Capacités du stealer “wfx”

Script shell non obfusqué d’environ 1 500 lignes, structuré en 4 étapes :

  • Stage 1 – Collecte : tous les secrets/variables Actions, GITHUB_TOKEN, tokens OIDC, fichiers de credentials (AWS, Azure, GCP, Docker, Kubernetes, npm, PyPI, SSH, GPG, Vault, Terraform), clés AI (OpenAI, Anthropic, Gemini, Hugging Face, Cursor, Copilot), historiques shell, fichiers .env/.pem/kubeconfig, mémoire du runner
  • Stage 2 – Escalade : mint de tokens OIDC GitHub échangés contre des sessions AWS/GCP/Azure, chaînage de rôles AWS, création de clés IAM longue durée, impersonation de comptes de service GCP, replay de tokens Azure CLI
  • Stage 3 – Persistance : réécriture de la trust policy AWS en "AWS": "*", ajout de federated credentials Azure nommés wfx-ci-*, publication de faux status checks
  • Stage 4 – Exfiltration : tarball gzippé envoyé par HTTP POST ; canaux alternatifs (cache Actions, artifacts wfx-loot-, step summary) présents dans le code mais désactivés

📊 Impact

  • 8 926 dépôts infectés (dont 27 avec +100 étoiles, ex: nextcloud/docker avec 7 429 étoiles, 20 dépôts webdriverio)
  • 61 764 dépôts sondés
  • 1 806+ dépôts avec credentials confirmés volés
  • 50+ comptes hijackés publient sur npm, Go, Packagist, PyPI ou crates
  • Packages malveillants confirmés : digitalelvis/neuronai-studio@3.14.3 (Packagist), github.com/onuragtas/docker-env@v1.0.278 et v1.0.280 (Go)

🔄 Évolution du payload (v1 à v5)

  • v1 (10 nov, 695 repos) : injection workflow, exfil vers 18.143.168.96:8080, bug regex mémoire
  • v2 (10-11 nov, 7 342 repos) : correction bugs, ajout persistance IAM AWS, hook npm postinstall, second serveur 194.150.166.244:8080
  • v3 (12 nov, 1 repo test) : ajout exfil Telegram (5 bots), nouveau serveur 153.75.82.159:8080
  • v4 (12 nov, 1 repo test) : Telegram devient canal principal, IP C2 pointée sur 127.0.0.1 pour éviter détection
  • v5 (12 nov, 2 473 repos, en cours) : Telegram sur chaque run, tous les vecteurs de livraison actifs, commentaires en indonésien, 1 838 repos déjà touchés par v1/v2 re-ciblés

📋 Type d’article

Analyse technique approfondie et rapport d’incident, visant à informer les équipes de sécurité sur le fonctionnement de l’attaque, son impact et les indicateurs de compromission associés.

🧠 TTPs et IOCs détectés

TTP

  • T1078 — Valid Accounts (Initial Access)
  • T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
  • T1552.001 — Unsecured Credentials: Credentials In Files (Credential Access)
  • T1552.004 — Unsecured Credentials: Private Keys (Credential Access)
  • T1528 — Steal Application Access Token (Credential Access)
  • T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)
  • T1098 — Account Manipulation (Persistence)
  • T1136 — Create Account (Persistence)
  • T1537 — Transfer Data to Cloud Account (Exfiltration)
  • T1041 — Exfiltration Over C2 Channel (Exfiltration)
  • T1070 — Indicator Removal (Defense Evasion)
  • T1548 — Abuse Elevation Control Mechanism (Privilege Escalation)
  • T1550.001 — Use Alternate Authentication Material: Application Access Token (Lateral Movement)
  • T1496 — Resource Hijacking (Impact)

IOC

  • IPv4 : 194.150.166.244 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 18.143.168.96 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 153.75.82.159 — AbuseIPDB · VT · ThreatFox
  • URLs : http://194.150.166.244:8080/exfil — URLhaus
  • URLs : http://18.143.168.96:8080/exfil — URLhaus
  • URLs : http://153.75.82.159:8080/exfil — URLhaus
  • SHA256 : 89695abb392d5cfd4972672961e644bb46baa98aa1ed7173c2a2816c762735cf — VT · MalwareBazaar
  • Fichiers : .ci-a4oytg.sh
  • Chemins : .github/workflows/build-audit-*.yml
  • Chemins : .ci-[a-z0-9]{6}.sh

⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 13 novembre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.

Malware / Outils

  • wfx (stealer)

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

  • ⬜ endorlabs.com — source non référencée (0pts)
  • ✅ 26510 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 10 IOCs dont des hashes (15pts)
  • ✅ 2/7 IOCs confirmés (AbuseIPDB, MalwareBazaar, ThreatFox, URLhaus, VirusTotal) (12pts)
  • ✅ 14 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ pas de CVE à vérifier (0pts)

IOCs confirmés externellement :

  • 194.150.166.244 (ip) → VT (7/92 détections)
  • 153.75.82.159 (ip) → VT (3/92 détections)

🔗 Source originale : https://www.endorlabs.com/learn/github-actions-supply-chain-attack-targeting-ci-secrets-at-scale