Compromission de la chaîne d’approvisionnement affectant les écosystèmes npm et PyPi

  • Auteur/autrice de la publication :

Origine : bjCSIRT

Numéro : 2026/ALERTE/033

APERÇU :

Une campagne de compromission de la chaîne d’approvisionnement visant les registres npm et PyPI permettrait à un acteur malveillant d’exécuter du code arbitraire lors de l’installation de dépendances, de voler des secrets d’infrastructure et de propager automatiquement un ver (malware) vers d’autres paquets logiciels. 

DESCRIPTION

Npm  est le gestionnaire de paquets par défaut de Node.js, permettant d’installer et de gérer des bibliothèques essentielles comme TanStack, une suite dédiée à la gestion d’état et de la manipulation de données dans les écosystèmes React et JavaScript. 

PyPi est le dépôt officiel de logiciels et bibliothèques tiers pour le langage de programmation Python et représente la source où les développeurs Python publient et trouvent des modules destinés à des usage variés tels que l’analyse de données, l’intelligence artificielle, l’automatisation. 

Le 11 mai 2026, un acteur malveillant identifié sous le pseudonyme TeamPCP a publié 42 paquets npm malveillants répartis sur 84 versions de l’espace @tanstack/. Cette publication a été rendue possible par la combinaison de trois techniques : l’exploitation de failles « Pwn Request » via pull_request_target, l’empoisonnement du cache GitHub Actions et l’extraction d’un jeton OIDC en mémoire. 

Les versions compromises intègrent deux vecteurs d’infection distincts. Un champ optionalDependencies ajouté dans le package.json des paquets affectés déclenchant automatiquement l’exécution d’une charge utile via l’exécuteur Bun dès  l’installation. Les paquets contiennent également un fichier nommé router_init.js fortement obfusqué, qui agit comme un agent de collecte de données et un ver auto-propageable. 

La propagation du ver a conduit à l’affectation d’autres paquets npm tels que opensearch-project/opensearch uipath ainsi que les paquets PyPi mistralai et guardrails-ai. 

Cette compromission permettrait à un acteur malveillant d’exécuter du code arbitraire à distance, de dérober des identifiants de services cloud et de compromettre durablement l’intégrité des environnements affectés.

IMPACT

  • Exécution de code à distance ; 
  • Atteinte à la confidentialité des données (clés API, secrets, variables d’environnement) ; 
  • Compromission de l’intégrité du système et de la chaîne de déploiement. 

SYSTÈMES AFFECTÉS :

  • Les paquets npm @transtack/* et autres compromis (liste exhaustive au niveau des deux dernières références) ; 
  • Tout système (poste développeur, serveur CI/CD, environnement de production) ayant exécuté npm install, pnpm install, yarn install ou pip install sur l’une des versions listées le 11 mai 2026 est considéré comme potentiellement compromis. 

MESURES À PRENDRE :

  • Vérifier et purger les fichiers de verrouillage (package-lock.json, yarn.lock ou pnpm-lock.yaml) pour identifier les versions compromises ; 
  • Rechercher et supprimer le processus gh-token-monitor avant de révoquer les jetons GitHub ; 
  • Forcer la mise à jour ou la rétrogradation vers des versions saines et vérifiées des bibliothèques des paquets affectés ; 
  • Réinitialiser immédiatement toutes les clés API, secrets et identifiants présents dans les variables d’environnement des systèmes ayant installé les paquets malveillants ; 
  • Inspecter les dossiers .claude/ et .vscode/ pour détecter la présence de fichiers suspects comme router_runtime.js qui assurent la persistance. 
  • Bloquer les indicateurs de compromission réseaux présentés au niveau de la section correspondante. 

INDICATEURS DE COMPROMISSION :

Hash des fichiers malveillants (SHA-256) 

  • router_init.js / router_runtime.js : ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c 
  • tanstack_runner.js / router_init.js : 2ec78d556d696e208927cc503d48e4b5eb56b31abc2870c2ed2e98d6be27fc96 
  • setup.mjs : 2258284d65f63829bd67eaba01ef6f1ada2f593f9bbe41678b2df360bd90d3df 

Indicateurs de compromission réseaux  

  • hxxp://filev2[.]getsession[.]org/file/ 
  • git-tanstack[.]com 
  • Seed1[.]getsession[.]org, seed2[.]getsession[.]org, seed3[.]getsession[.]org 
  • 83[.]142.209[.]194 
  • git-tanstack[.]com/tmp/transformers.pyz 

Processus malveillant  

  • gh-token-monitor (~/Library/LaunchAgents/com.user.gh-token-monitor.plist sur macOS ou ~/.config/systemd/user/gh-token-monitor.service sur Linux)Paquets npm et PyPi identifiés comme altérés :  

Voir la liste actualisée au niveau des deux dernières références. 

Autre indicateur 

champ optionalDependencies ajouté dans le fichier package.json comme suit : « optionalDependencies »: { « @tanstack/setup »: »github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c » } 

RÉFÉRENCES :