Vad som publicerades mellan 09:35 och 11:44 UTC
Den första förgiftade utgåvan var keyv version 6.0.0, publicerad den 4 augusti klockan 09:35 UTC. Semgrep, som gav kampanjen namnet ChainDrop, räknade 1 557 skadliga versioner fördelade på 435 paket i den våg som följde, mellan 09:40 och 11:44 UTC. Wiz följde samma händelse, kom fram till mer än 400 skilda paket och härledde den till ett underhållarkonto vars inloggningsuppgifter hade stjälits. Det var inte efterhärmningar med snarlika namn och inte nya paket. Det var de äkta biblioteken, återutgivna under den äkta underhållarens namn med en extra fil bifogad.
Inom en halvtimme korsade spridningen gränserna mellan organisationer. Bland de drabbade namnrymderna fanns @deliveroo, @ornikar, @qlik, @servicetitan, @onereach, @or-sdk, @arv-bedrock och @adminide-stack utöver familjerna keyv och cacheable själva. De organisationerna delar varken kod eller ägare. Vad de delade var en stulen publiceringstoken: varje infektion skördade npm-uppgifter från den maskin som installerade paketet och använde dem för att återutge allt annat som den token kunde nå. Det är just detta som gör saken till en mask och inte till en enstaka förgiftad utgåva.
Bärarna är paket som ingen har valt
Vi hämtade nedladdningssiffror från npm-registret för de 30 dagar som slutade den 3 augusti, dagen före intrånget. keyv nådde 619,7 miljoner nedladdningar. flat-cache 579,8 miljoner. file-entry-cache 571,2 miljoner. cacheable-request 137,0 miljoner, cacheable 30,1 miljoner och cache-manager 16,3 miljoner. De sex biblioteken ger tillsammans omkring 1,95 miljarder nedladdningar under månaden innan de förgiftades.
Nästan ingen installerar flat-cache eller file-entry-cache medvetet. Det är hjälpmedel för mellanlagring som följer med under verktyg för kodgranskning och bygge, flera nivåer ned i ett beroendeträd, i projekt vars ansvariga aldrig har skrivit något av de två namnen. Där ligger den obehagliga delen av räkningen. Paketen med störst sprängvidd är just de som saknas på den beroendelista du granskade och godkände, så att granska dina egna beslut säger mycket lite om denna händelse. Det tal som förutsäger din exponering är hur många gånger ditt bygge kördes den 4 augusti.
Skadekoden sökte assistenten för artificiell intelligens
Mekanismen var en preinstall-krok, och det spelar roll eftersom den körs under upplösningen av beroenden och inte väntar på att din kod importerar något. Inläsningsfilerna setup.mjs och math_init.js hämtade en fristående Bun-körmiljö och utförde ett fördunklat andra steg. Wiz kände igen trafiken på dess user agent, Bun/1.3.13. Insamlaren gick efter npm-tokens, molnuppgifter, SSH-nycklar, CI-hemligheter, plånböcker för kryptovalutor och inställningsfiler för verktyg inom artificiell intelligens.
Den skrev också in sin beständighet i katalogerna .claude och .vscode, vilket är ett medvetet val om var utvecklare numera placerar sin tillit. En editor och en assistent för artificiell intelligens har åtkomst till kodförrådet, rättigheter i kommandoskalet och i ökande grad befogenhet att köra kommandon. Styrningen låg dold i ett smart avtal på Ethereum, läst med ett eth_call och med domänen npm-cache[.]com som svar, så att operatörerna kan flytta sin infrastruktur utan att sända ut ny skadekod. Utflödet gick till GitHub-förråd som skapats under de övertagna identiteterna och fått titeln Shai-Hulud: Here We Go Again, namnet på den familj av skadekod som denna härstammar från.
Två timmar räcker för ett NIS2-fynd
För en verksamhet i EU eller Storbritannien är efterlevnadsfrågan inte bara om ni träffades, utan om ni kan beskriva vad som hände. Två av de drabbade namnrymderna tillhör Deliveroo och Ornikar, en brittisk leveransplattform och ett franskt företag inom trafikskolor. Ingen av dem är en okänd butik, och ingen av dem valde att vara en del av denna händelse. NIS2 placerar försörjningskedjans säkerhet hos ledningen och inte hos säkerhetsgruppen, och DORA kräver samma underlag av finansiella enheter om risken i tredje parters informationsteknik.
Dokumentationen väger därför lika tungt som saneringen. Fastställ om ett bygge kördes den 4 augusti mellan 09:35 och omkring 15:00 UTC, den tidpunkt då styrkanalen på Ethereum dokumenterades medan analysen fortfarande pågick. Rotera varje behörighet som en körare kunde nå, inte bara npm-token: molnnycklar, GitHub-tokens, SSH-nycklar samt Kubernetes- och Terraform-behörigheter. Bygg om körarna i stället för att rensa dem. Skriv sedan ned vad ni roterade och när, eftersom just det dokumentet är vad tillsynet, revisorn eller försäkringsgivaren kommer att begära. I Sverige är Myndigheten för samhällsskydd och beredskap den instans dit en anmälningspliktig händelse går.
Läs vidare: 16.000 företag delar leverantörsrisken. Inte du | Rättningen signerar nya filer, inte ert arkiv



