🔍 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 :

  1. DĂ©couvrant les packages du maintainer via l’API npm
  2. Téléchargeant les tarballs, injectant le hook malveillant et les fichiers payload
  3. 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.json et .vscode/tasks.json pour 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 via eval lors 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