Când adaugi într-un proiect un pachet npm, uneori nu poți ști dacă primești ajutorul dorit sau o capcană care-ți fură cheile digitale. Cercetătorii de la Socket au identificat zece pachete malițioase încărcate pe npm pe 4 iulie, care imitau proiecte cunoscute și, după instalare, descărcau un component de tip information stealer ce colectează date sensibile de pe Windows, Linux și macOS.
Atacul a folosit typosquatting: pachete cu denumiri foarte apropiate de cele legitime, precum typescriptjs, deezcord.js, dizcordjs, dezcord.js, etherdjs, ethesjs, ethetsjs, nodemonjs, react-router-dom.js și zustand.js. Scopul? Să prindă dezvoltatori grăbiți care caută librării populare precum TypeScript, discord.js, ethers.js, nodemon, react-router-dom sau zustand și să selecteze din greșeală variantele infectate. Pachetele au acumulat aproape 10.000 de descărcări înainte de a fi sesizate, iar cercetătorii afirmă că ele au trecut neobservate mult timp din cauza unor straturi complexe de obfuscare care au păcălit analizele statice obișnuite.
Mecanismul de infectare e ingenios și ușor de trecut cu vederea: la instalare se declanșează automat un script postinstall care deschide un terminal compatibil cu sistemul detectat, rulează un fișier app.js în afara jurnalului vizibil al instalării și curăță rapid ecranul pentru a nu lăsa urme evidente. app.js este loaderul malware-ului și folosește patru niveluri de obfuscare: un wrapper eval care se decodează singur, decriptare XOR cu o cheie generată dinamic, payload codificat URL și un control-flow puternic obfuscat. Pentru a părea legitim, scriptul afișează chiar un CAPTCHA fals în terminal, construit din ASCII, o păcăleală vizuală simplă, dar eficace.
După ce obține informații despre geolocația victimei și fingerprint-ul sistemului, loaderul contactează serverul de command and control al atacatorilor și descarcă un binar specific platformei, un executabil de circa 24 MB ambalat cu PyInstaller. Acest infostealer vizează stocările de credențiale: Windows Credential Manager, macOS Keychain, Linux SecretService, libsecret și KWallet, precum și profilurile și datele din browserele bazate pe Chromium și Firefox, parole salvate, cookie-uri de sesiune și altele. De asemenea caută chei SSH în locații uzuale și încearcă să extragă tokenuri OAuth, JWT și alte tokenuri API. Datele furate sunt arhivate și încărcate pe serverul atacatorilor la adresa IP 195.133.79.43, trecând mai întâi printr-un stadiu temporar în /var/tmp sau /usr/tmp.
Pachetele identificate erau încă disponibile pe npm la momentul raportării, deși Socket le-a notificat deja. Recomandarea pentru cei care au instalat oricare dintre ele este clară: eliminați instalările compromise și schimbați imediat toate parolele și tokenurile de acces, deoarece există o probabilitate mare de compromitere. Când căutați pachete pe npm sau alte registre open-source, verificați atent numele, publicațiile autorilor și sursele oficiale ale pachetelor înainte de a le instala. Un mic gest de precauție economisește mult timp, și nervi, mai târziu.
Numele pachetelor afectate, data încărcării (4 iulie) și dimensiunea binarului descărcat (aproximativ 24 MB) sunt detalii utile pentru oricine dorește să verifice rapid un proiect sau o instalare suspectă. Totodată, lista componentelor vizate, TypeScript, discord.js, ethers.js, nodemon, react-router-dom, zustand, indică ce urmăreau atacatorii: pachete populare folosite frecvent în dezvoltarea web și aplicații, ceea ce crește riscul de victimizare prin greșeli de tastare sau neatenție.
195.133.79.43 este adresa IP folosită pentru exfiltrare și poate fi un punct de plecare pentru scanări și blocări la nivel de rețea. Dacă ai folosit oricare din numele din listă, tratează proiectele ca zone de risc: revizuiește scripturile, verifică fișierele rulate la postinstall și schimbă cheile, parolele și tokenurile relevante. Un exemplu concret: dacă ai folosit nodemonjs sau react-router-dom.js, resetează tokenurile de acces la Git, credentialele din browsere și cheile SSH folosite pentru repo-uri.
Acțiunea atacatorilor subliniază două teme mai largi: importanța verificării surselor în ecosistemele open-source și necesitatea implementării unor mecanisme automate care detectează comportamente suspicioase la instalare, nu doar prin verificări statice ale numelui sau semnăturii. Pentru dezvoltatori, asta înseamnă nu doar atenție la ce se instalează, ci și politici practice: verificare a semnăturilor pachetelor, restricționarea permisiunilor scripturilor postinstall când este posibil și rotirea regulată a secretelor utilizate în proiecte.
Dacă ai instalat vreunul dintre aceste pachete, verifică fișierele app.js sau orice script postinstall, schimbă parolele și tokenurile (inclusiv cheile SSH) și analizează traficul către 195.133.79.43 pentru semne de exfiltrare. Ce măsuri concrete ai luat deja pentru a verifica pachetele npm din proiectele tale?

Fii primul care comentează