Când un instrument utilizat de mii de dezvoltatori devine punctul de plecare al unei scurgeri majore, efectele se propagă rapid în întregul ecosistem. Este vorba despre compromiterea lanțului de aprovizionare a pachetului Nx pe NPM, unde o versiune malițioasă publicată pe 26 august 2025 a dus la expunerea a mii de tokenuri și secrete din repository-uri, afectând dezvoltatori și organizații la scară globală.
Nx este un build system și manager de monorepo foarte folosit în comunitatea JavaScript/TypeScript, având peste 5, 5 milioane de descărcări săptămânale. Pe 26 august, atacatorii au exploatat un workflow GitHub Actions vulnerabil din repository-ul oficial pentru a publica pe NPM o versiune troianizată care conținea un script post-install numit telemetry.js. Acest script a funcționat ca un furt de acreditări pe Linux și macOS, încercând să colecteze tokenuri GitHub, tokenuri NPM, chei SSH, fișiere .env, portofele cripto și altele, apoi încărcând aceste secrete în repository-uri publice denumite s1ngularity-repository.
Ceea ce a făcut atacul deosebit, și îngrijorător, a fost faptul că malware-ul a folosit instrumente CLI pentru platforme de inteligență artificială, precum Claude, Q și Gemini, pentru a rula prompturi LLM care căutau și extrăgeau credențiale și secrete din fișiere locale. Cercetătorii Wiz au demonstrat că prompturile s-au modificat pe parcursul atacului, semnalând o rafinare continuă a metodei: au apărut role-prompting și variații de specificitate care au afectat rata de succes. De exemplu, includerea expresiei penetration testing a determinat respingeri din partea unor LLM-uri, reducând astfel eficiența în acele cazuri.
Evaluarea post-incident realizată de Wiz indică un bilanț dur: 2.180 de conturi compromise și 7.200 de repository-uri afectate, măsurate în trei etape. În prima etapă, între 26 și 27 august, pachetele backdoor au atins direct 1.700 de utilizatori și au scurs peste 2.000 de secrete unice, precum și aproximativ 20.000 de fișiere de pe sistemele compromise. GitHub a intervenit și a șters repository-urile create de atacatori după aproximativ opt ore, însă datele fuseseră deja copiate.
În a doua etapă, între 28 și 29 august, atacatorii au folosit tokenurile GitHub obținute pentru a face publice repository-uri private și pentru a le redenumi astfel încât să conțină s1ngularity, ceea ce a dus la compromiterea a circa 480 de conturi suplimentare, majoritatea organizații, și la expunerea a aproximativ 6.700 de repository-uri private. În a treia etapă, începută pe 31 august, atacatorii s-au concentrat pe o organizație țintă, folosind două conturi compromise pentru a publica încă 500 de repository-uri private.
Echipa Nx a explicat pe GitHub că breșa a pornit de la o injecție în titlul unui pull request, combinată cu folosirea nesigură a pull_request_target. Această combinație a permis rularea de cod arbitrar cu permisiuni extinse, declanșând pipeline-ul de publish și extrăgând tokenul de publicare NPM. Ca răspuns, pachetele malițioase au fost scoase, tokenurile compromise au fost revocate și rotate, iar autentificarea în doi pași a fost implementată pentru toate conturile de publisher. Pentru a reduce riscurile viitoare, proiectul a adoptat modelul Trusted Publisher al NPM, care elimină publicarea bazată pe tokenuri, și a introdus aprobarea manuală pentru workflow-urile declanșate de pull request-uri.
Datele din raportul Wiz arată cât de extins poate fi blast radius atunci când un pachet central este compromis: mii de conturi și repository-uri afectate, secrete încă valide care pot fi reutilizate și tehnici tot mai avansate care implică instrumente AI. Faptul că malware-ul a ajustat prompturile și a testat abordări diferite sugerează o maturizare a atacurilor care combină vectori tradiționali cu capabilități AI pentru a automatiza și amplifica exfiltrarea.
Nx, GitHub și comunitatea dezvoltatorilor au luat măsuri concrete de remediere: revocări de tokenuri, trecerea la modele de publicare mai sigure și politici mai stricte pentru workflow-uri. Totuși, rămâne un semnal de alarmă pentru proiectele open-source și companii: controlul fluxului CI/CD, rigurozitatea în revizuirea PR-urilor și limitarea privilegiilor automate sunt vitale. În același timp, episodul demonstrează cum instrumentele populare pot deveni ținte atractive pentru actori care îmbină tehnici clasice cu prompt engineering aplicat la LLM-uri.
telemetry.js a reprezentat nucleul tehnic al atacului și a provocat expuneri masive între 26–31 august 2025, inclusiv 2.180 de conturi și 7.200 de repository-uri. Aceste cifre subliniază riscul utilizării la scară largă a dependențelor third-party și importanța unor măsuri precum Trusted Publisher și autentificarea în doi pași. Un exemplu clar de reflecție este că o eroare de configurare a unui workflow GitHub Actions a permis escaladarea în lanț până la exfiltrarea tokenului NPM și publicarea pachetelor malițioase. Ce măsuri de securitate aplicați în proiectele voastre pentru a preveni astfel de scenarii?

serios, cine configureaza CI asa?
au dat tokenul de publish pe tava. si lumea instaleaza pachete fara sa se gandeasca.
mi se pare horror ca un script post-install sa poata scana .env, chei ssh, portofele si sa le urce public.
pt mine e clar: restrictii la workflow-uri, rotire token automat, 2FA obligatoriu, si trusted publishers.
da, e multa paranoia ok, dar mai bine asa decat sa-ti dispara cheile. vezi sa nu mai foloseasca cineva pull_request_target prost setat.
probabil multi inca nu verifica semnaturile pachetelor. CHECK IT.
bleah, îmi aduce aminte de vremurile când totul era mai simplu în repo-urile noastre și nu te trezeai cu chestii care-ți furau viața din .env; aveam încredere în tool-uri, le puneam ca pe niște prieteni, azi parcă mi se pare că meriți mai multă grijă…
am pierdut chei, am rotit tokenuri, am stat nopți să refacem accesul la org-uri – daaa, pare paranoia, dar e real. și parcă doare că fix lucrurile care ne-au făcut productivi ne-au și trădat, vezi să nu la următorul update, eu personal am început să verific workflow-urile manual, small steps: secrets în vault, 2FA for everything, review-ul PR-urilor de la oameni în care chiar am încredere.
oricum, dacă folosești Nx sau altceva mare, fă backup la ce contează, scoate tokenurile din ciudățenii automate și nu mai lăsa publish-ul să ruleze singur; pare bleah, dar e ce am învățat pe pielea mea.