Selon PostHog (posthog.com), un ver auto‑réplicant nommé Shai‑Hulud 2.0 a compromis plusieurs de ses SDK JavaScript publiés sur npm le 24 novembre 2025, après le vol d’un token GitHub et l’abus d’un workflow GitHub Actions.
-
Nature de l’attaque: supply chain avec ver auto‑réplicant 🪱. Des versions npm malveillantes contenaient un script preinstall qui exécutait TruffleHog pour scanner et voler des identifiants, les exfiltrait en créant un dépôt GitHub public, puis utilisait d’éventuels tokens npm trouvés pour publier d’autres paquets compromis, propageant ainsi l’infection.
-
Impact: uniquement les SDK JavaScript sur npm. Les versions malicieuses identifiées ont été supprimées et les jetons utilisés révoqués. PostHog indique que les dernières versions republiées sont sûres.
-
Cause et vecteur initial: PostHog a été ciblé comme « patient zero ». Un compte GitHub (bot) a vu son Personal Access Token (PAT) volé via l’abus d’un workflow pull_request_target. Un attaquant a soumis une PR éphémère modifiant un script exécuté par un workflow pour exfiltrer des secrets vers un webhook. Par la suite, avec des accès étendus, l’attaquant a poussé un commit détaché modifiant un workflow de lint pour exfiltrer l’ensemble des secrets disponibles sur les runners, notamment le token de publication npm. L’attaquant a aussi supprimé des exécutions de workflow pour masquer ses traces. Le problème racine: un workflow exécutant du code contrôlé par l’auteur de la PR (checkout du head au lieu du base) avec pull_request_target, menant à exécution de code non fiable dans un contexte de CI de confiance.
-
Paquets et versions compromis (exemples):
- posthog-node 4.18.1, 5.13.3, 5.11.3
- posthog-js 1.297.3; posthog-react-native 4.11.1; posthog-docusaurus 2.0.6
- posthog-react-native-session-replay 1.2.2; @posthog/agent 1.24.1; @posthog/ai 7.1.2; @posthog/cli 0.5.15
- Les utilisateurs du script embarqué de PostHog ne sont pas affectés (la propagation se fait via preinstall lors des installations locales/CI).
-
Recommandations et remédiations annoncées par la source 🚨:
- Rechercher localement les fichiers suspects: setup_bun.js, bun_environment.js, cloud.json, contents.json, environment.json, truffleSecrets.json
- Vérifier les logs npm: mots‑clés shai et preinstall
- Purger les caches et réinstaller avec des versions sûres; envisager minimumReleaseAge (yarn/pnpm); PostHog passe à pnpm 10 pour désactiver pre/postinstall et utilise minimumReleaseAge
- Durcissement des workflows de publication (trusted publisher), revue sécurité obligatoire pour toute modification de workflow, et refonte de la gestion des secrets GitHub
IOCs et TTPs:
- IOCs:
- Fichiers: setup_bun.js, bun_environment.js, cloud.json, contents.json, environment.json, truffleSecrets.json
- Paquets/versions npm malveillants listés ci‑dessus
- Compte GitHub supprimé: brwjbowkevj
- Mots‑clés de logs npm: shai, preinstall
- TTPs:
- Compromission supply chain via publication npm et script preinstall
- Abus de GitHub Actions (pull_request_target + checkout du head) pour exécuter du code contrôlé par un attaquant
- Vol de secrets CI/CD (PAT GitHub, token npm), exfiltration via webhook et création de dépôts publics pour stocker les credentials
- Suppression de runs pour effacer des traces; propagation via publication automatisée
Type d’article: post‑mortem détaillant le déroulé de l’incident, l’analyse des causes, les paquets touchés et les mesures prises.
🔗 Source originale : https://posthog.com/blog/nov-24-shai-hulud-attack-post-mortem
🖴 Archive : https://web.archive.org/web/20251202112527/https://posthog.com/blog/nov-24-shai-hulud-attack-post-mortem