- ChainDrop, crv koji se sam replicira, kompromitovao je 435 npm paketa i 1,557 zlonamjernih verzija za manje od četiri sata.
- Zlonamjerni softver koristi Ethereum blockchain za komandovanje i kontrolu (EtherHiding) i krade akreditive iz razvojnih okruženja.
- Početna infekcija je došla s kompromitovanog GitHub računa održavatelja keyv i keširanih paketa.
- Programeri moraju opozvati sve akreditacije, provjeriti repozitorije i tretirati pogođene mašine kao potpuno kompromitovane.

Lanac snabdijevanja softverom pretrpio je još jedan težak udarac 4. augusta 2026. godine, kada je samorazmnožavajući crv pod nazivom ChainDrop preplavio npm registar sa preko 1,500 verzija zlonamjernih paketa . Napad, koji sigurnosne firme nazivaju direktnim potomkom crva Shai-Hulud, uspio je kompromitovati više od 435 jedinstvenih paketa u roku od nekoliko sati. Ono što ovaj incident čini posebno opasnim je to što zlonamjerni softver nije samo sjedio tamo - aktivno je krao vjerodajnice, koristio ih za objavljivanje još više zaraženih paketa, pa čak i ostavio mehanizme perzistencije u alatima za razvojne programere poput Claude Code i Visual Studio Code.
Prema izvještajima StepSecurityja, Aikida i JFroga, napad je započeo kada je napadač preuzeo kontrolu nad GitHub računom koji pripada Jaredu Wrayu, održavatelju široko korištenih paketa poput keyv i cacheable . Odatle su ubrizgali zlonamjerni kod direktno u glavnu granu, kreirali oznake izdanja i omogućili legitimnim GitHub Actions radnim procesima da objavljuju zaražene verzije na npm-u. Cijela operacija je bila visoko automatizirana: u roku od manje od četiri sata, prvobitno je prijavljeno 2,212 zlonamjernih verzija, iako je kasnija analiza precizirala taj broj na 1,557 verzija u 435 paketa. Razlika proizlazi iz rane zabune između naziva paketa, brojeva verzija i repozitorija za eksfiltraciju – što je uobičajen nered u brzim napadima na lanac snabdijevanja.
Porijeklo i obim ChainDropa
ChainDrop se nije pojavio niotkuda. To je evoluirana verzija crva Shai-Hulud i dijeli mnoge iste tehnike. Početni proboj ciljao je npm ekosistem putem 11 paketa nosača pod keyv i cacheable imenskim prostorima . Ovi nosači sadržavali su puni kod programa za učitavanje i crva, veličine oko 727 KB. Nakon što je napadač dobio pristup, koristio je ukradene npm tokene da nabroji sve pakete dostupne kompromitovanom identitetu, preuzme njihove tarball datoteke, ubrizga zlonamjerni softver, instalira zakrpu i ponovo ih objavi. Ovaj ciklus se brzo ponavljao, što je dovelo do 1,557 zlonamjernih verzija uočenih između 09:35 i 11:44 UTC.
U ranim izvještajima BleepingComputera spominjano je preko 1,300 paketa, ali se ispostavilo da je ta brojka mješavina stvarnih npm paketa i javnih GitHub repozitorija korištenih za eksfiltraciju podataka. Stvarni broj, kako je potvrdio StepSecurity u 16:20 UTC, iznosi 435 jedinstvenih paketa i 1,557 verzija . Pogođene biblioteke uključuju keyv, flat-cache, file-entry-cache, cacheable-request, cache-manager i ecto, između ostalih. Mnoge od njih su tranzitivne zavisnosti, što znači da je programer mogao pokrenuti zlonamjerni kod bez direktnog dodavanja keyv-a u svoj projekat. Kombinovani sedmični preuzimanja ovih paketa prelaze 500 miliona, što pojačava potencijalni radijus eksplozije.

Kako zlonamjerni softver funkcionira: Infekcija i širenje
Svaki zaraženi paket je uključivao predinstalacijski skript koji je izvršavao setup.mjs prije nego što je instalacija npm-a završena . Taj skript je preuzeo službeni Bun 1.3.13 runtime sa GitHub-a i koristio ga za pokretanje jako obfusiranog drugog nivoa korisnog tereta pod nazivom Math_Symbol.js, koji je bio veličine oko 728 KB. Korištenje legitimnog runtime-a poput Bun-a učinilo je da promet izgleda normalno, pomažući zlonamjernom softveru da prođe ispod radara. Jednom aktivan, korisni teret je pretraživao mašinu programera ili CI runner u potrazi za tajnama: npm i GitHub tokenima, AWS i Azure akreditivima, HashiCorp Vault tokenima, SSH ključevima, .env datotekama, Stripe ključevima, Slack tokenima, pa čak i akreditivima koje su pohranili AI asistenti za kodiranje.
Ukradeni podaci su šifrirani i preneseni u javne GitHub repozitorije s opisom "Shai-Hulud: Evo nas opet". Ali zlonamjerni softver se tu nije zaustavio. Također je koristio tehniku pod nazivom EtherHiding, koja koristi Ethereum blockchain za komandu i kontrolu . Adresa C2 servera je riješena putem pametnog ugovora, što je izuzetno otežavalo blokiranje. Osim toga, ChainDrop je instalirao prekidač za gašenje na nivou hosta: provjeravao je GitHub API svakih 60 sekundi s ukradenim tokenom, a ako bi token prestao raditi, izbrisao bi njegovo stanje i izašao. Također se samouništio nakon 24 sata, što je otežalo forenzičku analizu.
Sposobnost samoreplikacije crva bila je njegova najopasnija karakteristika. Nakon krađe podataka za prijavu, autentifikovao bi se na npm-u, nabrajao sve pakete koje je kompromitovani identitet mogao objaviti, a zatim bi ponovo objavio svaki od njih s istim preinstall hookom. To je omogućilo širenje infekcije od programera do programera, pretvarajući svaku kompromitovanu mašinu u odskočnu dasku za nove napade . Zlonamjerni softver je također modificirao .claude/settings.json i .vscode/tasks.json kako bi osigurao postojanost čak i nakon što je node_modules izbrisan.
Uticaj i preporuke za programere
Ako ste vi ili vaš tim instalirali bilo koju od pogođenih verzija paketa tokom perioda izloženosti, morate tretirati svoje mašine kao potpuno kompromitovane. Jedna npm instalacija bila je dovoljna za pokretanje programa za učitavanje. Prvi korak je izolacija pogođenih sistema i čuvanje logova, tarballova i CI zapisa za kasniju analizu. Zatim, sa čiste mašine, opozovite i rotirajte sve akreditive kojima je proces bio dostupan: npm tokene, GitHub tokene, ključeve cloud provajdera, SSH ključeve, CI tajne i sve druge osjetljive podatke. Ne zaboravite provjeriti neočekivane promjene u .claude, .vscode i GitHub Actions radnim tokovima.
Sigurnosne firme poput JFrog-a, StepSecurity-ja i Socket-a naglašavaju da samo ažuriranje paketa ili brisanje node_modules-a nije dovoljno. Zlonamjerni softver je možda ostavio mehanizme perzistencije koji mogu ponovo zaraziti sistem. Prvo morate ukloniti monitor tokena i komponente perzistencije , kao što je opisano u detaljnim analizama, prije nego što opozovete akreditive. Nakon toga, popravite datoteke zaključavanja na tačne, čiste verzije i razmislite o ponovnoj instalaciji sa onemogućenim skriptama dok se istraga ne završi.
Jedan od najuznemirujućih aspekata ChainDropa je taj što su mnoge zlonamjerne verzije imale važeće SLSA ateste. Budući da je napadač koristio legitimne GitHub Actions tokove rada kompromitovanog repozitorija, sistem porijekla je potvrdio da je paket izgrađen iz navedenog commita i očekivanim tokom rada. Problem je bio u tome što je sam commit bio zlonamjeran. Ovaj incident pokazuje da važeći potpis ili atestacija nisu garancija povjerenja - također je potrebno provjeriti da li je promjenu odobrio održavatelj. Odbrambene mjere poput provođenja minimalne starosti za nova izdanja, ograničavanja instalacijskih skripti i zakačivanja zavisnosti po integritetu mogu pomoći u ublažavanju sličnih napada u budućnosti.
Napad ChainDrop-a je oštar podsjetnik da model povjerenja ekosistema otvorenog koda ima kritičnu slijepu tačku. Čak i kada svaka tehnička provjera prođe - potpisane commit-ove, pouzdano objavljivanje, SLSA atesta - jedan kompromitovani račun održavatelja može srušiti cijelu kuću. Zajednica se treba kretati prema robusnijim metodama verifikacije, kao što je zahtijevanje višefaktorske autentifikacije za objavljivanje, praćenje neuobičajenih aktivnosti u repozitorijima i održavanje inventara u stvarnom vremenu onoga što se zapravo pokreće u CI cjevovodima. Do tada, programeri će morati ostati budni i tretirati svako novo izdanje sa zdravom dozom skepticizma.
