🎯 Contexte

Source : Wiz Research, publié le 20 mars 2026. Le 19 mars 2026, des acteurs malveillants se désignant sous le nom TeamPCP ont mené une attaque de supply chain ciblant Aqua Security’s Trivy, un scanner de vulnérabilités open source largement utilisé dans les environnements DevSecOps et CI/CD.

🔍 Déroulement de l’attaque

L’attaque s’est déroulée en plusieurs étapes :

  • Commits impersonateurs : TeamPCP a poussé des commits malveillants en usurpant l’identité des utilisateurs rauchg (sur actions/checkout) et DmitriyLewen (sur aquasecurity/trivy).
  • Tag v0.69.4 malveillant : À 17:43:37 UTC, le tag v0.69.4 a été poussé, déclenchant la publication de binaires backdoorés sur GitHub Releases, Docker Hub, GHCR et ECR.
  • Domaine typosquatté : Le code malveillant contactait scan.aquasecurtiy[.]org (résolvant vers 45.148.10.212) pour l’exfiltration.
  • Compromission du compte aqua-bot : L’attaquant a abusé de ce compte pour pousser des workflows malveillants vers tfsec, traceeshark et trivy-action, volant des clés GPG, credentials Docker Hub, Twitter et Slack.
  • Force-push de tags : 75 sur 76 tags de trivy-action et 7 tags de setup-trivy ont été écrasés par des versions malveillantes.
  • Expansion vers npm : Le 22 mars, TeamPCP a étendu ses opérations à l’écosystème npm via un worm nommé CanisterWorm exploitant des tokens de publication volés.
  • Images Docker malveillantes : Les versions 0.69.5 et 0.69.6 de Trivy ont été publiées sur Docker Hub le 22 mars vers 16:00 UTC.

🦠 Comportement du malware

Dans les GitHub Actions (trivy-action / setup-trivy)

Payload en 3 étapes :

  1. Collecte : Lecture de /proc/<pid>/mem pour extraire les secrets GitHub Actions, balayage du filesystem pour SSH, AWS/GCP/Azure credentials, tokens Kubernetes, wallets crypto (50+ chemins sensibles).
  2. Chiffrement : AES-256-CBC + RSA-4096 hybride, bundle tpcp.tar.gz.
  3. Exfiltration : Vers scan.aquasecurtiy[.]org ; fallback : création d’un repo tpcp-docs dans le compte GitHub victime.

Dans le binaire Trivy malveillant (v0.69.4)

  • Lance en parallèle le service Trivy légitime et le code malveillant.
  • Collecte variables d’environnement, credentials filesystem, interfaces réseau.
  • Exfiltration via POST vers https://scan.aquasecurtiy[.]org.
  • Persistance sur machines développeur : Si GITHUB_ACTIONS != "true", écrit ~/.config/systemd/user/sysmon.py et crée une unité systemd.
  • sysmon.py poll https://tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io/ et exécute tout payload non-YouTube trouvé dans /tmp/pglog.
  • Le C2 ICP héberge un payload évolutif nommé kamikaze.sh.

📅 Chronologie des mises à jour

  • 19 mars : Compromission initiale, publication de v0.69.4 malveillant.
  • 22 mars 13:15 UTC : Expansion vers npm via CanisterWorm, C2 ICP actif avec kamikaze.sh.
  • 22 mars ~16:00 UTC : Publication d’images Docker malveillantes (0.69.5, 0.69.6).
  • 22 mars 21:31 UTC : Le canister ICP rendu indisponible pour violation de politique.

📋 Type d’article

Il s’agit d’un rapport d’incident technique publié par Wiz Research, visant à documenter l’attaque, fournir les IOCs et guider les équipes de sécurité dans l’audit de leurs environnements.

🧠 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)
  • T1554 — Compromise Client Software Binary (Persistence)
  • T1078 — Valid Accounts (Defense Evasion)
  • T1036 — Masquerading (Defense Evasion)
  • 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)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1543.001 — Create or Modify System Process: Launch Agent (Persistence)
  • T1053 — Scheduled Task/Job (Persistence)
  • T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
  • T1102 — Web Service (Command and Control)
  • T1588.002 — Obtain Capabilities: Tool (Resource Development)
  • T1608.003 — Stage Capabilities: Install Digital Certificate (Resource Development)

IOC

  • IPv4 : 45.148.10.212
  • Domaines : scan.aquasecurtiy.org
  • Domaines : tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io
  • Domaines : plug-tab-protective-relay.trycloudflare.com
  • URLs : https://scan.aquasecurtiy.org
  • URLs : https://tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io/
  • SHA256 : 887e1f5b5b50162a60bd03b66269e0ae545d0aef0583c1c5b00972152ad7e073
  • SHA256 : f7084b0229dce605ccc5506b14acd4d954a496da4b6134a294844ca8d601970d
  • SHA256 : 822dd269ec10459572dfaaefe163dae693c344249a0161953f0d5cdd110bd2a0
  • SHA256 : bef7e2c5a92c4fa4af17791efc1e46311c0f304796f1172fce192f5efc40f5d7
  • SHA256 : e64e152afe2c722d750f10259626f357cdea40420c5eedae37969fbf13abbecf
  • SHA256 : ecce7ae5ffc9f57bb70efd3ea136a2923f701334a8cd47d4fbf01a97fd22859c
  • SHA256 : d5edd791021b966fb6af0ace09319ace7b97d6642363ef27b3d5056ca654a94c
  • SHA256 : e6310d8a003d7ac101a6b1cd39ff6c6a88ee454b767c1bdce143e04bc1113243
  • SHA256 : 6328a34b26a63423b555a61f89a6a0525a534e9c88584c815d937910f1ddd538
  • SHA256 : 0880819ef821cff918960a39c1c1aada55a5593c61c608ea9215da858a86e349
  • SHA1 : 8afa9b9f9183b4e00c46e2b82d34047e3c177bd0
  • SHA1 : 386c0f18ac3d7f2ed33e2d884761119f4024ff8a
  • SHA1 : 384add36b52014a0f99c0ab3a3d58bd47e53d00f
  • SHA1 : 7a4b6f31edb8db48cc22a1d41e298b38c4a6417e
  • SHA1 : 6d8d730153d6151e03549f276faca0275ed9c7b2
  • SHA1 : 99b93c070aac11b52dfc3e41a55cbb24a331ae75
  • SHA1 : f4436225d8a5fd1715d3c2290d8a50643e726031
  • SHA1 : f4f1785be270ae13f36f6a8cfbf6faaae50e660a
  • SHA1 : 0891663bc55073747be0eb864fbec3727840945d
  • SHA1 : 2e7964d59cd24d1fd2aa4d6a5f93b7f09ea96947
  • SHA1 : ddb9da4475c1cef7d5389062bdfdfbdbd1394648
  • SHA1 : 4209dcadeaea6a7df69262fef1beeda940881d4d
  • SHA1 : f5c9fd927027beaa3760d2a84daa8b00e6e5ee21
  • SHA1 : 18f01febc4c3cd70ce6b94b70e69ab866fc033f5
  • SHA1 : bb75a9059c2d5803db49e6ed6c6f7e0b367f96be
  • SHA1 : d488f4388ff4aa268906e25c2144f1433a4edec2
  • SHA1 : 3c615ac0f29e743eda8863377f9776619fd2db76
  • SHA1 : a9bc513ea7989e3234b395cafb8ed5ccc3755636
  • SHA1 : 8519037888b189f13047371758f7aed2283c6b58
  • SHA1 : 8cfb9c31cc944da57458555aa398bb99336d5a1f
  • SHA1 : 9092287c0339a8102f91c5a257a7e27625d9d029
  • SHA1 : 7b955a5ece1e1b085c12dac7ac10e0eb1f5b0d4d
  • SHA1 : 19851bef764b57ff95b35e66589f31949eeb229d
  • SHA1 : 61fbe20b7589e6b61eedcd5fe1e958e1a95fbd13
  • SHA1 : fa78e67c0df002c509bcdea88677fb5e2fe6a9b1
  • SHA1 : b7befdc106c600585d3eec87d7e98e1c136839ae
  • SHA1 : 7f6f0ce52a59bdfc5757c3982aac2353b58f4c73
  • SHA1 : ddb6697447a97198bdef9bae00215059eb5e8bc2
  • SHA1 : 3dffed04dc90cf1c548f40577d642c52241ec76c
  • SHA1 : ad623e14ebdfe82b9627811d57b9a39e283d6128
  • SHA1 : 848d665ed24dc1a41f6b4b7c7ffac7693d6b37be
  • SHA1 : ddb94181dcbc723d96ffc07fddd14d97e4849016
  • SHA1 : b7252377a3d82c73d497bfafa3eabe84de1d02c4
  • SHA1 : fa4209b6182a4c1609ce34d40b67f5cfd7f00f53
  • SHA1 : 2b1dac84ff12ba56158b3a97e2941a587cb20da9
  • SHA1 : 66c90331c8b991e7895d37796ac712b5895dda3b
  • SHA1 : fd429cf86db999572f3d9ca7c54561fdf7d388a4
  • SHA1 : 8ae5a08aec3013ee8f6132b2a9012b45002f8eaa
  • SHA1 : 2a51c5c5bb1fd1f0e134c9754f1702cfa359c3dd
  • SHA1 : 9c000ba9d482773cbbc2c3544d61b109bc9eb832
  • SHA1 : 91e7c2c36dcad14149d8e455b960af62a2ffb275
  • SHA1 : 4bdcc5d9ef3ddb42ccc9126e6c07faa3df2807e3
  • SHA1 : 9e8968cb83234f0de0217aa8c934a68a317ee518
  • SHA1 : c5967f85626795f647d4bf6eb67227f9b79e02f5
  • SHA1 : b745a35bad072d93a9b83080e9920ec52c6b5a27
  • SHA1 : 38623bf26706d51c45647909dcfb669825442804
  • SHA1 : 555e7ad4c895c558c7214496df1cd56d1390c516
  • SHA1 : 2297a1b967ecc05ba2285eb6af56ab4da554ecae
  • SHA1 : 820428afeb64484d311211658383ce7f79d31a0a
  • SHA1 : f77738448eec70113cf711656914b61905b3bd47
  • SHA1 : 252554b0e1130467f4301ba65c55a9c373508e35
  • SHA1 : 22e864e71155122e2834eb0c10d0e7e0b8f65aa3
  • SHA1 : 405e91f329294fb696f55793203abf1f6aba9b40
  • SHA1 : 506d7ff06abc509692c600b5b69b4dc6ceaa4b15
  • SHA1 : 276ca9680f6df9016db12f7c48571e5c4639451d
  • SHA1 : aa3c46a9643b18125abb8aefc13219014e9c4be8
  • SHA1 : ea56cd31d82b853932d50f1144e95b21817e52cf
  • SHA1 : 0d49ceb356f7d4735c63bd0d5c7e67665ec7f80c
  • SHA1 : 7550f14b64c1c724035a075b36e71423719a1f30
  • SHA1 : da73ae0790e458e878b300b57ceb5f81ac573b46
  • SHA1 : 6ec7aaf336b7d2593d980908be9bc4fed6d407c6
  • SHA1 : cf19d27c8a7fb7a8bbf1e1000e9318749bcd82cf
  • SHA1 : ef3a510e3f94df3ea9fcd01621155ca5f2c3bf5b
  • SHA1 : 6fc874a1f9d65052d4c67a314da1dae914f1daff
  • SHA1 : b9faa60f85f6f780a34b8d0faaf45b3e3966fdda
  • SHA1 : ab6606b76e5a054be08cab3d07da323e90e751e8
  • SHA1 : a5b4818debf2adbaba872aaffd6a0f64a26449fa
  • SHA1 : e53b0483d08da44da9dfe8a84bf2837e5163699b
  • SHA1 : 8aa8af3ea1de8e968a3e49a40afb063692ab8eae
  • SHA1 : 91d5e0a13afab54533a95f8019dd7530bd38a071
  • SHA1 : 794b6d99daefd5e27ecb33e12691c4026739bf98
  • SHA1 : 9ba3c3cd3b23d033cd91253a9e61a4bf59c8a670
  • SHA1 : e0198fd2b6e1679e36d32933941182d9afa82f6f
  • SHA1 : 9738180dd24427b8824445dbbc23c30ffc1cb0d8
  • SHA1 : 3201ddddd69a1419c6f1511a14c5945ba3217126
  • SHA1 : 985447b035c447c1ed45f38fad7ca7a4254cb668
  • SHA1 : 3d1b5be1589a83fc98b82781c263708b2eb3b47b
  • SHA1 : fd090040b5f584f4fcbe466878cb204d0735dcf4
  • SHA1 : 85cb72f1e8ee5e6e44488cd6cbdbca94722f96ed
  • SHA1 : cf1692a1fc7a47120e6508309765db7e33477946
  • SHA1 : 1d74e4cf63b7cf083cf92bf5923cf037f7011c6b
  • SHA1 : c19401b2f58dc6d2632cb473d44be98dd8292a93
  • Fichiers : kamikaze.sh
  • Fichiers : sysmon.py
  • Fichiers : tpcp.tar.gz
  • Fichiers : entrypoint.sh
  • Fichiers : action.yaml
  • Chemins : /tmp/pglog
  • Chemins : ~/.config/systemd/user/sysmon.py

Malware / Outils

  • TeamPCP Cloud Stealer (stealer)
  • CanisterWorm (other)
  • kamikaze.sh (loader)

🔗 Source originale : https://www.wiz.io/blog/trivy-compromised-teampcp-supply-chain-attack