Contexte
Trivy, le scanner de vulnérabilités open-source d'Aqua Security, a été la cible d'une attaque supply chain référencée CVE-2026-33634 (GHSA-69fq-xp46-6x23). Un threat actor (TeamPCP / DeadCatx3) a injecté du code malveillant dans les binaires Trivy, les images conteneur et les GitHub Actions.
Timeline de l'attaque
Phase 1 — Initial Access (fin février 2026)
L'attaquant a exploité une mauvaise configuration dans l'environnement GitHub Actions de Trivy pour extraire un access token privilégié, obtenant un point d'entrée dans l'automatisation des releases.
Phase 2 — Tag Hijacking (19 mars, ~17h43 UTC)
- Force-push de 76 des 77 tags de version dans
aquasecurity/trivy-actionet des 7 tags dansaquasecurity/setup-trivy, redirigeant les références de confiance vers des commits malveillants. - Publication d'un binaire Trivy malveillant en v0.69.4 via le compte de service compromis
aqua-bot. - Le commit malveillant a remplacé
actions/checkoutpar un commit imposteur contenant une action composite qui téléchargeait du code Go malveillant depuis un domaine typosquatté. - La validation de release a été contournée via
--skip=validatedans goreleaser.
Phase 3 — Compromission Docker Hub (22 mars)
Publication d'images Docker Hub malveillantes v0.69.5 et v0.69.6 à l'aide de credentials Docker Hub compromis.
Root Cause
La rotation des credentials suite au breach initial de février n'était pas atomique — tous les credentials n'ont pas été révoqués simultanément — ce qui a permis à l'attaquant d'exfiltrer les nouveaux secrets pendant la fenêtre de rotation.
Impact
- Le payload s'exécutait dans les runners GitHub Actions avant la logique légitime de scan Trivy — les workflows compromis semblaient fonctionner normalement.
- Données exfiltrées : clés SSH, credentials AWS/GCP/Azure, credentials de bases de données, configurations Git et Docker, tokens Kubernetes, portefeuilles crypto.
- Fenêtres d'exposition : ~3 heures (binaire Trivy), ~12 heures (trivy-action).
Indicateurs de compromission (IOCs)
Infrastructure C2 :
- Domaine :
scan.aquasecurtiy.org(typosquatté) - IP :
45.148.10.212 - Secours : canister ICP
tdtqy-oyaaa-aaaae-af2dq-cai(sertkamikaze.sh)
Artefacts d'exfiltration : payload.enc, tpcp.tar.gz
Indicateur GitHub : un dépôt public nommé tpcp-docs créé dans le compte de la victime, avec les données chiffrées uploadées en release assets
Versions compromises : Trivy v0.69.4, trivy-action v0.69.4, setup-trivy (tous les tags), images Docker Hub v0.69.5 et v0.69.6
Identification du malware : "TeamPCP Cloud stealer" — données chiffrées en AES-256 + RSA-4096
Détection : vérifier si un dépôt tpcp-docs a été créé sous les comptes GitHub de votre organisation. Examiner les logs GitHub Actions pour des connexions sortantes vers scan.aquasecurtiy.org ou 45.148.10.212.
Remédiation
- Mettre à jour immédiatement : Trivy v0.69.2 ou v0.69.3, trivy-action v0.35.0, setup-trivy v0.2.6.
- Effectuer la rotation de tous les secrets accessibles aux workflows affectés — les considérer comme compromis.
- Auditer les systèmes pour détecter les dépôts
tpcp-docs(mécanisme d'exfiltration de secours de l'attaquant). - Épingler les GitHub Actions sur des hashes de commit immuables plutôt que sur des tags de version mutables.
- Vérifier les installations avec cosign/sigstore en s'assurant que les timestamps de signature sont antérieurs au 19 mars.