ChainDrop: Viermele npm care a otrăvit sute de pachete în câteva ore

Ultima actualizare: 08/11/2026
  • Pe 4 august 2026, un vierme autopropagator numit ChainDrop a compromis peste 400 de pachete npm, inclusiv keyv și flat-cache, în decurs de patru ore.
  • Atacul a folosit acreditări GitHub furate pentru a publica versiuni rău intenționate cu proveniență validă, făcându-le imposibil de distins de versiunile legitime.
  • Sarcina utilă fură credențiale, exfiltrează datele prin C2 bazat pe Ethereum și republică pachetele infectate folosind token-uri npm furate.
  • Organizațiile trebuie să verifice fișierele de blocare, să rotească acreditările și să elimine mecanismele de persistență pentru a atenua impactul.

logo-ul NPM

Ecosistemul npm se confruntă cu unul dintre cele mai agresive atacuri asupra lanțului de aprovizionare văzute vreodată. Pe 4 august 2026, un vierme numit ChainDrop a spart registrul, otrăvind sute de pachete în mai puțin de patru ore. Atacul a folosit un cont GitHub compromis pentru a publica versiuni malițioase ale unor biblioteci utilizate pe scară largă, precum keyv și flat-cache, care împreună reprezintă sute de milioane de descărcări săptămânale. Ceea ce face ca acest incident să fie deosebit de alarmant este faptul că versiunile malițioase aveau o proveniență SLSA validă, ceea ce le face să pară complet legitime pentru verificările automate de securitate.

Cercetătorii în domeniul securității de la StepSecurity, Unit 42, Sonatype și Aikido s-au întrecut în încercarea de a analiza viermele și de a-i limita răspândirea. Valul inițial a lovit ecosistemul jaredwray, dar viermele s-a extins rapid la alți mentenatori și organizații, inclusiv ServiceTitan, Qlik și Deliveroo. Începând cu ultima actualizare, numărul de pachete compromise continuă să crească, cu noi infecții care apar la fiecare câteva minute. Aceasta nu este doar o altă campanie de typo-squatting; este un vierme sofisticat, auto-propagat, care fură acreditări și le folosește pentru a se republica în registrul npm.

Atacă la lanțul de alimentare ChainDrop npm
Articol asociat:
Atac ChainDrop: Peste 435 de pachete npm compromise de un vierme al lanțului de aprovizionare

Atacul dintr-o privire

alertă de securitate npm

Atacul a început atunci când contul GitHub al lui Jared Wray, responsabil cu întreținerea keyv și a pachetelor conexe, a fost compromis. Atacatorul a împins commit-urile rău intenționate direct către ramura principală și a tăiat noile versiuni, care au fost apoi publicate pe npm prin intermediul fluxului de lucru de publicare propriu al proiectului. Aceasta însemna că versiunile otrăvite aveau atestări de proveniență SLSA valide , o caracteristică pe care multe echipe se bazează ca semnal de securitate. Cu toate acestea, proveniența dovedește doar ce commit a fost construit, nu dacă commit-ul a fost autorizat. Atacatorul a plantat, de asemenea, fișiere de testare false și scripturi de lansare modificate pentru a se asigura că versiunile rău intenționate deveneau cea mai recentă dist-tag.

Pachetele rău intenționate conțineau un script de preinstalare care executa un dropper numit setup.mjs. Acest dropper descărca runtime-ul legitim Bun JavaScript de pe GitHub și îl folosea pentru a rula o utilă ofuscată de 727 KB numită Math_Symbol.js. Utilitatea era un vierme complet care colecta date de autentificare din sistemul victimei, inclusiv token-uri npm, token-uri GitHub, date de autentificare în cloud, chei SSH și chiar configurații de instrumente AI. Apoi exfiltra datele către un server de comandă și control, rezolvat printr-un contract inteligent Ethereum - o tehnică cunoscută sub numele de EtherHiding.

Pachetele afectate și domeniul de aplicare

listă de pachete npm

Valul inițial a vizat 11 pachete din ecosistemul jaredwray, inclusiv keyv@6.0.0, flat-cache@6.1.24 și file-entry-cache@11.1.6. Aceste pachete sunt dependențe tranzitive ale nenumărate proiecte, de la ESLint la cache-manager. Viermele a folosit apoi acreditări furate pentru a republica 433 de pachete suplimentare, aducând totalul la 444 de pachete și 2,212 versiuni în primele câteva ore. Rapoarte ulterioare de la Sonatype și Aikido sugerează că numărul a crescut și mai mult, cu peste 1,000 de pachete afectate până când lucrurile s-au așezat.

Al doilea val a afectat pachete de la organizații precum @servicetitan, @qlik, @onereach și @deliveroo, indicând faptul că viermele se mutase de la instrumentele publice pentru dezvoltatori la canalele de compilare corporative. Atacatorii au creat, de asemenea, depozite publice cu nume tematice Dune pentru a stoca datele exfiltrate și au instalat mecanisme de persistență în directoarele .vscode și .claude pentru a reinfecta dezvoltatorii care au deschis depozitele compromise.

Cum funcționează viermele ChainDrop

Lanțul de atac este o adevărată lecție în ceea ce privește traiul de pe urma profitului comun. Scriptul de preinstalare rulează înainte de instalarea oricărei dependențe, astfel încât viermele se execută cu privilegiile utilizatorului. Dropper-ul verifică dacă Bun este deja prezent; dacă nu, descarcă un fișier binar Bun legitim de pe GitHub. Acest lucru face ca traficul de rețea să pară inofensiv, deoarece provine de pe github.com. Sarcina utilă din a doua etapă se detașează apoi ca proces în fundal și își începe munca murdară.

Una dintre cele mai distinctive tehnici este extragerea memoriei runnerului . Sarcina utilă rulează un helper Python care citește memoria procesului GitHub Actions Runner.Worker, căutând secrete injectate în fluxul de lucru. Acest lucru îi permite să captureze token-uri OIDC și alte acreditări efemere care altfel ar dispărea la finalizarea jobului. Viermele folosește, de asemenea, un kill switch pentru setările regionale rusești, ieșind fără probleme dacă limba sistemului este rusă, o tactică comună pentru a evita vizarea țărilor CSI.

Sarcina utilă include un motor complet de publicare npm. Acesta enumeră toate pachetele pe care victima le poate publica, descarcă fișierul tarball curent, injectează scriptul de preinstalare și sarcina utilă malițioase și republică pachetul cu o versiune modificată. Generează chiar și propriile pachete de proveniență Sigstore și SLSA, făcând ca versiunile malițioase să pară construite în mod legitim. Acest mecanism de auto-propagare este cel care a permis viermelui să se răspândească atât de rapid între organizații independente.

Indicatori de compromis

Dacă ați instalat oricare dintre versiunile afectate, presupuneți că sistemul dvs. este compromis. Căutați acești indicatori:

  • Fișierele numite setup.mjs, Math_Symbol.js sau math_init.js din directoarele node_modules.
  • Binare Bun neașteptate pe sistemul dvs., mai ales dacă nu ați instalat niciodată Bun.
  • Modificări la fișierele .claude/settings.json sau .vscode/tasks.json care fac referire la setup.mjs.
  • Conexiuni de ieșire către npm-cache.com sau awqhnjewqjkl.icu sau apeluri Ethereum RPC către contractul 0xE1f2395ee43e45A1556EC6438a88c31B83493103.
  • Noi repozitorii GitHub cu descrieri precum „Shai-Hulud: Here We Go Again” sau nume cu tematică Dune.

Verificați și monitorul de token-uri instalat după exfiltrare: ~/.local/bin/gh-token-monitor.sh, ~/.config/gh-token-monitor/ și serviciile systemd sau LaunchAgent. Viermele instalează acest sistem pentru a pedepsi rotația credențialelor prin declanșarea unei sarcini utile de atacator atunci când token-ul furat este revocat.

Atenuare și recuperare

Dacă ești afectat, acționează rapid. Mai întâi, izolează mașina și păstrează jurnalele. Apoi, schimbă toate acreditările prezente în sistem, inclusiv token-urile npm, PAT-urile GitHub, cheile cloud și cheile SSH. Elimină monitorul de token-uri înainte de schimb, deoarece se va declanșa dacă revoci token-ul. Apoi, curăță fișierele de blocare și fixează-le la versiunile cunoscute ca fiind valide. Pentru keyv, flat-cache și file-entry-cache, folosește override-uri pentru a bloca versiunile rău intenționate. În cele din urmă, reinstalează cu –ignore-scripts pentru a preveni executarea oricăror hook-uri de instalare persistente.

Pentru conductele CI/CD, verificați jurnalele pentru orice instalări care au rezolvat versiunile afectate în timpul ferestrei de expunere. Tratați orice executant care a instalat un pachet otrăvit ca fiind compromis și rotiți toate secretele disponibile pentru acel job. De asemenea, auditați organizațiile GitHub pentru fluxuri de lucru neașteptate numite „Run Copilot” sau artefacte numite „format-results”, care sunt semne ale spălării secretelor de către vierme.

Apărarea în profunzime este crucială. Folosește liste de permisiuni de ieșire pe rulanții CI pentru a bloca dropper-ul să preia Bun. Implementează politici de cooldown care impun ca pachetele să aibă o vechime de câteva zile înainte de adoptare. Și nu te baza exclusiv pe proveniență - aceasta nu este o garanție a siguranței. Cea mai bună apărare este minimizarea utilizării scripturilor de instalare și monitorizarea comportamentului anormal.

Pe măsură ce investigația continuă, numărul de pachete afectate este în continuă creștere. Capacitatea viermelui de a-și roti infrastructura C2 printr-o singură tranzacție Ethereum îl face deosebit de rezistent. Echipele de securitate ar trebui să monitorizeze contractul inteligent pentru modificări și să fie la curent cu noile indicatori. Registrul npm a început să elimine versiunile rău intenționate, dar curățarea este în curs de desfășurare.

Acest incident este o reamintire puternică a faptului că ecosistemul open-source este la fel de sigur ca veriga sa cea mai slabă. Un singur cont de întreținător compromis poate duce la un atac masiv asupra lanțului de aprovizionare. Viermele ChainDrop este un semnal de alarmă pentru dezvoltatori și organizații, pentru a adopta practici de securitate mai puternice, inclusiv autentificarea multi-factor, token-uri cu privilegii minime și monitorizarea continuă a dependențelor.

Postări asemănatoare: