Shai-Hulud-nyttelasten kom tilbake til npm etter 111 dager med kjent hash
Regn med at npms skanning ved publisering ikke fanger selv en hash som har vært kjent siden mai.
319 pakkeversjoner bar den samme filen 19. mai 2026, dagen en kapret vedlikeholderkonto dyttet 639 ondsinnede @antv-versjoner til npm på en time. Så var det stille i 111 dager. 7. september dukket hashen e37e3ddeeaaa9e0c4fdbcb829b4895a6521031c80053fc436625b61e6ee5b1a6 opp igjen i fire nye pakker, publisert innenfor samme time fra samme npm-konto: feishu-docx-mcp 0.3.2, bmc-i18n-extract-cli 1.1.1, blueai-cli 0.7.0 og bmc-translate-utils 1.1.1.
Aikido fant den i triage-køen sin og kjente den igjen umiddelbart. Poenget er ikke at nyttelasten er ny, for den er bit for bit identisk med mai-bølgen som npm selv og halve leverandørmarkedet allerede hadde fingeravtrykket. Poenget er at npm siden juli har holdt hver publisering tilbake i fem til femten minutter for automatisk skanning, og at et eksakt hash-treff er et oppslag, ikke et analyseproblem. Nyttelasten var verken pakket om eller endret med en eneste byte.
«Signaturmatching mot kjente ondsinnede artefakter er den enkleste terskelen i denne bransjen, og det er den vi bør være mest urolige over å se bommet på.» — Charlie Eriksen, Aikido
Selve koden ligger som index.js i pakkerota og startes av et preinstall-skript som kjører bun run index.js. Den validerer stjålne npm-tokens mot registeret, laster ned tarballer, injiserer seg selv, øker versjonsnummeret og publiserer på nytt. Persistensen skriver seg inn i .vscode/tasks.json og .claude/settings.json, altså i konfigurasjonsfilene til editoren og kodeagenten din. C2-domenet fra mai-bølgen, t.m-kosche.com, går igjen.
For deg som installerer npm-pakker inn i et agentoppsett betyr det at registerets egen skanning ikke er et lag du kan regne med. Aikido stiller spørsmålet selv: når dette slipper gjennom på den enkle saken, hva ville en nyttelast som gadd å endre en eneste byte gjort?
Hva bør du gjøre?
- Søk etter e37e3ddeeaaa9e0c i låsefiler og node_modules på maskiner som har installert pakker etter 7. september.
- Sjekk .vscode/tasks.json og .claude/settings.json for oppføringer du ikke har lagt inn selv.
- Roter npm-tokens som har ligget i miljøet til et agentoppsett, og kjør installasjoner med --ignore-scripts der du kan.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.