🎯 Contexte
L’article est publié le 21 mai 2026 par l’équipe SafeDep sur leur blog technique. Il documente une campagne d’attaque massive sur la chaîne d’approvisionnement logicielle, baptisée megalodon, détectée après que le moteur d’analyse Malysis de SafeDep a flagué le package npm @tiledesk/tiledesk-server@2.18.12.
📅 Déroulement de la campagne
Le 18 mai 2026, entre 11h36 et 17h48 UTC, un attaquant a poussé 5 718 commits malveillants sur 5 561 dépôts GitHub distincts en utilisant :
- Des comptes GitHub jetables avec des noms aléatoires de 8 caractères (ex:
rkb8el9r,bhlru9nr) - Des identités d’auteur forgées :
build-bot,auto-ci,ci-bot,pipeline-bot - Deux adresses email :
build-system@noreply.devetci-bot@automated.dev - Des messages de commit imitant la maintenance CI routinière
- Des PATs ou deploy keys compromis pour pousser directement sur les branches principales sans PR
🔧 Deux variantes de payload
Variante de masse (SysDiag) — utilisée dans 5 700+ dépôts :
- Ajoute un nouveau fichier
.github/workflows/ci.yml - Déclencheurs :
push(toutes branches) +pull_request_target - Exécution automatique maximale
Variante ciblée (Optimize-Build) — utilisée notamment sur Tiledesk :
- Remplace un workflow existant
- Déclencheur :
workflow_dispatchuniquement (backdoor dormant) - Activable à la demande via l’API GitHub
- Permissions :
id-token: write,actions: read
💣 Payload malveillant (111 lignes bash)
Le blob base64 décode en un script bash structuré en 5 phases :
- Variables d’environnement : dump de
printenv, lecture de/proc/*/environet PID 1 - Fichiers de credentials : 27 chemins ciblés (AWS, SSH, Docker, npm, GCP, GitHub CLI, Kubernetes, Terraform, Vault, git, historique shell)
- Harvesting cloud : appels AWS CLI par profil,
gcloud auth print-access-token, requêtes IMDS AWS/GCP/Azure - Scan de code source : 30+ patterns regex sur AWS keys, tokens GitHub/GitLab/Stripe/Slack/npm/PyPI, JWTs, chaînes de connexion DB, clés PEM
- Vol de tokens CI/CD : exfiltration de
ACTIONS_ID_TOKEN_REQUEST_URL+ token pour impersonation OIDC cloud
L’exfiltration se fait via curl POST vers http://216.126.225.129:8443 avec des headers X-Mega-DID, X-Mega-Plat, X-Mega-File et un sleep aléatoire entre appels.
📦 Impact sur Tiledesk et npm
Le dépôt tiledesk-server a été compromis via le commit acac5a9 (auteur : build-bot <build-system@noreply.dev>). Le mainteneur légitime (eljohnny / giovanni@tiledesk.com) a ensuite publié les versions 2.18.6 à 2.18.12 depuis le dépôt empoisonné sans détecter la modification. Le code applicatif est resté intact ; seul le fichier workflow a été altéré. 9 dépôts Tiledesk ont été touchés au total.
🏢 Organisations notables touchées
- Wiznet/ioLibrary_Driver (800+ étoiles)
- Tiledesk (784 étoiles agrégées, 4 dépôts)
- persian-tools (450 étoiles agrégées, 4 dépôts)
- Black-Iron-Project (8 dépôts), WISE-Community
🕵️ Techniques anti-forensiques
set +epour supprimer les erreurs|| truesur les appels curl- Répertoire temporaire avec trap de nettoyage
- Sleeps aléatoires entre exfiltrations
- Trigger
workflow_dispatch: aucune exécution visible dans l’onglet Actions
📋 Type d’article
Analyse technique détaillée publiée par SafeDep, documentant une campagne de compromission de la chaîne d’approvisionnement CI/CD à grande échelle, avec extraction complète des IoCs, décodage du payload et description des mécanismes d’attaque.
🧠 TTPs et IOCs détectés
TTP
- T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
- T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)
- T1552.001 — Unsecured Credentials: Credentials In Files (Credential Access)
- T1552.004 — Unsecured Credentials: Private Keys (Credential Access)
- T1552.007 — Unsecured Credentials: Container API (Credential Access)
- T1041 — Exfiltration Over C2 Channel (Exfiltration)
- T1027 — Obfuscated Files or Information (Defense Evasion)
- T1036.003 — Masquerading: Rename System Utilities (Defense Evasion)
- T1078.001 — Valid Accounts: Default Accounts (Defense Evasion)
- T1526 — Cloud Service Discovery (Discovery)
- T1083 — File and Directory Discovery (Discovery)
- T1213 — Data from Information Repositories (Collection)
- T1530 — Data from Cloud Storage (Collection)
- T1098.001 — Account Manipulation: Additional Cloud Credentials (Persistence)
IOC
- IPv4 :
216.126.225.129— AbuseIPDB · VT · ThreatFox - URLs :
http://216.126.225.129:8443— URLhaus - Emails :
build-system@noreply.dev - Emails :
ci-bot@automated.dev - Fichiers :
ci.yml - Fichiers :
docker-community-worker-push-latest.yml - Chemins :
.github/workflows/ci.yml - Chemins :
.github/workflows/docker-community-worker-push-latest.yml
Malware / Outils
- SysDiag (backdoor)
- Optimize-Build (backdoor)
🟡 Indice de vérification factuelle : 58/100 (moyenne)
- ⬜ safedep.io — source non référencée (0pts)
- ✅ 19566 chars — texte complet (fulltext extrait) (15pts)
- ✅ 8 IOCs (IPs/domaines/CVEs) (10pts)
- ✅ 1/2 IOC(s) confirmé(s) (AbuseIPDB, ThreatFox, URLhaus, VirusTotal) (8pts)
- ✅ 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 :
216.126.225.129(ip) → VT (18/91 détections) + ThreatFox (Unknown malware)
🔗 Source originale : https://safedep.io/megalodon-mass-github-repo-backdooring-ci-workflows/