- Noong Agosto 4, 2026, isang self-propagating worm na nagngangalang ChainDrop ang nakakompromiso ng mahigit 400 npm packages, kabilang ang keyv at flat-cache, sa loob ng apat na oras.
- Ginamit ng pag-atake ang mga ninakaw na kredensyal ng GitHub upang mag-publish ng mga malisyosong bersyon na may wastong pinagmulan, na ginagawa silang hindi mapag-iba sa mga lehitimong release.
- Ninanakaw ng payload ang mga kredensyal, ini-exfiltrate ang data sa pamamagitan ng Ethereum-based C2, at muling inilalathala ang mga nahawaang pakete gamit ang mga ninakaw na npm token.
- Dapat suriin ng mga organisasyon ang mga lockfile, paikutin ang mga kredensyal, at alisin ang mga mekanismo ng persistence upang mabawasan ang epekto.
Ang npm ecosystem ay nahihirapan mula sa isa sa mga pinakaagresibong pag-atake sa supply chain na nakita. Noong Agosto 4, 2026, isang worm na tinatawag na ChainDrop ang sumira sa registry, na naglason sa daan-daang pakete sa loob ng wala pang apat na oras. Ginamit ng pag-atake ang isang nakompromisong GitHub account upang mag-publish ng mga malisyosong bersyon ng malawakang ginagamit na mga library tulad ng keyv at flat-cache, na sama-samang bumubuo sa daan-daang milyong lingguhang pag-download. Ang nagpapabahala sa insidenteng ito ay ang mga malisyosong release ay may wastong pinagmulan ng SLSA, na nagpapakita sa kanila na ganap na lehitimo para sa mga automated security check.
Ang mga mananaliksik sa seguridad mula sa StepSecurity, Unit 42, Sonatype, at Aikido ay nagmamadaling suriin ang worm at pigilan ang pagkalat nito. Ang unang alon ay tumama sa jaredwray ecosystem, ngunit ang worm ay mabilis na lumawak sa iba pang mga maintainer at organisasyon, kabilang ang ServiceTitan, Qlik, at Deliveroo. Sa pinakabagong update, patuloy na tumataas ang bilang ng mga nakompromisong pakete, na may mga bagong impeksyon na lumilitaw bawat ilang minuto. Hindi lamang ito isa pang typo-squatting campaign; ito ay isang sopistikado at self-propagating worm na nagnanakaw ng mga kredensyal at ginagamit ang mga ito upang muling i-publish ang sarili nito sa buong npm registry.
Ang Pag-atake sa Isang Sulyap

Nagsimula ang pag-atake nang makompromiso ang GitHub account ni Jared Wray, ang tagapangasiwa ng keyv at mga kaugnay na pakete. Direktang ipinuwesto ng attacker ang mga malisyosong commit sa pangunahing branch at pinutol ang mga bagong release, na pagkatapos ay inilathala sa npm sa pamamagitan ng sariling pinagkakatiwalaang workflow ng pag-publish ng proyekto. Nangangahulugan ito na ang mga na-poisoned na bersyon ay may mga wastong SLSA provenance attestation , isang feature na inaasahan ng maraming team bilang security signal. Gayunpaman, pinapatunayan lamang ng provenance kung aling commit ang binuo, hindi kung awtorisado ang commit. Nagtanim din ang attacker ng mga pekeng test file at binagong release script upang matiyak na ang mga malisyosong bersyon ang magiging pinakabagong dist-tag.
Ang mga malisyosong pakete ay naglalaman ng isang preinstall script na nagpatakbo ng isang dropper na tinatawag na setup.mjs. Na-download ng dropper na ito ang lehitimong Bun JavaScript runtime mula sa GitHub at ginamit ito upang magpatakbo ng isang 727 KB na obfuscated payload na pinangalanang Math_Symbol.js. Ang payload ay isang kumpletong worm na kumukuha ng mga kredensyal mula sa sistema ng biktima, kabilang ang mga npm token, GitHub token, cloud credential, SSH key, at maging ang mga configuration ng AI tool. Pagkatapos ay inilabas nito ang data sa isang command-and-control server, na nilutas sa pamamagitan ng isang Ethereum smart contract—isang pamamaraan na kilala bilang EtherHiding.
Mga Apektadong Pakete at Saklaw

Ang unang alon ay tumatarget sa 11 pakete sa jaredwray ecosystem, kabilang ang keyv@6.0.0, flat-cache@6.1.24, at file-entry-cache@11.1.6. Ang mga paketeng ito ay mga transitive dependencies ng hindi mabilang na mga proyekto, mula sa ESLint hanggang sa cache-manager. Pagkatapos ay ginamit ng worm ang mga ninakaw na kredensyal upang muling i-publish ang 433 karagdagang pakete, na nagdala sa kabuuan sa 444 na pakete at 2,212 na bersyon sa loob ng unang ilang oras. Ang mga sumunod na ulat mula sa Sonatype at Aikido ay nagmumungkahi na ang bilang ay mas tumaas pa, na may mahigit 1,000 pakete na naapektuhan nang humupa na ang problema.
Ang ikalawang bugso ay tumama sa mga pakete mula sa mga organisasyon tulad ng @servicetitan, @qlik, @onereach, at @deliveroo, na nagpapahiwatig na ang worm ay lumipat mula sa mga pampublikong tool ng developer patungo sa mga pipeline ng pagbuo ng korporasyon. Gumawa rin ang mga umaatake ng mga pampublikong repositoryo na may mga pangalang may temang Dune upang i-stage ang mga na-exfilt na data, at nagtanim sila ng mga mekanismo ng persistence sa mga direktoryo ng .vscode at .claude upang muling mahawa ang mga developer na nagbukas ng mga nakompromisong repositoryo.
Paano Gumagana ang ChainDrop Worm
Ang attack chain ay isang masterclass sa pamumuhay mula sa lupa. Tumatakbo ang preinstall script bago pa man mai-install ang anumang dependency, kaya ang worm ay nagpapatakbo gamit ang mga pribilehiyo ng user. Sinusuri ng dropper kung mayroon nang Bun; kung wala, nagda-download ito ng isang lehitimong Bun binary mula sa GitHub. Ginagawa nitong mukhang hindi nakakapinsala ang trapiko sa network, dahil nagmumula ito sa github.com. Ang second-stage payload ay humihiwalay sa sarili bilang isang background process at sinisimulan ang maruming gawain nito.
Isa sa mga pinakanatatanging pamamaraan ay ang runner memory scraping . Ang payload ay nagpapatakbo ng isang Python helper na nagbabasa ng memorya ng proseso ng GitHub Actions Runner.Worker, na naghahanap ng mga sikretong ipinasok sa workflow. Pinapayagan nito itong makuha ang mga OIDC token at iba pang panandaliang kredensyal na kung hindi man ay mawawala kapag natapos na ang trabaho. Gumagamit din ang worm ng isang Russian locale kill switch, na lumalabas nang maayos kung ang wika ng system ay Russian, isang karaniwang taktika upang maiwasan ang pag-target sa mga bansang CIS.
Kasama sa payload ang isang kumpletong npm publishing engine. Inililista nito ang lahat ng package na maaaring i-publish ng biktima, dina-download ang kasalukuyang tarball, ini-inject ang malisyosong preinstall script at payload, at muling inilalathala ang package na may bumped na bersyon. Bumubuo pa nga ito ng sarili nitong Sigstore at SLSA provenance bundle, na ginagawang lehitimong ginawa ang mga malisyosong bersyon. Ang mekanismong ito ng self-propagation ang nagpahintulot sa worm na kumalat nang napakabilis sa mga hindi magkakaugnay na organisasyon.
Mga Tagapagpahiwatig ng Kompromiso
Kung na-install mo ang alinman sa mga apektadong bersyon, ipagpalagay na nakompromiso ang iyong system. Hanapin ang mga tagapagpahiwatig na ito:
- Mga file na pinangalanang setup.mjs, Math_Symbol.js, o math_init.js sa mga direktoryo ng node_modules.
- Mga hindi inaasahang Bun binary sa iyong system, lalo na kung hindi mo pa na-install ang Bun.
- Mga pagbabago sa .claude/settings.json o .vscode/tasks.json na tumutukoy sa setup.mjs.
- Mga papalabas na koneksyon sa npm-cache.com o awqhnjewqjkl.icu, o mga tawag sa Ethereum RPC para kontratahin ang 0xE1f2395ee43e45A1556EC6438a88c31B83493103.
- Mga bagong repositoryo ng GitHub na may mga paglalarawan tulad ng “Shai-Hulud: Here We Go Again” o mga pangalang may temang Dune.
Suriin din ang token monitor na naka-install pagkatapos ng exfiltration: ~/.local/bin/gh-token-monitor.sh, ~/.config/gh-token-monitor/, at systemd o LaunchAgent services. Ini-install ito ng worm upang parusahan ang credential rotation sa pamamagitan ng pag-trigger ng attacker payload kapag binawi ang ninakaw na token.
Pagpapagaan at Pagbawi
Kung apektado ka, kumilos agad. Una, ihiwalay ang makina at pangalagaan ang mga log. Pagkatapos, i-rotate ang lahat ng credential na nasa system, kabilang ang mga npm token, GitHub PAT, cloud key, at SSH key. Alisin ang token monitor bago i-rotate, dahil gagana ito kung babawiin mo ang token. Susunod, linisin ang iyong mga lockfile at i-pin sa mga kilalang-magandang bersyon. Para sa keyv, flat-cache, at file-entry-cache, gumamit ng mga override upang harangan ang mga malisyosong bersyon. Panghuli, i-reinstall gamit ang –ignore-scripts upang maiwasan ang anumang natitirang install hooks na maisagawa.
Para sa mga CI/CD pipeline, suriin ang mga log para sa anumang mga pag-install na nakalutas sa mga apektadong bersyon sa panahon ng exposure window. Ituring na nakompromiso ang anumang runner na nag-install ng poisoned package, at i-rotate ang lahat ng mga sikretong available para sa trabahong iyon. I-audit din ang iyong mga organisasyon sa GitHub para sa mga hindi inaasahang workflow na pinangalanang "Run Copilot" o mga artifact na pinangalanang "format-results", na mga senyales ng lihim na paglalaba ng worm.
Napakahalaga ng malalim na depensa. Gumamit ng mga egress allowlist sa mga CI runner para harangan ang dropper sa pagkuha kay Bun. Magpatupad ng mga cooldown policy na nangangailangan na ang mga package ay ilang araw na ang tanda bago ito gamitin. At huwag umasa lamang sa pinagmulan—hindi ito garantiya ng kaligtasan. Ang pinakamahusay na depensa ay ang bawasan ang paggamit ng mga install script at subaybayan ang mga hindi pangkaraniwang pag-uugali.
Habang nagpapatuloy ang imbestigasyon, patuloy pa ring lumalaki ang bilang ng mga apektadong pakete. Ang kakayahan ng worm na paikutin ang imprastraktura ng C2 nito sa pamamagitan ng isang transaksyon sa Ethereum ay ginagawa itong lalong matatag. Dapat subaybayan ng mga security team ang smart contract para sa mga pagbabago at manatiling updated sa mga bagong indicator. Sinimulan na ng npm registry ang pag-alis ng mga malisyosong bersyon, ngunit patuloy pa rin ang paglilinis.
Ang insidenteng ito ay isang malinaw na paalala na ang open-source ecosystem ay kasing-ligtas lamang ng pinakamahina nitong kawing. Ang isang nakompromisong maintainer account ay maaaring magdulot ng malawakang pag-atake sa supply chain. Ang ChainDrop worm ay isang wake-up call para sa mga developer at organisasyon na magpatibay ng mas matibay na mga kasanayan sa seguridad, kabilang ang multi-factor authentication, least-privilege tokens, at patuloy na pagsubaybay sa mga dependency.