Hvad der blev udgivet mellem 09:35 og 11:44 UTC
Den første forgiftede udgivelse var keyv version 6.0.0, offentliggjort den 4. august klokken 09:35 UTC. Semgrep, som gav kampagnen navnet ChainDrop, talte 1.557 skadelige versioner fordelt på 435 pakker i den bølge, der fulgte, mellem 09:40 og 11:44 UTC. Wiz fulgte samme hændelse, nåede frem til mere end 400 forskellige pakker og førte den tilbage til en vedligeholderkonto, hvis adgangsoplysninger var blevet stjålet. Det var ikke efterligninger med lignende navne og ikke nye pakker. Det var de ægte biblioteker, genudgivet under den ægte vedligeholders navn med en ekstra fil vedhæftet.
Inden for en halv time krydsede spredningen grænserne mellem organisationer. Blandt de ramte navnerum var @deliveroo, @ornikar, @qlik, @servicetitan, @onereach, @or-sdk, @arv-bedrock og @adminide-stack foruden familierne keyv og cacheable selv. De organisationer deler hverken kode eller ejerskab. Hvad de delte, var et stjålet udgivelsestoken: hver infektion høstede npm-adgangsoplysninger fra den maskine, der installerede pakken, og brugte dem til at genudgive alt andet, som det token kunne nå. Det er netop det, der gør sagen til en orm og ikke til en enkelt forgiftet udgivelse.
Bærerne er pakker, som ingen har valgt
Vi hentede downloadtal fra npm-registret for de 30 dage, der sluttede den 3. august, dagen før kompromitteringen. keyv nåede 619,7 millioner downloads. flat-cache 579,8 millioner. file-entry-cache 571,2 millioner. cacheable-request 137,0 millioner, cacheable 30,1 millioner og cache-manager 16,3 millioner. De seks biblioteker giver tilsammen omkring 1,95 milliarder downloads i måneden, før de blev forgiftet.
Næsten ingen installerer flat-cache eller file-entry-cache bevidst. Det er mellemlagringshjælpere, som følger med under værktøjer til kodeanalyse og bygning, adskillige niveauer nede i et afhængighedstræ, i projekter hvis ansvarlige aldrig har skrevet nogen af de to navne. Det er den ubehagelige del af regnestykket. Pakkerne med den største sprængvidde er netop dem, der mangler på den afhængighedsliste, du gennemgik og godkendte, så en revision af dine egne beslutninger siger meget lidt om denne hændelse. Det tal, der forudsiger din udsættelse, er hvor mange gange din bygning kørte den 4. august.
Skadekoden ledte efter assistenten til kunstig intelligens
Mekanismen var en preinstall-krog, og det er afgørende, fordi den kører under opløsningen af afhængigheder og ikke venter på, at din kode importerer noget. Indlæsningsfilerne setup.mjs og math_init.js hentede et selvstændigt Bun-afviklingsmiljø og udførte et sløret andet trin. Wiz genkendte trafikken på dens user agent, Bun/1.3.13. Indsamleren gik efter npm-tokens, skyadgangsoplysninger, SSH-nøgler, CI-hemmeligheder, kryptovalutategnebøger og konfigurationsfiler til værktøjer for kunstig intelligens.
Den skrev også sin vedholdenhed ind i mapperne .claude og .vscode, hvilket er et bevidst valg om, hvor udviklere nu placerer deres tillid. En editor og en assistent til kunstig intelligens har adgang til kodelageret, rettigheder i kommandolinjen og i stigende grad myndighed til at udføre kommandoer. Styringen var skjult i en Ethereum-kontrakt, læst med et eth_call og med domænet npm-cache[.]com som svar, så operatørerne kan flytte deres infrastruktur uden at udsende ny skadekode. Udslusningen gik til GitHub-lagre oprettet under de overtagne identiteter og med titlen Shai-Hulud: Here We Go Again, navnet på den familie af skadekode, som denne nedstammer fra.
To timer er nok til et NIS2-fund
For en virksomhed i EU eller Storbritannien er spørgsmålet om overholdelse ikke kun, om I blev ramt, men om I kan beskrive, hvad der skete. To af de ramte navnerum tilhører Deliveroo og Ornikar, en britisk leveringsplatform og et fransk køreskolefirma. Ingen af dem er en ukendt butik, og ingen af dem valgte at være en del af denne hændelse. NIS2 placerer forsyningskædens sikkerhed hos ledelsen og ikke hos sikkerhedsholdet, og DORA kræver den samme dokumentation af finansielle enheder om risikoen ved tredjeparters informationsteknologi.
Dokumentationen vejer derfor lige så tungt som oprydningen. Fastslå om en bygning kørte den 4. august mellem 09:35 og cirka 15:00 UTC, det tidspunkt hvor styringskanalen på Ethereum blev dokumenteret, mens analysen stadig var i gang. Rotér alle adgange, som en agent kunne nå, ikke kun npm-tokenet: skynøgler, GitHub-tokens, SSH-nøgler samt Kubernetes- og Terraform-adgange. Byg agenterne op fra nyt i stedet for at rense dem. Skriv derefter ned, hvad I roterede og hvornår, for netop det dokument vil tilsynet, revisoren eller forsikringsselskabet bede om. I Danmark er Center for Cybersikkerhed den myndighed, en anmeldelsespligtig hændelse ender hos.
Læs videre: 16.000 firmaer deler leverandørrisikoen. Det gør du ikke | Rettelsen signerer nye filer, ikke jeres arkiv



