TeamPCP : anatomie d’une campagne d’attaques de la chaîne d’approvisionnement logiciel

TLP:CLEAR Date : 08 juillet 2026

Synthèse

Je vous propose cette analyse suite à l’activité du Groupe Cybercriminel TeamPCP.

Le 02 juillet 2026, le FBI a publié un bulletin FLASH (FLASH-20260702-01) consacré au groupe cybercriminel TeamPCP, à ses tactiques, techniques et procédures, et à ses indicateurs de compromission. Ce bulletin formalise, du point de vue d’une agence gouvernementale, une campagne documentée depuis mars 2026 par de nombreux acteurs privés de la threat intelligence.

TeamPCP conduit des compromissions de la chaîne d’approvisionnement logicielle à grande échelle en ciblant non pas les applications finales, mais les outils de développement et de sécurité que les organisations intègrent dans leurs pipelines. Le groupe injecte du code malveillant dans des paquets légitimes, publie des versions trojanisées via les canaux de distribution habituels, puis laisse les pipelines d’intégration et de déploiement continus (CI/CD) récupérer automatiquement ces versions. Les charges déposées dérobent des identifiants cloud, des clés SSH, des secrets Kubernetes, des clés d’API et d’autres éléments d’authentification, et établissent des accès persistants.

La particularité de la campagne tient à son effet de cascade : les identifiants volés à un outil de sécurité compromis servent à compromettre l’outil suivant, de proche en proche, à travers plusieurs écosystèmes (GitHub Actions, Docker Hub, PyPI, npm, OpenVSX).

Contexte et attribution

TeamPCP est un groupe cybercriminel à motivation financière, apparu fin 2025. Le Google Threat Intelligence Group le suit sous la désignation UNC6780. D’autres alias sont documentés par les chercheurs, dont DeadCatx3, PCPcat, ShellForce et CipherForce. Le groupe s’est publiquement revendiqué de ses opérations, notamment via le compte X @pcpcats.

Le modèle opératoire repose sur l’automatisation et la mise à l’échelle : plutôt que de déployer manuellement des charges, le groupe conçoit des vers auto-répliquants qui exploitent le modèle de confiance des écosystèmes open source. Une fois un compte de mainteneur compromis, le ver se propage automatiquement à chaque paquet publié par la victime, étendant la surface infectée sans intervention supplémentaire de l’opérateur.

Chronologie de la campagne

La séquence documentée par les chercheurs privés s’articule autour d’un point d’entrée initial unique, dont les identifiants alimentent les vagues suivantes.

  • Février 2026 : une containment incomplète chez Aqua Security (identifiants non intégralement révoqués après un premier incident) laisse un accès résiduel.
  • 19 mars 2026 : compromission de Trivy, scanner de vulnérabilités open source d’Aqua Security, via un workflow GitHub Actions mal configuré. Les attaquants dérobent des secrets CI/CD, réécrivent des tags de version et publient un binaire malveillant (v0.69.4). Cette vague constitue la racine de la campagne.
  • 22 mars 2026 : défiguration de 44 dépôts GitHub internes d’Aqua Security, renommés avec le préfixe tpcp-docs et la mention « TeamPCP Owns Aqua Security ».
  • 23 mars 2026 : compromission des GitHub Actions Checkmarx kics-github-action et ast-github-action, ainsi que d’extensions OpenVSX (cx-dev-assist, ast-results). Le domaine d’exfiltration checkmarx[.]zone usurpe la marque Checkmarx.
  • 24 mars 2026 : publication sur PyPI de deux versions malveillantes de LiteLLM (1.82.7 et 1.82.8), passerelle open source d’accès aux fournisseurs de LLM. Les identifiants de publication ont été récupérés depuis le pipeline CI de LiteLLM, qui exécutait Trivy sans version pinning.
  • 27 mars 2026 : publication sur PyPI de deux versions malveillantes du SDK Python officiel de Telnyx (4.87.1 et 4.87.2).
  • 22 au 24 avril 2026 : extension à Xinference, à Checkmarx KICS via Docker Hub, puis détournement en aval de @bitwarden/cli (23 avril) au moyen de tokens npm volés, et de elementary-data (24 avril) via injection de script dans les GitHub Actions.
  • Mai 2026 : vague Mini Shai-Hulud contre l’écosystème @tanstack (11 mai) et backdoor du plugin Checkmarx Jenkins AST (divulgation le 08 mai).

Analyse technique

Un point commun : la confiance du pipeline

Chaque vecteur d’entrée abuse d’un élément auquel un pipeline de build accorde une confiance implicite : une image Docker référencée par tag plutôt que par digest, une extension d’un éditeur connu, un workflow GitHub Actions utilisant le propre GITHUB_TOKEN du projet, ou un paquet PyPI signé et publié par la CI du projet lui-même. Les attaquants n’ont eu besoin de compromettre directement aucun poste utilisateur final : le pipeline exécute le travail à leur place. L’objectif reste constant d’une vague à l’autre, à savoir la collecte d’identifiants de développement, exfiltrés sous forme d’archive compressée.

Détournement de tags

Sur Trivy, les attaquants ont utilisé des identifiants disposant du droit d’écriture sur les tags pour réécrire la quasi-totalité des tags de version d’aquasecurity/trivy-action et l’ensemble des tags d’aquasecurity/setup-trivy, redirigeant des versions de confiance existantes vers des commits malveillants. Les métadonnées de release n’affichaient aucun changement visible.

Exécution automatique via fichier .pth

La charge LiteLLM introduisait un fichier litellm_init.pth dans la version 1.82.8. L’interpréteur Python traitant automatiquement les fichiers .pth au démarrage, la charge s’exécutait à chaque initialisation d’un processus Python sur l’hôte, indépendamment de tout import explicite de LiteLLM. La charge multi-étages consistait en un script doublement encodé en Base64 pour contourner l’analyse statique.

Stéganographie WAV

La compromission de Telnyx a introduit une technique nouvelle dans la campagne : le code malveillant, injecté dans telnyx/_client.py, s’exécutait au moment de l’import du paquet. Il téléchargeait un fichier au format WAV depuis un serveur de commande et contrôle, en extrayait une charge encodée par XOR à partir des trames audio, puis l’exécutait. Sous Windows, un exécutable était déposé dans le dossier de démarrage sous le nom msbuild.exe. Sous Linux et macOS, un collecteur d’identifiants était exécuté puis exfiltré. Cette bascule d’une charge embarquée vers une récupération dynamique à l’exécution donne à l’attaquant le contrôle du contenu réellement délivré aux victimes.

Exfiltration

Le format d’exfiltration est resté stable d’une vague à l’autre : chiffrement des données par une clé de session AES-256-CBC, elle-même chiffrée en RSA-OAEP avec la clé publique de l’attaquant, l’ensemble étant empaqueté dans une archive tpcp.tar.gz et transmis par requête HTTP POST, avec un en-tête X-Filename: tpcp.tar.gz. La réutilisation d’une même clé publique RSA à travers les charges LiteLLM, Telnyx et suivantes a servi de marqueur d’attribution.

Mécanisme de repli

En cas d’échec de la communication C2 primaire, certaines charges utilisaient le GITHUB_TOKEN de la victime pour créer un dépôt caché nommé docs-tpcp au sein de l’organisation GitHub compromise.

Outils compromis

Le FBI confirme la modification, entre autres, des outils suivants :

  • Trivy (Aqua Security) : scanner de vulnérabilités pour conteneurs, images, artefacts, clusters Kubernetes et fichiers Infrastructure as Code.
  • KICS (Checkmarx) : outil d’analyse statique pour Infrastructure as Code.
  • LiteLLM (BerriAI) : passerelle open source exposant une interface unifiée compatible avec de multiples fournisseurs de LLM. Sa très large diffusion en fait une cible à fort effet de levier, y compris en tant que dépendance transitive.
  • SDK Python de Telnyx : bibliothèque officielle donnant accès à l’API REST de Telnyx.

À ces outils s’ajoutent, dans les vagues suivantes documentées par les chercheurs, des cibles en aval telles que @bitwarden/cli, elementary-data, Xinference et l’écosystème @tanstack, ainsi que le plugin Checkmarx Jenkins AST.

Familles de malwares

Le FBI identifie quatre familles principales.

  • CanisterWorm : conçu pour collecter des jetons d’accès cloud, des identifiants, des clés d’API et d’autres éléments d’authentification associés à AWS, Google Cloud Platform et Microsoft Azure.
  • SANDCLOCK : outil de vol d’identifiants extrayant des identifiants AWS, des jetons ServiceAccount Kubernetes, des variables d’environnement locales et des données de portefeuilles de cryptomonnaie.
  • Mini Shai-Hulud : ver auto-répliquant de chaîne d’approvisionnement opérant à travers npm et PyPI.
  • Miasma : variante de Mini Shai-Hulud qui se propage à travers des registres open source tels que npm et PyPI, en récoltant des identifiants et en empoisonnant des fichiers de configuration.

La lignée Shai-Hulud est antérieure à cette campagne : le ver original est apparu en septembre 2025 dans l’écosystème npm, suivi d’une seconde génération en novembre 2025 dotée d’une fonction d’effacement, puis de variantes successives. Mini Shai-Hulud, active depuis fin avril 2026, est présentée par les chercheurs comme nettement plus destructrice que la version d’origine.

Extorsion et collaboration

Le FBI indique que TeamPCP a également recouru à l’extorsion et à la collaboration avec d’autres groupes, notamment en publiant des noms de victimes sur un site de fuite et en menaçant de divulguer des données volées. Les chercheurs rattachent à la campagne un rapprochement avec le groupe de ransomware Vect, présenté comme une opération de ransomware-as-a-service émergente, ainsi qu’une distribution via BreachForums. Des mises en vente de données ont été observées, dont des dépôts internes attribués à Mistral AI.

Le FBI recommande de traiter les données et identifiants exfiltrés comme un risque persistant, des acteurs affiliés étant susceptibles de les exploiter longtemps après la compromission initiale.

Les vulnérabilités référencées (CVE)

Le bulletin du FBI liste quatre identifiants CVE associés à la campagne. Leur portée est de nature hétérogène.

  • CVE-2026-33634 : couvre la compromission de Trivy annoncée le 20 mars 2026, à savoir le binaire v0.69.4 forcé et les GitHub Actions empoisonnées aquasecurity/trivy-action et setup-trivy. Cotée en criticité élevée.
  • CVE-2026-45321 : correspond à la vague @tanstack de Mini Shai-Hulud (11 mai 2026, CVSS 9.6, CWE-506). Elle décrit une exploitation chaînée d’une configuration GitHub Actions, avec déclenchement d’un workflow pull_request_target, empoisonnement du cache GitHub Actions, puis extraction de jetons OIDC depuis la mémoire du runner pour obtenir des identifiants de publication npm. Résultat : 84 versions malveillantes publiées sur 42 paquets @tanstack.
  • CVE-2025-55182 : identifiant dit « React2Shell », vulnérabilité d’exécution de code à distance pré-authentification dans React Server Components (versions 19.0.0, 19.1.0, 19.1.1 et 19.2.0). Il s’agit d’une vulnérabilité applicative distincte, listée par le FBI dans le contexte de la campagne.
  • CVE-2026-48027 : référencée par le FBI et disposant d’un enregistrement CVE, mais dont la portée précise n’a pas pu être confirmée sur source publique à la date de rédaction.

À noter : la compromission des GitHub Actions Checkmarx KICS et AST n’a pas reçu d’identifiant CVE dédié selon les chercheurs.

Indicateurs de compromission (source : FLASH FBI, TLP:CLEAR)

Adresses IP 83.142.209.11, 45.148.10.212, 83.142.209.194, 83.142.209.203, 94.154.172.43, 67.217.57.240

Domaines (extrait) scan.aquasecurtiy[.]org, checkmarx[.]zone, checkmarx[.]zone/vsx, checkmarx[.]zone/raw, models.litellm[.]cloud, check.git-service[.]com, t.m-kosche[.]com, git-tanstack[.]com, recv.hackmoltrepeat[.]com, audit.checkmarx[.]cx/v1/telemetry

Dépôts d’exfiltration tpcp-docs, docs-tpcp (créés par le ver au moyen d’identifiants volés)

Empreintes Le bulletin du FBI publie un ensemble de 27 empreintes SHA-256 associées à la campagne, à consulter directement dans la source pour intégration en supervision.

Mes recommandations

  • Épingler tous les workflows GitHub Actions à des empreintes de commit SHA vérifiées plutôt qu’à des tags de version ou des références de branche flottantes, ces derniers pouvant être redirigés silencieusement vers du code malveillant.
  • Faire tourner l’ensemble des secrets CI/CD, jetons de publication et identifiants cloud accessibles durant les fenêtres d’exposition de la campagne.
  • Rechercher dans les organisations GitHub la présence de dépôts nommés tpcp-docs ou docs-tpcp.
  • Auditer les pipelines ayant utilisé Trivy, Checkmarx (KICS, AST) ou LiteLLM sans version pinning entre le 19 et le 25 mars 2026, et traiter comme compromis tout secret accessible à ces pipelines.
  • Vérifier la présence des versions malveillantes de LiteLLM (1.82.7, 1.82.8) et de Telnyx (4.87.1, 4.87.2), et revenir à une version antérieure saine (LiteLLM antérieure au 24 mars, Telnyx 4.87.0).
  • Appliquer le principe de moindre privilège aux comptes de service CI/CD et aux jetons de publication, avec un cadrage limitant la propagation inter-dépôts.
  • Exiger une authentification multifacteur résistante au phishing pour tout compte disposant d’un accès de publication à un dépôt de code ou à un registre de paquets.
  • Mettre en place une supervision comportementale à l’exécution des pipelines, afin de détecter les connexions sortantes inattendues émises par les processus de runner.
  • Imposer un seuil d’ancienneté minimal des paquets avant installation, afin de réduire l’exposition aux versions malveillantes récemment publiées.
  • Maintenir des sauvegardes hors ligne et immuables des dépôts critiques et des artefacts de release.

Sources

  • FBI, FLASH-20260702-01, Cyber Criminal Group TeamPCP (TLP:CLEAR) : https://www.ic3.gov/CSA/2026/260702.pdf
  • Unit 42, Palo Alto Networks, Weaponizing the Protectors: TeamPCP’s Multi-Stage Supply Chain Attack on Security Infrastructure : https://unit42.paloaltonetworks.com/teampcp-supply-chain-attacks/
  • Arctic Wolf, TeamPCP Supply Chain Attack Campaign Targets Trivy, Checkmarx (KICS), and LiteLLM : https://arcticwolf.com/resources/blog/teampcp-supply-chain-attack-campaign-targets-trivy-checkmarx-kics-and-litellm-potential-downstream-impact-to-additional-projects/
  • Trend Micro, Analyzing TeamPCP’s Supply Chain Attacks: Checkmarx KICS and elementary-data in CI/CD Credential Theft : https://www.trendmicro.com/en_us/research/26/e/analyzing-teampcp-supply-chain-attacks.html
  • Kaspersky, Trojanization of Trivy, Checkmarx, and LiteLLM solutions : https://www.kaspersky.com/blog/critical-supply-chain-attack-trivy-litellm-checkmarx-teampcp/55510/
  • ReversingLabs, Inside the TeamPCP cascading supply chain attack : https://www.reversinglabs.com/blog/teampcp-supply-chain-attack-spreads
  • JFrog Security Research, TeamPCP strikes again, telnyx popular PyPI library compromised : https://research.jfrog.com/post/team-pcp-strikes-again-telnyx-popular-library-hit/
  • Tenable, Mini Shai-Hulud Supply Chain Attack (CVE-2026-45321) FAQ : https://www.tenable.com/blog/mini-shai-hulud-frequently-asked-questions
  • Kodem, Inside the TeamPCP Supply Chain Campaign, from Trivy to LiteLLM to the Checkmarx Jenkins Plugin : https://www.kodemsecurity.com/resources/inside-the-teampcp-supply-chain-campaign-from-trivy-to-litellm-to-the-checkmarx-jenkins-plugin
  • Infosecurity Magazine, Five Key Flaws Exploited in 2025’s Software Supply Chain Incidents (CVE-2025-55182 / React2Shell) : https://www.infosecurity-magazine.com/news-features/five-flaws-exploited-2025-software/