npm-orm forgiftet 1 684 pakkeversjoner og la igjen Claude Code-hooks
Sjekk lockfilen mot eksakte versjoner før du oppgraderer, for «latest» peker fortsatt på ondsinnet kode for de fleste rammede pakkenavnene.
1 684 forgiftede pakkeversjoner fordelt på 420 pakkenavn og ni organisasjoner er tallet SafeDep til slutt kunne forankre i npm-registeret, skriver The Hacker News. Ormen dukket først opp i keyv@6.0.0 og brøt 4. august ut av Keyv- og Cacheable-navnerommene. Aikido teller høyere på pakkenavn og lavere på versjoner, så de to tallene skal ikke legges sammen.
Mekanismen er banal. Den forgiftede utgivelsen la til «node setup.mjs» som preinstall-kommando og pakket med setup.mjs og Math_Symbol.js, mens den kompilerte biblioteksekoden var urørt. Første trinn ser etter Bun, laster ned versjon 1.3.13 fra runtimens offisielle GitHub-utgivelser hvis den mangler, og sender kontrollen videre til en kompilert nyttelast på 727 680 byte. Den høster legitimasjon fra GitHub, npm, sky, Vault, Kubernetes og databaser, leser minnet til GitHub Actions-runnere og tar med seg maskineri for å publisere nye pakker med en stjålet npm-identitet. SafeDep sier ormen flyttet seg mellom organisasjoner hvert andre til syvende minutt og fullførte hele runden på rundt en halvtime.
Den viktigste detaljen for opprydding er rekkefølgen. Nyttelasten installerer en vakt som utløses av at du tilbakekaller tokens, så roterer du først, kan du kjøre angriperens lokale håndterer. Fjern vakten før rotasjonen.
«Enhver arbeidsstasjon eller runner som har kjørt en rammet versjon bør behandles som legitimasjonseksponert» — Socket
For deg som bygger med kodeagenter er det en ekstra kjørevei. Keyv-repoet inneholder fortsatt en SessionStart-hook i .claude/settings.json som kaller .vscode/setup.mjs, og en Environment Setup-oppgave i .vscode/tasks.json med runOn: folderOpen som kaller .claude/setup.mjs. Ingen av dem kjører ubetinget: VS Code blokkerer automatiske oppgaver i et ikke-betrodd arbeidsområde, og Claude Code krever arbeidsområdetillit for prosjektinnstillinger fra repoet. Men klikker du «trust» på en klonet katalog, er den sperren borte. Semgrep dokumenterte de samme hookene, samme filnavn og samme Bun-versjon i kompromitteringen av PyPI-pakken lightning i april, og Aikido plasserer augustaktiviteten i Shai-Hulud-familien.
Signaturkjeden hjalp ikke. Den forgiftede Keyv-utgivelsen bar gyldig OIDC- og SLSA-proveniens fordi den gikk gjennom prosjektets ekte GitHub Actions-arbeidsflyt. Attestasjonen bekreftet byggeprosessen korrekt, men den kan ikke si noe om kilden som gikk inn i den. npm 12 blokkerer uapproberte lifecycle-skript i avhengigheter som standard, mens eldre klienter og andre installasjonsveier fortsatt kjører dem.
Keyv- og Cacheable-utgivelsene er avpublisert, men SafeDep sier «latest» fortsatt løste til en ondsinnet versjon for de fleste andre rammede pakkenavnene da rapporten ble oppdatert. Å oppgradere blindt kan altså bevare eksponeringen i stedet for å fjerne den.
Hva bør du gjøre?
- Sammenlign lockfiler og faktisk oppløste versjoner mot listen over rammede pakker. Navnerom eller «latest»-tagger er ikke presist nok.
- Skru av unødvendige installasjonsskript i CI, og oppgrader til npm 12 der du kan.
- Har et miljø kjørt en rammet versjon: fjern tilbakekallingsvakten først, roter deretter tokens, nøkler og publiseringstilgang.
- Gå gjennom klonede repoer for .claude- og .vscode-kataloger før du åpner dem i en editor eller kodeagent med tillit.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.