- Dana 4. augusta 2026. godine, samorazmnožavajući crv pod nazivom ChainDrop kompromitovao je preko 400 npm paketa, uključujući keyv i flat-cache, u roku od četiri sata.
- U napadu su korišteni ukradeni GitHub akreditivni podaci za objavljivanje zlonamjernih verzija s valjanim porijeklom, što ih je činilo nerazlučivim od legitimnih izdanja.
- Korisni teret krade akreditive, izvlači podatke putem C2 baziranog na Ethereumu i ponovo objavljuje zaražene pakete koristeći ukradene npm tokene.
- Organizacije moraju provjeriti datoteke zaključavanja, rotirati vjerodajnice i ukloniti mehanizme perzistencije kako bi ublažile utjecaj.

NPM ekosistem se oporavlja od jednog od najagresivnijih napada na lanac snabdijevanja ikada viđenih. Dana 4. augusta 2026. godine, crv nazvan ChainDrop probio je registar, otrovajući stotine paketa za manje od četiri sata. Napad je iskoristio kompromitovani GitHub račun za objavljivanje zlonamjernih verzija široko korištenih biblioteka poput keyv i flat-cache, koje zajedno čine stotine miliona sedmičnih preuzimanja. Ono što ovaj incident čini posebno alarmantnim je to što su zlonamjerna izdanja imala validno SLSA porijeklo, što ih je činilo potpuno legitimnim za automatizirane sigurnosne provjere.
Sigurnosni istraživači iz StepSecurityja, Unit 42, Sonatypea i Aikidoa utrkivali su se u analizi crva i obuzdavanju njegovog širenja. Početni val pogodio je ekosistem Jaredwraya, ali se crv brzo proširio na druge održavatelje i organizacije, uključujući ServiceTitan, Qlik i Deliveroo. Od najnovijeg ažuriranja, broj kompromitovanih paketa nastavlja rasti, a nove infekcije pojavljuju se svakih nekoliko minuta. Ovo nije samo još jedna kampanja skraćivanja tipografskih grešaka; to je sofisticirani, samorazmnožavajući crv koji krade vjerodajnice i koristi ih za ponovno objavljivanje u npm registru.
Napad na prvi pogled

Napad je započeo kada je kompromitovan GitHub račun Jareda Wraya, održavatelja keyv-a i srodnih paketa. Napadač je zlonamjerne commit-ove direktno prebacivao u glavnu granu i izrezivao nova izdanja, koja su zatim objavljivana na npm-u putem vlastitog pouzdanog radnog toka projekta. To je značilo da su zaražene verzije imale važeće SLSA potvrde o porijeklu , funkciju na koju se mnogi timovi oslanjaju kao sigurnosni signal. Međutim, porijeklo samo dokazuje koji je commit izgrađen, a ne da li je commit autoriziran. Napadač je također postavio lažne testne datoteke i modificirane skripte za izdanja kako bi osigurao da zlonamjerne verzije postanu najnoviji dist-tag.
Zlonamjerni paketi sadržavali su predinstalacijski skript koji je izvršavao naredbu pod nazivom setup.mjs. Ova naredba je preuzela legitimni Bun JavaScript runtime sa GitHub-a i koristila ga za pokretanje obfusiranog korisnog tereta od 727 KB pod nazivom Math_Symbol.js. Korisni teret je bio crv sa svim funkcijama koji je prikupljao vjerodajnice sa sistema žrtve, uključujući npm tokene, GitHub tokene, vjerodajnice za oblak, SSH ključeve, pa čak i konfiguracije AI alata. Zatim je podatke prenio na komandno-kontrolni server, što je riješeno putem Ethereum pametnog ugovora - tehnike poznate kao EtherHiding.
Pogođeni paketi i opseg

Početni val napada ciljao je 11 paketa u ekosistemu jaredwray, uključujući keyv@6.0.0, flat-cache@6.1.24 i file-entry-cache@11.1.6. Ovi paketi su tranzitivne zavisnosti bezbroj projekata, od ESLint-a do cache-manager-a. Crv je zatim koristio ukradene podatke za ponovno objavljivanje 433 dodatna paketa, čime je ukupan broj porastao na 444 paketa i 2,212 verzija u prvih nekoliko sati. Kasniji izvještaji Sonatype-a i Aikido-a sugeriraju da je broj porastao još više, sa preko 1,000 pogođenih paketa do trenutka kada se prašina slegla.
Drugi val je pogodio pakete organizacija poput @servicetitan, @qlik, @onereach i @deliveroo, što ukazuje na to da se crv premjestio iz javnih alata za razvojne programere u korporativne razvojne procese. Napadači su također kreirali javne repozitorije s nazivima u stilu Dune kako bi smjestili ukradene podatke, te su u direktorije .vscode i .claude ugradili mehanizme perzistencije kako bi ponovo zarazili programere koji su otvorili kompromitirane repozitorije.
Kako funkcioniše crv ChainDrop
Lanac napada je majstorska klasa u preživljavanju od zemlje. Skripta za prethodnu instalaciju se izvršava prije nego što se instalira bilo koja zavisnost, tako da se crv izvršava s korisničkim privilegijama. Dropper provjerava da li je Bun već prisutan; ako nije, preuzima legitimnu Bun binarnu datoteku sa GitHub-a. Zbog toga mrežni promet izgleda bezopasno, jer dolazi sa github.com. Druga faza sadržaja se zatim odvaja kao pozadinski proces i započinje svoj prljavi posao.
Jedna od najizrazitijih tehnika je struganje memorije runnera . Korisni teret pokreće Python pomoćnik koji čita memoriju procesa GitHub Actions Runner.Worker, tražeći tajne ubrizgane u radni tok. To mu omogućava hvatanje OIDC tokena i drugih efemernih akreditivnosti koje bi inače nestale kada se posao završi. Crv također koristi ruski lokalni kill switch, čisto izlazeći ako je jezik sistema ruski, što je uobičajena taktika za izbjegavanje ciljanja zemalja ZND-a.
Korisni sadržaj uključuje kompletan npm mehanizam za objavljivanje. On nabraja sve pakete koje žrtva može objaviti, preuzima trenutni tarball, ubrizgava zlonamjerni predinstalacijski skript i korisni sadržaj te ponovo objavljuje paket s nadograđenom verzijom. Čak generira i vlastite Sigstore i SLSA pakete porijekla, čineći da zlonamjerne verzije izgledaju legitimno izgrađene. Ovaj mehanizam samopropagacije je ono što je omogućilo crvu da se tako brzo proširi među nepovezanim organizacijama.
Indikatori kompromisa
Ako ste instalirali bilo koju od pogođenih verzija, pretpostavite da je vaš sistem kompromitovan. Potražite ove indikatore:
- Datoteke pod nazivom setup.mjs, Math_Symbol.js ili math_init.js u direktorijima node_modules.
- Neočekivane Bun binarne datoteke na vašem sistemu, posebno ako nikada niste instalirali Bun.
- Izmjene datoteke .claude/settings.json ili .vscode/tasks.json koje upućuju na setup.mjs.
- Odlazne veze prema npm-cache.com ili awqhnjewqjkl.icu, ili Ethereum RPC pozivi za ugovor 0xE1f2395ee43e45A1556EC6438a88c31B83493103.
- Novi GitHub repozitoriji s opisima poput „Shai-Hulud: Evo nas opet“ ili nazivima s temom Dine.
Također provjerite monitor tokena instaliran nakon krađe: ~/.local/bin/gh-token-monitor.sh, ~/.config/gh-token-monitor/ i usluge systemd ili LaunchAgent. Crv ga instalira kako bi kaznio rotaciju akreditiva pokretanjem napadačkog tereta kada se ukradeni token opozove.
Ublažavanje i oporavak
Ako ste pogođeni, reagirajte brzo. Prvo, izolujte mašinu i sačuvajte logove. Zatim, rotirajte sve akreditive koji su bili prisutni na sistemu, uključujući npm tokene, GitHub PAT-ove, cloud ključeve i SSH ključeve. Uklonite monitor tokena prije rotacije, jer će se aktivirati ako opozovete token. Zatim, očistite svoje lockfiles i zakačite ih na poznate ispravne verzije. Za keyv, flat-cache i file-entry-cache, koristite nadjačavanja da biste blokirali zlonamjerne verzije. Na kraju, ponovo instalirajte sistem sa –ignore-scripts kako biste spriječili izvršavanje bilo kakvih zaostalih instalacijskih hook-ova.
Za CI/CD cjevovode, pregledajte zapisnike za sve instalacije koje su riješile pogođene verzije tokom perioda izloženosti. Tretirajte svaki pokretač koji je instalirao zaraženi paket kao kompromitovan i rotirajte sve tajne dostupne za taj zadatak. Također, provjerite svoje GitHub organizacije za neočekivane tokove rada pod nazivom "Run Copilot" ili artefakte pod nazivom "format-results", koji su znakovi tajnog pranja novca crva.
Dubinska odbrana je ključna. Koristite izlazne liste dozvoljenih paketa na CI runnerima kako biste blokirali droper da preuzme Bun. Implementirajte politike hlađenja koje zahtijevaju da paketi budu stari nekoliko dana prije usvajanja. I nemojte se oslanjati isključivo na porijeklo - to nije garancija sigurnosti. Najbolja odbrana je minimiziranje upotrebe instalacijskih skripti i praćenje anomalnog ponašanja.
Kako istraga traje, broj pogođenih paketa i dalje raste. Sposobnost crva da rotira svoju C2 infrastrukturu putem jedne Ethereum transakcije čini ga posebno otpornim. Sigurnosni timovi trebaju pratiti promjene u pametnom ugovoru i biti u toku s novim indikatorima. npm registar je počeo uklanjati zlonamjerne verzije, ali čišćenje je u toku.
Ovaj incident je oštar podsjetnik da je ekosistem otvorenog koda siguran koliko i njegova najslabija karika. Jedan kompromitovani račun održavatelja može se pretvoriti u masovni napad na lanac snabdijevanja. Crv ChainDrop je poziv na buđenje programerima i organizacijama da usvoje jače sigurnosne prakse, uključujući višefaktorsku autentifikaciju, tokene s najmanjim privilegijama i kontinuirano praćenje zavisnosti.