🔍 Contexte
Article publié le 2 avril 2026 (mis à jour le 8 avril) par Alessandro Brucato sur le blog de Tracebit. Il documente la campagne TeamPCP, une série d’attaques supply chain ciblant des outils open source largement utilisés dans les pipelines CI/CD, et présente une approche de détection par canary credentials.
📅 Chronologie de la campagne
- 19 mars : Compromission de plusieurs GitHub Actions du scanner Trivy (Aqua Security)
- 22 mars : Utilisation des credentials volés pour compromettre des dizaines de packages npm via un ver auto-propagant nommé CanisterWorm ; publication de versions malveillantes de Trivy sur Docker Hub
- 23 mars : Compromission des GitHub Actions et extensions OpenVSX du scanner KICS (Checkmarx) avec un malware similaire
- 24 mars : Compromission du package PyPI LiteLLM (deux versions malveillantes publiées)
- 27 mars : Compromission du package PyPI Telnyx (deux versions malveillantes publiées)
🦠 Comportement du malware
Tous les incidents déploient le “TeamPCP Cloud Stealer”, un malware de collecte massive de credentials :
- Sur GitHub-hosted Linux runners : exécution d’un script
memdump.pyqui dumpe la mémoire du processusRunner.Workerpour voler les secrets GitHub - Sur les autres environnements : scraping du système de fichiers à la recherche de credentials cloud, clés SSH, tokens de gestionnaires de packages, etc.
- Avec LiteLLM : introduction d’une étape de mouvement latéral — si un token de service account Kubernetes est présent, le malware lit tous les secrets du cluster et tente de créer un pod privilégié
alpine:latestdanskube-systemen montant le filesystem hôte - Persistance LiteLLM : implantation via un fichier
.pthexécuté à chaque démarrage de processus Python - Exfiltration via GitHub API : création de repos pour contourner la détection réseau
⚠️ Selon vxunderground, l’attaque LiteLLM seule aurait exfiltré ~300 Go de données depuis 500 000 machines infectées.
🔗 Propagation en chaîne
Les credentials volés chez une victime servent à compromettre la suivante : Trivy → CanisterWorm (66+ packages npm) → LiteLLM (utilisait Trivy dans son pipeline CI/CD) → Telnyx (credentials probablement récupérés depuis l’environnement LiteLLM compromis).
🕯️ Approche de détection : Canary Credentials
Tracebit a développé une GitHub Action (Community Edition) qui injecte de faux credentials AWS dans les workflows CI/CD. Ces canaries sont placés dans ~/.aws/credentials, les variables d’environnement et la mémoire du processus runner. Toute utilisation de ces credentials déclenche une alerte avec contexte complet (repository, workflow, job, commit SHA, run ID, IP attaquant, user-agent, logs CloudTrail).
📄 Type d’article
Analyse technique combinant un post-mortem de campagne et la présentation d’un outil de détection (canary credentials). But principal : documenter la campagne TeamPCP et démontrer l’efficacité des canary credentials comme contrôle détectif dans les pipelines CI/CD.
🧠 TTPs et IOCs détectés
Acteurs de menace
- TeamPCP (unknown) —
TTP
- 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)
- T1003 — OS Credential Dumping (Credential Access)
- T1041 — Exfiltration Over C2 Channel (Exfiltration)
- T1567.001 — Exfiltration Over Web Service: Exfiltration to Code Repository (Exfiltration)
- T1610 — Deploy Container (Defense Evasion)
- T1613 — Container and Resource Discovery (Discovery)
- T1543 — Create or Modify System Process (Persistence)
- T1059.006 — Command and Scripting Interpreter: Python (Execution)
IOC
- Fichiers :
memdump.py - Chemins :
~/.aws/credentials
Malware / Outils
- TeamPCP Cloud Stealer (stealer)
- CanisterWorm (other)
🟡 Indice de vérification factuelle : 41/100 (moyenne)
- ⬜ tracebit.com — source non référencée (0pts)
- ✅ 10329 chars — texte complet (fulltext extrait) (15pts)
- ✅ 2 IOC(s) (6pts)
- ⬜ pas d’IOC vérifié (0pts)
- ✅ 10 TTPs MITRE identifiées (15pts)
- ⬜ date RSS ou approximée (0pts)
- ✅ acteur(s) identifié(s) : TeamPCP (5pts)
- ⬜ pas de CVE à vérifier (0pts)
🔗 Source originale : https://tracebit.com/blog/detecting-cicd-supply-chain-attacks-with-canary-credentials