En bref

  • Le groupe TeamPCP a compromis 170 packages npm et 2 packages PyPI en mai 2026, publiant 404 versions malveillantes ciblant TanStack, Mistral AI SDK, UiPath (65 packages) et OpenSearch (1,3 M téléchargements/semaine).
  • Objectif unique : vol de secrets CI/CD — tokens GitHub et npm, clés cloud AWS/GCP/Azure, clés SSH, secrets GitHub Actions — via des hooks postinstall malveillants exécutés silencieusement.
  • Action requise : auditer les installations npm/pip du 11 au 13 mai 2026, révoquer tous les secrets potentiellement exposés, verrouiller les versions de dépendances.

Les faits

Entre le 11 et le 13 mai 2026, une vague d'attaques supply chain d'ampleur inédite a frappé simultanément les principaux registres de packages open source : npm (JavaScript/Node.js), PyPI (Python) et Docker Hub. Le groupe désigné par Wiz sous le nom TeamPCP — déjà responsable de compromissions documentées contre SAP, Checkmarx, Bitwarden, Intercom et Trivy — a orchestré une campagne coordonnée visant à injecter du code malveillant dans des packages à haute diffusion, avec pour objectif unique le vol silencieux de secrets dans les environnements de développement et les pipelines CI/CD.

La campagne principale, documentée par Wiz et SafeDep le 12 mai 2026, a compromis 170 packages npm et 2 packages PyPI, produisant 404 versions malveillantes publiées sur les registres officiels. La liste des packages victimes couvre des écosystèmes critiques très largement adoptés. L'intégralité de l'écosystème TanStack Router a été touchée — 42 packages incluant @tanstack/react-router, @tanstack/react-query, @tanstack/react-form, @tanstack/virtual et @tanstack/store. La suite SDK officielle de Mistral AI a été compromise sur npm et PyPI. Les outils d'automatisation UiPath représentent 65 packages impactés. OpenSearch, avec 1,3 million de téléchargements hebdomadaires sur npm, figure dans la liste des victimes, tout comme Guardrails AI sur PyPI. Ces packages sont utilisés quotidiennement par des dizaines de milliers d'entreprises en Europe et aux États-Unis, notamment dans les secteurs fintech, LegalTech, SaaS et automatisation industrielle.

Le mécanisme d'infection est sophistiqué et ciblé. TeamPCP n'a pas compromis les dépôts GitHub sources de ces projets — une approche qui aurait déclenché des alertes immédiates. L'attaquant a ciblé directement les comptes npm et PyPI des mainteneurs via des tokens d'accès volés ou des credentials réutilisés depuis de précédentes fuites de données. Une fois le compte mainteneur compromis, l'attaquant publie une version avec un numéro de patch incrémenté (+1 sur la version légitime la plus récente), contenant un hook postinstall malveillant qui s'exécute automatiquement lors de chaque npm install ou pip install. Ce hook recherche et exfiltre systématiquement les mêmes catégories de secrets : tokens npm et GitHub Personal Access Tokens, credentials cloud (fichiers .aws/credentials, application_default_credentials.json, configuration Azure CLI), clés SSH dans ~/.ssh/, secrets CI/CD (variables d'environnement GitHub Actions, GitLab CI, CircleCI, Travis CI), et clés API de services tiers.

GitGuardian, qui a publié une analyse technique le 13 mai 2026, note que cette campagne s'inscrit dans une série d'attaques préparatoires. Les 21 et 23 avril 2026, deux campagnes distinctes avaient ciblé npm via le package pgserve (serveur PostgreSQL Node.js) et des images Docker Hub malveillantes. Une troisième campagne de la même période avait ciblé PHP Composer. Ces premières vagues constituaient probablement des tests d'infrastructure et de détection avant la grande campagne de mai. La NHS England Digital a publié une alerte spécifique (CC-4781) recommandant aux organisations du secteur santé de vérifier leurs dépendances dans les 24 heures. Security Boulevard recense sous le nom « Mini Shai-Hulud » une série complémentaire ayant touché 1 800 développeurs sur PyPI, npm et PHP simultanément.

L'attribution à TeamPCP repose sur des indicateurs techniques convergents : infrastructure C2 partagée avec les campagnes précédentes (domaines enregistrés via le même registrar fictif, mêmes plages IP d'hébergement), format d'exfiltration identique (données compressées en base64, transmises via HTTPS vers des endpoints à durée de vie courte), TTP similaires aux compromissions documentées contre Checkmarx et Bitwarden en 2025. Wiz évalue avec « haute confiance » que ce groupe opère de façon quasi-industrielle, ciblant méthodiquement les écosystèmes de packages à fort taux d'adoption pour maximiser le nombre de secrets collectés par campagne.

L'impact potentiel dépasse de loin les développeurs directement exposés. Un token CI/CD volé dans l'environnement d'un développeur individuel peut permettre d'accéder au pipeline de build de son employeur et, par extension, de compromettre les artefacts déployés en production — le schéma classique de l'attaque supply chain de second niveau, que SolarWinds (2020) et XZ Utils (2024) ont rendu célèbre. Orca Security, qui a analysé la campagne TanStack en détail, note que des milliers d'applications React et Vue.js utilisant TanStack Router sont potentiellement concernées par des artifacts de build contaminés si le token npm du développeur a été utilisé pour republier ses propres packages avec du code malveillant injecté.

La réponse des registres a été rapide mais insuffisante pour éliminer le risque. npm et PyPI ont supprimé les 404 versions malveillantes dans les 12 à 24 heures suivant la notification par Wiz et SafeDep, mais la fenêtre d'exposition de 48 heures est amplement suffisante pour un attaquant disposant d'une infrastructure d'exfiltration automatisée. Les projets affectés ont publié des advisories de sécurité recommandant de vérifier l'intégrité des versions installées via les checksums officiels, de révoquer immédiatement tous les tokens potentiellement présents dans l'environnement d'exécution, et de recompiler depuis des sources vérifiées sur les dépôts GitHub officiels avec des versions antérieures verrouillées.

Cette campagne révèle une fragilité structurelle des écosystèmes de packages open source. La publication sur npm et PyPI ne nécessite pas de signature cryptographique obligatoire — contrairement au modèle Sigstore/Cosign que Gradle et Maven commencent à imposer dans l'écosystème Java. L'ANSSI rappelle dans ses recommandations supply chain (ANSSI-PA-22-001) l'importance critique du verrouillage des versions via package-lock.json, poetry.lock ou requirements.txt avec checksums, et de la validation des signatures via Sigstore pour les environnements de production. Sans ces mesures, n'importe quel npm install sur une dépendance non verrouillée est un vecteur d'attaque potentiel.

Impact et exposition

Tout développeur ou pipeline CI/CD ayant exécuté npm install ou pip install sur les packages concernés entre le 11 et le 13 mai 2026 est potentiellement exposé. Les pipelines automatisés installant les dépendances à chaque build sont particulièrement à risque car ils exécutent les hooks postinstall dans un environnement riche en secrets et variables d'environnement. Les environnements de développement personnels ayant accès aux repositories de leur employeur constituent un vecteur de rebond vers des cibles organisationnelles de grande valeur. L'impact est mondial : TanStack Router seul comptabilise plusieurs dizaines de millions de téléchargements mensuels.

Recommandations

  • Vérifier immédiatement l'historique des installations npm/pip sur la période du 11 au 13 mai 2026 dans tous les environnements de développement et CI/CD — la liste complète des 404 versions malveillantes est disponible dans l'advisory Wiz publié le 12 mai.
  • Révoquer et regénérer sans délai tous les tokens et secrets présents dans les environnements potentiellement exposés : tokens npm, GitHub Personal Access Tokens, clés AWS/GCP/Azure, secrets GitHub Actions et GitLab CI.
  • Verrouiller les versions de dépendances via package-lock.json et npm ci (npm) ou poetry.lock et pip install --require-hashes (Python) — ne jamais utiliser de ranges de version en environnement de production.
  • Activer la vérification de l'intégrité des packages via Sigstore/Cosign et configurer npm audit en mode bloquant dans les pipelines CI/CD.
  • Limiter les permissions des tokens CI/CD au strict nécessaire (moindre privilège) et les isoler par projet — un token compromis ne doit pas donner accès à l'ensemble du portefeuille de repositories de l'organisation.

Comment détecter si mon environnement de développement a exécuté le code malveillant de TeamPCP ?

Vérifiez votre fichier package-lock.json ou yarn.lock pour identifier si vous aviez installé une des 404 versions malveillantes — Wiz a publié la liste complète dans son advisory du 12 mai. Examinez ensuite les journaux réseau de vos machines de développement sur la période concernée : le C2 de TeamPCP communiquait via HTTPS vers des domaines enregistrés récemment (moins de 30 jours) avec des certificats Let's Encrypt. Vérifiez également les journaux d'accès à vos tokens et variables CI/CD pour détecter des accès inhabituels. En cas de doute, la seule mesure certaine est la révocation complète de tous les secrets et leur rotation intégrale.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits de sécurité ciblés pour identifier et corriger vos vulnérabilités avant qu'elles ne soient exploitées.

Demander un audit