Threat Intelligence

TeamPCP-Vect : comment le scanner de sécurité Trivy est devenu le point d'entrée de plus de 1 000 environnements SaaS rançonnés

Admin CyberAfrik 03 August 2026 19 lectures
TeamPCP-Vect : comment le scanner de sécurité Trivy est devenu le point d'entrée de plus de 1 000 environnements SaaS rançonnés

Rapport CTI technique du 3 août 2026

Résumé exécutif

Un groupe suivi sous le nom de TeamPCP, également répertorié sous les alias DeadCatx3, PCPcat, ShellForce et CipherForce, a compromis fin février 2026 le pipeline CI/CD du scanner de vulnérabilités open source Trivy, publié par Aqua Security. L'accès initial a été obtenu via l'exploitation d'un anti-pattern connu de GitHub Actions, le déclencheur pull_request_target, qui exécute du code issu d'un fork externe avec les secrets du dépôt d'origine. Ce détournement a permis de dérober un jeton d'accès (PAT) à portée organisationnelle appartenant au compte de service aqua-bot, utilisé dans au moins trente-trois workflows de l'organisation GitHub d'Aqua Security. La rotation des identifiants effectuée par Aqua Security après une première détection s'est révélée incomplète, laissant aux attaquants un accès persistant.

Trois semaines plus tard, TeamPCP a publié une version empoisonnée du binaire Trivy (v0.69.4) sur les canaux officiels et a réécrit soixante-quinze des soixante-seize tags historiques de l'action GitHub aquasecurity/trivy-action ainsi que l'intégralité des tags de aquasecurity/setup-trivy, transformant un outil de scan de sécurité en vecteur de vol massif de secrets CI/CD. Le groupe a également compromis Checkmarx, LiteLLM et Telnyx dans la même fenêtre, constituant une archive de plus de 500 000 identifiants issus d'environnements d'intégration continue. À la mi-avril 2026, TeamPCP a formalisé un partenariat avec l'opération de ransomware-as-a-service Vect, qui sélectionne désormais ses victimes directement dans cette archive plutôt que de mener ses propres intrusions. La semaine du 27 juillet au 1er août 2026, cette collaboration est passée à l'échelle avec la confirmation que la compromission affecte plus de 1 000 environnements SaaS d'entreprise, et que Vect a commencé à publier les données de victimes issues de la campagne Trivy sur son site de fuite.

Chronologie

DateÉvénement
27-28 février 2026Un bot GitHub autonome, hackerbot-claw, ouvre une pull request contre le dépôt Trivy et exploite le déclencheur pull_request_target du workflow "API Diff Check" pour dérober le PAT du compte de service aqua-bot
Fin février 2026Aqua Security détecte l'intrusion et effectue une rotation d'identifiants, incomplète, laissant des accès actifs entre les mains de TeamPCP
19 mars 2026TeamPCP réécrit 75 des 76 tags de aquasecurity/trivy-action, la totalité des tags de aquasecurity/setup-trivy, et déclenche la publication d'un binaire Trivy empoisonné (v0.69.4) via GoReleaser
Mars 2026Compromission additionnelle de Checkmarx, LiteLLM et Telnyx, constitution d'une archive de plus de 500 000 identifiants CI/CD
Mi-avril 2026Partenariat formalisé entre TeamPCP et l'opération de ransomware Vect ; premières victimes listées sur le site de fuite Vect, dont une entreprise de technologie pour la gestion immobilière (environ 4 millions de courriels et 700 Go de données exfiltrées)
27 juillet - 1er août 2026Confirmation que la campagne affecte plus de 1 000 environnements SaaS d'entreprise ; Vect entre dans une phase active de double extorsion à l'échelle sur les victimes issues de l'archive TeamPCP

Fiche d'acteur / campagne (format fiche CTI)

TeamPCP (alias DeadCatx3, PCPcat, ShellForce, CipherForce) et opération de ransomware Vect | Pas de CVE isolée, faille de configuration CI/CD (proche de CWE-829, inclusion de fonctionnalité depuis une sphère de contrôle non fiable) | Composant affecté : GitHub Actions du dépôt aquasecurity, binaire Trivy, actions trivy-action et setup-trivy

Description technique : le workflow "API Diff Check" du dépôt Trivy utilisait le déclencheur pull_request_target, qui exécute le workflow avec les secrets du dépôt cible tout en pouvant être déclenché par une pull request ouverte depuis un fork non fiable. Mal configuré, ce déclencheur permet à du code contrôlé par l'attaquant de s'exécuter dans un contexte disposant des secrets du dépôt légitime, un anti-pattern documenté de longue date dans l'écosystème GitHub Actions. TeamPCP a exploité ce défaut pour extraire un jeton d'accès personnel à portée organisationnelle, puis a utilisé cet accès pour réécrire l'historique de tags de deux actions GitHub officielles et publier un binaire compilé malveillant sous un numéro de version légitime.

Conditions d'exploitation : la vulnérabilité initiale ne nécessitait aucun accès privilégié préalable, une simple pull request depuis un fork public suffisait à déclencher le workflow vulnérable. L'impact en aval, en revanche, touchait potentiellement tout environnement CI/CD ayant exécuté Trivy, trivy-action ou setup-trivy entre fin février et le 19 mars 2026.

PoC disponible : sans objet direct, il s'agit d'une compromission de chaîne d'approvisionnement documentée a posteriori par Aqua Security, Palo Alto Networks Unit 42 et plusieurs vendeurs de sécurité, pas d'une vulnérabilité avec preuve de concept publique distincte.

Patch/mitigation : Aqua Security a retiré les tags et le binaire compromis et publié des versions assainies. La correction structurelle recommandée porte sur la reconfiguration des workflows utilisant pull_request_target et l'épinglage des actions tierces par hash de commit plutôt que par tag mutable.

Diagramme de la chaîne d'attaque

Infrastructure TeamPCP-Vect, du pipeline CI/CD Trivy à la double extorsion
Reconstitution basée sur les analyses techniques de Palo Alto Networks Unit 42, StepSecurity, Sophos, JUMPSEC et Vectra AI.

Analyse technique

Étape 1 : vol de jeton via l'anti-pattern pull_request_target

Le bot hackerbot-claw ouvre une pull request contre le dépôt aquasecurity/trivy depuis un fork externe. Le workflow "API Diff Check", configuré avec pull_request_target, s'exécute avec les secrets du dépôt légitime tout en traitant du code potentiellement modifié par l'attaquant. Cette confusion entre contexte de confiance et code exécuté permet l'exfiltration du PAT organisationnel du compte de service aqua-bot.

Étape 2 : persistance malgré la rotation partielle des identifiants

Aqua Security détecte une activité anormale et procède à une rotation de crédentials, mais celle-ci ne couvre pas l'ensemble des accès obtenus par TeamPCP. Le groupe conserve un accès fonctionnel pendant environ vingt jours, le temps de préparer une seconde phase d'attaque plus destructrice.

Étape 3 : réécriture d'historique et publication d'un binaire empoisonné

Le 19 mars 2026, TeamPCP force la réécriture (force-push) de soixante-quinze des soixante-seize tags historiques de aquasecurity/trivy-action et de l'intégralité des tags de aquasecurity/setup-trivy vers des commits malveillants. Simultanément, le groupe déclenche GoReleaser pour publier une version 0.69.4 empoisonnée du binaire Trivy sur les canaux de distribution officiels, atteignant directement les pipelines CI/CD de tout utilisateur épinglant ces actions par tag plutôt que par hash.

Étape 4 : moisson de secrets à l'échelle du pipeline CI/CD

La charge malveillante, exécutée dans le contexte des runners GitHub Actions des victimes, collecte systématiquement les secrets disponibles dans l'environnement d'exécution : clés SSH, identifiants de fournisseurs cloud, accès bases de données, configurations Docker, jetons Kubernetes et portefeuilles de cryptomonnaies. TeamPCP réplique la même approche contre Checkmarx, LiteLLM et Telnyx dans les jours suivants, consolidant une archive dépassant 500 000 identifiants.

Étape 5 : monétisation via partenariat avec Vect et double extorsion

À la mi-avril 2026, TeamPCP annonce publiquement sur BreachForums un partenariat avec l'opération de ransomware Vect. Plutôt que de mener ses propres intrusions, Vect sélectionne ses cibles directement dans l'archive de credentials constituée par TeamPCP, exfiltre les données accessibles et exige une rançon sous menace de publication sur son site de fuite basé sur Tor. Fin juillet 2026, cette chaîne de monétisation atteint son plein régime avec plus de 1 000 environnements SaaS touchés et une phase active de publication de victimes.

Indicateurs de compromission

TypeValeur
Version binaire empoisonnéeTrivy v0.69.4
Actions GitHub compromisesaquasecurity/trivy-action (75/76 tags réécrits), aquasecurity/setup-trivy (totalité des tags réécrits)
Compte de service compromisaqua-bot (PAT à portée organisationnelle, utilisé dans 33+ workflows)
Alias de l'acteurTeamPCP, DeadCatx3, PCPcat, ShellForce, CipherForce
Opération de ransomware associéeVect (RaaS, double extorsion, site de fuite Tor)
Autres produits compromis par le même acteurCheckmarx, LiteLLM, Telnyx
Volume de l'archive de credentialsPlus de 500 000 identifiants issus d'environnements CI/CD

MITRE ATT&CK

Aucune cartographie ATT&CK officielle unifiée n'a été publiée pour cette campagne dans les sources consultées. Le tableau suivant reflète une lecture technique construite à partir des éléments confirmés par Unit 42 et Aqua Security, pas une attribution vendeur.

TactiqueTechniqueIDJustification
Initial AccessTrusted Relationship / Supply Chain CompromiseT1195.001Compromission du pipeline de build et de distribution de Trivy, dépendance tierce largement utilisée en CI/CD
Credential AccessSteal Application Access TokenT1528Vol du PAT organisationnel aqua-bot via l'anti-pattern pull_request_target
PersistenceAccount ManipulationT1098Maintien d'accès fonctionnels malgré une rotation partielle des identifiants par Aqua Security
CollectionUnsecured Credentials: Credentials in FilesT1552.001Moisson systématique de secrets (clés SSH, tokens cloud, identifiants Docker/Kubernetes) dans les runners CI/CD des victimes
ImpactData Encrypted for ImpactT1486Déploiement du ransomware Vect en aval, avec chiffrement et double extorsion des victimes sélectionnées
ExfiltrationExfiltration Over Web ServiceT1567Publication des données volées sur le site de fuite Tor de Vect en cas de non-paiement

Remédiation : checklist opérationnelle

  1. Auditer sans délai tous les workflows GitHub Actions utilisant pull_request_target et vérifier qu'aucun code issu d'un fork externe n'est exécuté avec les secrets du dépôt sans isolation stricte du contexte.
  2. Épingler systématiquement les actions GitHub tierces par hash de commit plutôt que par tag mutable, en priorité pour aquasecurity/trivy-action et aquasecurity/setup-trivy.
  3. Vérifier l'intégrité de tout déploiement de Trivy en production : comparer les hachages de la version 0.69.4 avec les valeurs republiées par Aqua Security après l'incident, et revenir à une version antérieure à fin février 2026 en cas de doute.
  4. Effectuer une rotation complète, et non partielle, de l'ensemble des secrets exposés aux workflows ayant utilisé Trivy, trivy-action ou setup-trivy entre le 27 février et le 19 mars 2026, y compris les identifiants déjà tournés une première fois.
  5. Passer en revue les journaux des runners CI/CD sur cette fenêtre à la recherche d'accès anormaux à des variables d'environnement, des clés cloud ou des tokens Kubernetes.
  6. Surveiller le site de fuite Tor de Vect et les canaux BreachForums pour toute mention de l'organisation, et activer en amont un plan de réponse à incident intégrant un scénario de double extorsion.
  7. Réévaluer la confiance implicite accordée aux outils de sécurité tiers dans la chaîne CI/CD : un scanner de vulnérabilités largement adopté est lui-même redevenu vecteur d'attaque, ce qui justifie un contrôle d'intégrité systématique des dépendances de sécurité, pas uniquement des dépendances applicatives.

Sources

Tags : TeamPCPVectTrivyAqua Securitysupply chainGitHub ActionsransomwareCI/CD
Partager cet article