🔍 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.py qui dumpe la mémoire du processus Runner.Worker pour 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:latest dans kube-system en montant le filesystem hôte
  • Persistance LiteLLM : implantation via un fichier .pth exé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