đïž Contexte
Le 11 mai 2026, Wiz publie une analyse technique dĂ©taillant une attaque coordonnĂ©e de supply chain menĂ©e par le groupe TeamPCP contre les Ă©cosystĂšmes npm et PyPI. Cette campagne, dĂ©signĂ©e Mini Shai-Hulud, reprĂ©sente une Ă©volution des opĂ©rations prĂ©cĂ©dentes du mĂȘme acteur (SAP, Checkmarx, Bitwarden, Lightning, Intercom, Trivy).
đŻ Packages compromis
Les namespaces et packages impactés incluent :
- @tanstack : dont
@tanstack/react-router(~12 millions de tĂ©lĂ©chargements hebdomadaires) - @uipath : outils d’automatisation enterprise (apollo-core, CLI, agent SDKs)
- @mistralai/mistralai : client TypeScript officiel de Mistral AI
- guardrails-ai (PyPI) : package Python de guardrails LLM
- mistralai (PyPI)
- Plusieurs dizaines d’autres packages npm (voir liste complĂšte)
đ Vecteur d’infection TanStack (chaĂźne de 3 vulnĂ©rabilitĂ©s GitHub Actions)
- L’attaquant crĂ©e un fork renommĂ© du dĂ©pĂŽt
TanStack/router(zblgg/configuration) pour Ă©chapper aux recherches de forks - Ouverture d’une pull request dĂ©clenchant un workflow
pull_request_targetqui exĂ©cute le code du fork et empoisonne le cache GitHub Actions (pnpm store) - Lors de la fusion de PRs lĂ©gitimes, le workflow de release restaure le cache empoisonnĂ© ; des binaires contrĂŽlĂ©s par l’attaquant extraient des tokens OIDC directement depuis la mĂ©moire du runner (
/proc/<pid>/mem) - Publication de versions malveillantes sans vol de credentials npm
đ Vecteurs d’infection dans les packages
- @tanstack : entrée
optionalDependenciespointant vers un commit orphelin + fichier obfusquérouter_init.js(~2,3 Mo) dans le tarball - @uipath : script
preinstall(node setup.mjs) tĂ©lĂ©chargeant le runtime Bun pour exĂ©cuter le payload â mĂȘme mĂ©canisme que le compromis SAP prĂ©cĂ©dent - PyPI : 13 lignes de code tĂ©lĂ©chargeant et exĂ©cutant
git-tanstack[.]com/tmp/transformers.pyz
đ Comportement du payload
Le payload est un credential stealer auto-propagant (worm) ciblant :
- Tokens CI/CD : GitHub Actions OIDC, GitLab, CircleCI
- Credentials cloud : AWS IMDSv2, GCP, Azure
- Kubernetes service accounts, HashiCorp Vault
- Tokens de registres de packages
Il se propage en utilisant les tokens npm et GitHub OIDC volĂ©s pour publier des versions empoisonnĂ©es des packages sur lesquels la victime a des droits d’Ă©criture.
đĄ Architecture C2 triple
- Domaine typosquat :
git-tanstack[.]com - Réseau Session (décentralisé, résistant aux takedowns) :
*.getsession.org, recipient ID05f9e609d79eed391015e11380dee4b5c9ead0b6e2e7f0134e6e51767a87323026 - GitHub API dead drops : dĂ©pĂŽts thĂ©matiques Dune créés avec des tokens volĂ©s (description : “Shai-Hulud: Here We Go Again”)
đ„ Daemon de persistance et wiper
Sur les machines développeurs, si un token GitHub valide (ghp_ ou gho_) est détecté avec les droits suffisants, le malware installe un daemon gh-token-monitor :
- macOS : LaunchAgent
~/Library/LaunchAgents/com.user.gh-token-monitor.plist - Linux : service systemd
~/.config/systemd/user/gh-token-monitor.service - Polling GitHub toutes les 60 secondes ; en cas de révocation du token : exécution de
rm -rf ~/(wiper du home directory) - Le daemon s’arrĂȘte automatiquement aprĂšs 24 heures
đ Variante Python
La variante PyPI (guardrails-ai@0.10.1, mistralai@2.4.6) est non obfusquée et modulaire. Elle :
- S’exĂ©cute uniquement sur Linux avec â„4 CPUs
- Cible les coffres de mots de passe (1Password, Bitwarden) â nouveautĂ©
- Exfiltre vers
83.142.209[.]194(fallback GitHub, description repo : “PUSH UR T3MPRR”) - Sur systĂšmes configurĂ©s en IsraĂ«l ou Iran (timezone/langue) : probabilitĂ© 1/6 de jouer un MP3 Ă plein volume et d’exĂ©cuter
rm -rf
đĄïž Ăvasion
Comme les variantes précédentes, le malware vérifie la langue russe du systÚme et se termine sans exfiltrer si celle-ci est détectée.
đ·ïž Attribution
Wiz attribue avec haute confiance cette campagne au groupe TeamPCP, responsable des compromissions précédentes de SAP, Checkmarx, Bitwarden, Lightning, Intercom et Trivy.
đ Article de type analyse technique publiĂ©e par Wiz, visant Ă documenter la campagne Mini Shai-Hulud, fournir les IoCs et les packages affectĂ©s pour permettre la dĂ©tection et la rĂ©ponse Ă incident.
đ§ TTPs et IOCs dĂ©tectĂ©s
Acteurs de menace
TTP
- T1195.001 â Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
- T1554 â Compromise Client Software Binary (Persistence)
- T1053.006 â Scheduled Task/Job: Systemd Timers (Persistence)
- T1543.001 â Create or Modify System Process: Launch Agent (Persistence)
- T1552.001 â Unsecured Credentials: Credentials In Files (Credential Access)
- T1552.007 â Unsecured Credentials: Container API (Credential Access)
- T1528 â Steal Application Access Token (Credential Access)
- T1003 â OS Credential Dumping (Credential Access)
- T1041 â Exfiltration Over C2 Channel (Exfiltration)
- T1567 â Exfiltration Over Web Service (Exfiltration)
- T1485 â Data Destruction (Impact)
- T1027 â Obfuscated Files or Information (Defense Evasion)
- T1497.001 â Virtualization/Sandbox Evasion: System Checks (Defense Evasion)
- T1059.006 â Command and Scripting Interpreter: Python (Execution)
- T1059.007 â Command and Scripting Interpreter: JavaScript (Execution)
- T1584.001 â Compromise Infrastructure: Domains (Resource Development)
- T1102 â Web Service (Command and Control)
IOC
- IPv4 :
83.142.209.194â AbuseIPDB · VT · ThreatFox - Domaines :
git-tanstack.comâ VT · URLhaus · ThreatFox - Domaines :
seed1.getsession.orgâ VT · URLhaus · ThreatFox - Domaines :
seed2.getsession.orgâ VT · URLhaus · ThreatFox - Domaines :
seed3.getsession.orgâ VT · URLhaus · ThreatFox - Domaines :
filev2.getsession.orgâ VT · URLhaus · ThreatFox - URLs :
https://git-tanstack.com/tmp/transformers.pyzâ URLhaus - SHA256 :
ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266câ VT · MalwareBazaar - SHA256 :
2ec78d556d696e208927cc503d48e4b5eb56b31abc2870c2ed2e98d6be27fc96â VT · MalwareBazaar - SHA256 :
2258284d65f63829bd67eaba01ef6f1ada2f593f9bbe41678b2df360bd90d3dfâ VT · MalwareBazaar - Fichiers :
router_init.js - Fichiers :
setup.mjs - Fichiers :
transformers.pyz - Fichiers :
gh-token-monitor.plist - Fichiers :
gh-token-monitor.service - Chemins :
~/Library/LaunchAgents/com.user.gh-token-monitor.plist - Chemins :
~/.config/systemd/user/gh-token-monitor.service - Chemins :
/proc/<pid>/mem
Malware / Outils
- Mini Shai-Hulud (stealer)
- router_init.js (loader)
- setup.mjs (loader)
- transformers.pyz (stealer)
- gh-token-monitor (other)
đą Indice de vĂ©rification factuelle : 92/100 (haute)
- â wiz.io â source reconnue (liste interne) (20pts)
- â 15064 chars â texte complet (fulltext extrait) (15pts)
- â 18 IOCs dont des hashes (15pts)
- â 2/8 IOCs confirmĂ©s (AbuseIPDB, MalwareBazaar, ThreatFox, URLhaus, VirusTotal) (12pts)
- â 17 TTPs MITRE identifiĂ©es (15pts)
- â date extraite du HTML source (10pts)
- â acteur(s) identifiĂ©(s) : TeamPCP (5pts)
- ⏠pas de CVE à vérifier (0pts)
IOCs confirmés externellement :
83.142.209.194(ip) â VT (8/92 dĂ©tections)git-tanstack.com(domain) â VT (4/92 dĂ©tections)
đ Source originale : https://www.wiz.io/blog/mini-shai-hulud-strikes-again-tanstack-more-npm-packages-compromised