đ Contexte
Le 4 aoĂ»t 2026, l’Ă©quipe de recherche Socket a publiĂ© une analyse d’une attaque supply chain active ciblant les packages npm keyv et cacheable, deux familles de bibliothĂšques de stockage clĂ©-valeur et de cache trĂšs rĂ©pandues, totalisant des dizaines de millions de tĂ©lĂ©chargements hebdomadaires.
đŻ Vecteur d’attaque
Le compte maintainer Jaredwray a été compromis et utilisé pour publier des versions malveillantes. La premiÚre version malveillante, keyv@6.0.0, a été publiée à 09h35 UTC. Au moins dix packages ont été affectés, dont certains en dehors des namespaces keyv et cacheable (ex: @thiennq/docs-viewer@1.6.2). La compromission repose sur un hook preinstall (setup.mjs) ajouté au package.json.
âïž Analyse technique
L’attaque se dĂ©roule en deux Ă©tapes :
Stage 1 â Loader (setup.mjs) :
- Télécharge un runtime Bun standalone (v1.3.13) adapté à la plateforme (Linux, Windows, Alpine/musl)
- Exécute le second stage via Bun, contournant potentiellement les contrÎles surveillant uniquement les processus Node
- Aucune vérification de checksum ou signature du binaire téléchargé
- Supprime le répertoire temporaire
bun-dl-*aprÚs exécution
Stage 2 â Payload (Math_Symbol.js, ~728 KB) :
- Strings protĂ©gĂ©es par encodage basE91 polymorphique avec tables d’opcodes par scope
- Modules internes :
[collector],[dispatcher],[provenance],[publish] - Vol de credentials : AWS (IMDS, credential chains, Secrets Manager), GCP (clés de service), Azure (client secrets), HashiCorp Vault, Kubernetes service account tokens, npm tokens, GitHub Actions OIDC, secrets CI
- Sweep regex style TruffleHog sur le disque pour clés génériques, bearer tokens, blocs de clés privées
đȘ± Autopropagation (worm)
Le payload se propage en :
- DĂ©couvrant les packages du maintainer via l’API npm
- Téléchargeant les tarballs, injectant le hook malveillant et les fichiers payload
- Republiant via npm OIDC trusted publishing avec des attestations Sigstore/Fulcio/Rekor valides
đ€ Exfiltration et persistance
- GitHubSender : crĂ©e des dĂ©pĂŽts via l’API GitHub et y commit les donnĂ©es volĂ©es chiffrĂ©es (AES-256-GCM)
- DomainSender : résout des destinations via DNS et envoie les données chiffrées
- Autostart hooks plantés dans
.claude/settings.jsonet.vscode/tasks.jsonpour infecter les dĂ©veloppeurs clonant le dĂ©pĂŽt - Dead-man’s switch : service systemd (Linux) ou LaunchAgent macOS (
com.user.gh-token-monitor) qui surveille le token GitHub volé toutes les 60 secondes et exécute un handler distant viaevallors de la révocation
đŠ Packages affectĂ©s (liste partielle)
keyv@6.0.0,cacheable@2.5.1,flat-cache@6.1.24,cacheable-request@13.0.20,file-entry-cache@11.1.6,cache-manager@7.2.10,@cacheable/net@2.1.1,@cacheable/node-cache@3.1.2,@cacheable/memory@2.2.1,@cacheable/utils@2.5.1,@thiennq/docs-viewer@1.6.2
đ·ïž Attribution
Les techniques correspondent à celles documentées pour le worm npm Shai-Hulud (sweep TruffleHog, republication via tokens volés, staging dans des dépÎts GitHub), avec des techniques supplémentaires non documentées précédemment (runtime Bun, dispatcher modulaire, hooks .claude/.vscode).
đ° Type d’article
Analyse technique et rapport d’incident publiĂ©s par Socket Research Team, visant Ă documenter une attaque supply chain active, fournir des IOCs et guider la rĂ©ponse Ă incident.
đ§ TTPs et IOCs dĂ©tectĂ©s
Acteurs de menace
- Shai-Hulud (unknown) â
TTP
- T1195.002 â Supply Chain Compromise: Compromise Software Supply Chain (Initial Access)
- T1059.004 â Command and Scripting Interpreter: Unix Shell (Execution)
- T1059.007 â Command and Scripting Interpreter: JavaScript (Execution)
- T1543.001 â Create or Modify System Process: Launch Agent (Persistence)
- T1543.002 â Create or Modify System Process: Systemd Service (Persistence)
- T1552.001 â Unsecured Credentials: Credentials In Files (Credential Access)
- T1552.005 â Unsecured Credentials: Cloud Instance Metadata API (Credential Access)
- T1567.001 â Exfiltration Over Web Service: Exfiltration to Code Repository (Exfiltration)
- T1027 â Obfuscated Files or Information (Defense Evasion)
- T1496 â Resource Hijacking (Impact)
- T1078.004 â Valid Accounts: Cloud Accounts (Defense Evasion)
- T1071.004 â Application Layer Protocol: DNS (Command and Control)
IOC
- IPv4 :
169.254.169.254â AbuseIPDB · VT · ThreatFox - IPv4 :
169.254.170.2â AbuseIPDB · VT · ThreatFox - URLs :
https://github.com/oven-sh/bun/releases/download/bun-v1.3.13/â URLhaus - SHA256 :
54dc7ea54a1317cca0e890a2770630cf7fa6c97813e0cb9d2caa93012b350668â VT · MalwareBazaar - SHA256 :
fd3ca4007b225fdf8de7af4345a19179d5efa8c4bb9205f88cda806e5684b1ebâ VT · MalwareBazaar - SHA256 :
9fc2570b7cef51c1b8df116d144d11ff4096357be7d2c4c6367cfc2509cf1bccâ VT · MalwareBazaar - Fichiers :
setup.mjs - Fichiers :
Math_Symbol.js - Fichiers :
math_init.js - Fichiers :
keyv-6.0.0.tgz - Chemins :
/home/runner/.vault-token - Chemins :
/run/secrets/VAULT_TOKEN - Chemins :
/var/run/secrets/kubernetes.io/serviceaccount/token - Chemins :
~/.local/bin/gh-token-monitor.sh - Chemins :
~/.config/gh-token-monitor/ - Chemins :
~/Library/LaunchAgents/com.user.gh-token-monitor.plist - Chemins :
~/.config/systemd/user/gh-token-monitor.service - Chemins :
.claude/settings.json - Chemins :
.vscode/tasks.json
â ïž Ă propos de ces IOC â ils sont extraits automatiquement de l’article original le 8 aoĂ»t 2026 et n’ont pas fait l’objet d’une vĂ©rification externe. Un indicateur peut avoir Ă©tĂ© rĂ©attribuĂ© depuis : une IP de C2 peut redevenir un service lĂ©gitime, un domaine sinkholĂ© peut changer de propriĂ©taire. Aucune garantie d’exactitude ni d’actualitĂ© â contrĂŽlez leur validitĂ© avant tout usage opĂ©rationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
Malware / Outils
- Math_Symbol.js (stealer)
- setup.mjs (loader)
- gh-token-monitor (other)
- Bun runtime (tool)
đą Indice de vĂ©rification factuelle : 95/100 (haute)
- â socket.dev â source reconnue (liste interne) (20pts)
- â 17331 chars â texte complet (fulltext extrait) (15pts)
- â 19 IOCs dont des hashes (15pts)
- â 3/6 IOCs confirmĂ©s (AbuseIPDB, MalwareBazaar, ThreatFox, URLhaus, VirusTotal) (15pts)
- â 12 TTPs MITRE identifiĂ©es (15pts)
- â date extraite du HTML source (10pts)
- â acteur(s) identifiĂ©(s) : Shai-Hulud (5pts)
- ⏠pas de CVE à vérifier (0pts)
IOCs confirmés externellement :
54dc7ea54a1317ccâŠ(sha256) â VT (29/76 dĂ©tections)fd3ca4007b225fdfâŠ(sha256) â VT (20/76 dĂ©tections)9fc2570b7cef51c1âŠ(sha256) â VT (29/76 dĂ©tections)
đ Source originale : https://socket.dev/blog/popular-npm-packages-in-the-keyv-and-cacheable-namespaces-compromised-in-active-supply-chain