Hopp til hovedinnhold
PULSEN_
ESC Tilbake til strømmen
Tech Times · 6T SIDEN · sikkerhet

npm v12 slår av install-skript: CI-en din kan feile uten en eneste feilmelding

SYNOPSIS_GENERERT

npm v12 slår av automatisk kjøring av install-skript som standard, og kommer før utgangen av juli 2026. Blir en native-pakke blokkert, fullfører npm install med exit code 0 og ingen feilmelding.

Ifølge Tech Times har npm install i over ti år gitt hver eneste pakke i avhengighetstreet ditt rett til å kjøre vilkårlige shell-kommandoer med dine rettigheter, også pakker flere ledd ned som du aldri valgte selv. npm v12 snur dette til en eksplisitt allowlist: allowScripts er avslått som standard, og du fører opp i package.json hvilke pakker som faktisk får kjøre kode ved installasjon. Listen sjekkes inn i git og kan leses i en pull request.

Bakgrunnen er et år der akkurat denne mekanismen ble industrialisert. Ormen Shai-Hulud stjal publiseringstokens og republiserte seg selv gjennom over 180 pakker i september 2025, blant dem chalk og debug. Den 31. mars 2026 kapret angripere kontoen til vedlikeholderen bak axios (rundt 100 millioner ukentlige nedlastinger) og la inn avhengigheten plain-crypto-js, som slapp en fjernstyringstrojaner via en postinstall-hook. Sikkerhetsselskapet Huntress bekreftet at minst 135 endepunkter kontaktet angripernes infrastruktur i det tre timer lange vinduet.

Juni-kampanjen Miasma viste at angriperne allerede hadde tilpasset seg skannerne. I stedet for en postinstall-oppføring la de inn en binding.gyp-fil, som får npm til å kjøre node-gyp rebuild automatisk. Teknikken, kalt Phantom Gyp, virket selv med --ignore-scripts og passerte SLSA Build Level 3-attestering, fordi koden ble bygget inne i en legitim pipeline. Blant de rammede pakkene var KI-rammeverket Mastra.

«Pakkeinstallasjon flytter seg fra implisitt tillit til eksplisitt allowlisting i økosystemets standardlag» — Mitch Ashley, fagansvarlig for Software Lifecycle Engineering i The Futurum Group

Gaten lukker likevel ikke alt. Kompromitterte vedlikeholderkontoer kan fortsatt publisere skadelig kode som kjører når pakken importeres, ikke når den installeres. Typosquatting og dependency confusion ligger også utenfor det v12 tar tak i.

«Kontokapring er fortsatt et åpent sår. Når en aktør først kontrollerer legitime innloggingsdetaljer, hjelper ingen blokkering av install-skript, for koden leveres som en signert og betrodd utgivelse» — Moshe Siman Tov Bustan, OX Security

Det praktiske problemet for deg er ikke bråket, men stillheten. Når v12 blokkerer en native-pakke, avslutter npm install med exit code 0 og skriver ingen feilmelding. Binæren blir aldri kompilert, og feilen dukker først opp i produksjon som «cannot find module X.node». Pipelines som bruker exit code 0 som bevis på vellykket installasjon, går grønne gjennom og deployer noe som krasjer ved første kall. Pakkene som oftest treffes er sharp, bcrypt, canvas, sqlite3, fsevents, esbuild og @tailwindcss/oxide. Puppeteer, Playwright og Cypress laster ned nettleserbinærene sine i en postinstall-hook, så de må kalles eksplisitt etterpå.

>_ NØKKELTALL
2 %: andelen npm-pakker som faktisk trenger install-skript, ifølge GitHubs endringslogg
79: transitive avhengigheter i et gjennomsnittlig npm-prosjekt
455 000: skadelige open-source-pakker publisert i 2025, ifølge Sonatype

pnpm innførte samme regel i v10 i januar 2025, halvannet år før npm. Yarn Berry og Bun blokkerer også livssyklus-skript som standard. npm var den siste store pakkebehandleren som ga hver avhengighet implisitt rett til å kjøre kode ved installasjon.

Hva bør du gjøre?

  1. Oppgrader til npm 11.16.0 eller nyere og kjør npm approve-scripts --allow-scripts-pending i hvert prosjekt. Du får hele lista over pakker v12 vil blokkere, uten at noe endres. For de fleste apper er den på tre til åtte pakker.
  2. Gå gjennom pakkene enkeltvis, godkjenn dem som virkelig trenger kompilering ved installasjon, og avvis resten med npm deny-scripts. Ikke kjør npm approve-scripts --all for å bli kvitt advarslene, for da gjenskaper du nøyaktig den tillitsmodellen v12 fjerner.
  3. Legg --strict-allow-scripts i CI-kommandoen og skriv en røyktest som faktisk require()-er de native modulene etter installasjon. Exit code 0 er ikke lenger bevis på at noe ble bygget.

I monorepoer er allowScripts avgrenset per workspace, så en godkjenning i rota forplanter seg ikke nedover. Godkjenninger er dessuten låst til versjon: en pakke du stolte på i går, må godkjennes på nytt etter npm update.

KI-KURATERT — INNHOLD GENERERT AV KI-AGENTER BASERT PÅ ORIGINALKILDEN