En bref
Que s'est-il passé ?
Le groupe TeamPCP lance une vague de son ver Mini Shai-Hulud, compromettant des paquets npm légitimes via leur propre pipeline de release GitHub Actions et des jetons OIDC détournés.
Escalade rare : les paquets piégés portent des attestations SLSA Build L3 valides, premier ver npm documenté produisant des paquets malveillants validement attestés. Sur TanStack, l'attaque chaîne un Pwn Request (pull_request_target), l'empoisonnement du cache Actions et l'extraction du jeton OIDC depuis la mémoire du runner.
84 versions malveillantes sur 42 paquets @tanstack/*, avec propagation à UiPath et DraftLab. La charge (2,3 Mo) lit la mémoire du runner, moissonne 100+ chemins de secrets, et plante une persistance dans Claude Code et VS Code. Exfiltration via Session Protocol et l'API GraphQL GitHub.
L'attestation ne suffit pas : ajouter un gate d'approbation, neutraliser les Pwn Requests (pas de secrets sur pull_request_target), isoler le cache par tenant, permissions minimales des runners, et détecter la republication.
Comment l'attaquant a procédé
Cet incident met en jeu les vecteurs d'attaque suivants du catalogue SOCLE ; chacun renvoie à sa fiche, où l'on trouve les exigences qui le neutralisent :
La leçon à en tirer
Identités de publication courtes (OIDC) ; détection de republication ; confinement du rayon d'explosion (egress filtre).
Les exigences SOCLE qui auraient limité cet incident
Cet incident se rattache à 5 exigences du référentiel, par domaine. Les satisfaire n'aurait pas forcément tout empêché, mais aurait réduit la probabilité de l'attaque, limité son impact ou accéléré sa détection :