🔍 Contexte

Publié le 30 mars 2026 par OpenSourceMalware.com, cet article constitue une rétrospective complète de la campagne supply chain orchestrée par TeamPCP en mars 2026. L’attaque a débuté par un incident de moindre ampleur en février 2026 et s’est transformée en la compromission en cascade de cinq écosystèmes majeurs en l’espace de cinq jours.

🎭 Acteur de la menace

TeamPCP (alias DeadCatx3, PCPcat, ShellForce) est un groupe à motivation financière, spécialisé dans les environnements cloud-native. Il est lié à l’opération de ransomware CipherForce et entretient des liens de coordination confirmés avec LAPSUS$, selon le CTO de Mandiant Charles Carmakal lors de la RSA Conference. Le groupe est suivi par Aikido Security, Socket, Wiz, Flare et d’autres.

🗓️ Chronologie des phases

  • Phase 0 (27 fév.) : Un bot autonome (hackerbot-claw) exploite une misconfiguration pull_request_target dans le dépôt Trivy (Aqua Security) via la PR #10252, exfiltrant un PAT vers recv.hackmoltrepeat[.]com. 178 releases Trivy supprimées, dépôt brièvement rendu privé.
  • Phase 1 (19 mars) : Réutilisation du credential non révoqué 20 jours plus tard. Tag malveillant v0.69.4 poussé sur Trivy, 76 tags force-pushés sur trivy-action, 7 tags sur setup-trivy. Payload collectant secrets CI/CD, clés SSH, credentials cloud, wallets crypto, exfiltré vers scan.aquasecurtiy[.]org.
  • Phase 2 (22 mars) : Via le compte Argon-DevOps-Mgt, défacement de 44 dépôts internes d’Aqua Security (aquasec-com) en moins de 2 minutes.
  • Phase 3 (20-22 mars) : CanisterWorm déployé sur npm via des tokens publish volés. 141 artefacts malveillants publiés sur 66+ packages. C2 via nœud ICP Canister tdtqy-oyaaa-aaaae-af2dq-cai.
  • Phase 4 (23-24 mars) : Hijack de LiteLLM sur PyPI. Versions 1.82.7 et 1.82.8 publiées avec le token PYPI de Krrish Dholakia (CEO BerriAI). Technique .pth pour exécution au démarrage de tout interpréteur Python.
  • Phase 5 (23-24 mars) : Compromission des GitHub Actions Checkmarx (ast-github-action, kics-github-action) et publication d’extensions OpenVSX malveillantes (ast-results v2.53.0, cx-dev-assist v1.7.0).
  • Phase 6 (27 mars) : Hijack du package Telnyx sur PyPI (4.87.1, 4.87.2). Payload livré via stéganographie audio (fichiers WAV hangup.wav / ringtone.wav).

💣 Payload destructeur géociblé

Le script kamikaze.sh a évolué en 6 versions le 22 mars via le dead-drop ICP Canister. Sur les systèmes détectant le fuseau Asia/Tehran, la locale Iran ou fa_IR, il déployait un DaemonSet Kubernetes privilégié nommé host-provisioner-iran pour effacer le système de fichiers sur tous les nœuds, ou exécutait rm -rf / --no-preserve-root en dehors de Kubernetes.

🔗 Techniques notables

  • Exploitation de pull_request_target pour exfiltration mémoire via /proc/pid/mem
  • Force-push de tags Git (invisible à l’API events GitHub)
  • Usurpation d’identité de mainteneurs avec commits backdatés
  • Stéganographie audio (WAV) pour livraison de payload
  • Fichier .pth Python pour exécution persistante sans import
  • C2 décentralisé via nœuds ICP (Internet Computer Protocol)
  • Exfiltration de secours via création de dépôts publics dans les orgs victimes
  • Chiffrement AES-256-CBC sous clé RSA-4096 hardcodée (lien d’attribution inter-phases)

📋 Type d’article

Rétrospective technique détaillée publiée par OpenSourceMalware.com, visant à documenter exhaustivement la campagne TeamPCP de mars 2026 pour les équipes CTI et défenseurs.

🧠 TTPs et IOCs détectés

Acteurs de menace

  • TeamPCP (cybercriminal)
  • LAPSUS$ (cybercriminal)
  • CipherForce (cybercriminal)

TTP

  • T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
  • T1059.006 — Command and Scripting Interpreter: Python (Execution)
  • 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)
  • T1003 — OS Credential Dumping (Credential Access)
  • T1041 — Exfiltration Over C2 Channel (Exfiltration)
  • T1027.003 — Obfuscated Files or Information: Steganography (Defense Evasion)
  • T1543.002 — Create or Modify System Process: Systemd Service (Persistence)
  • T1485 — Data Destruction (Impact)
  • T1496 — Resource Hijacking (Impact)
  • T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
  • T1102 — Web Service (Command and Control)
  • T1036.005 — Masquerading: Match Legitimate Name or Location (Defense Evasion)
  • T1134 — Access Token Manipulation (Privilege Escalation)
  • T1611 — Escape to Host (Privilege Escalation)
  • T1562.001 — Impair Defenses: Disable or Modify Tools (Defense Evasion)
  • T1078 — Valid Accounts (Defense Evasion)

IOC

  • IPv4 : 45.148.10.212
  • IPv4 : 83.142.209.203
  • Domaines : recv.hackmoltrepeat.com
  • Domaines : scan.aquasecurtiy.org
  • Domaines : checkmarx.zone
  • Domaines : models.litellm.cloud
  • URLs : https://tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io
  • URLs : https://plug-tab-protective-relay.trycloudflare.com
  • SHA256 : ceNa7wMJnNHy1kRnNCcwJaFjWX3pORLfMh7xGL8TUjg
  • CVEs : CVE-2026-33634
  • Fichiers : tpcp.tar.gz
  • Fichiers : kamikaze.sh
  • Fichiers : litellm_init.pth
  • Fichiers : hangup.wav
  • Fichiers : ringtone.wav
  • Fichiers : bg_kube.wav
  • Fichiers : bg_prop.wav
  • Fichiers : msbuild.exe
  • Fichiers : service.py
  • Fichiers : sysmon.py
  • Chemins : /tmp/pglog
  • Chemins : /tmp/.pg_state
  • Chemins : ~/.config/sysmon/sysmon.py
  • Chemins : ~/.local/share/pgmon/service.py
  • Chemins : %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe

Malware / Outils

  • CanisterWorm (botnet)
  • kamikaze.sh (other)
  • hackerbot-claw (tool)
  • pgmon.service (backdoor)

🔗 Source originale : https://opensourcemalware.com/blog/teampcp-supply-chain-campaign