Jscrambler npm pakotne apdraudēta: ļaunprātīgas versijas izplata informācijas zagļus izstrādātāju datoros

Pēdējā atjaunošana: 07/14/2026
  • Izmantojot kompromitētus npm akreditācijas datus un Rust balstītu informācijas zagli, tika publicētas piecas ļaunprātīgas jscrambler npm pakotnes versijas (8.14.0, 8.16.0, 8.17.0, 8.18.0, 8.20.0).
  • Ļaunprogrammatūra tiek izpildīta, izmantojot pirmsinstalēšanas āķi vai izpildlaikā, mērķējot uz mākoņa akreditācijas datiem, kriptovalūtas makiem, pārlūkprogrammas datiem, mākslīgā intelekta rīku konfigurācijām un citiem elementiem, izmantojot noturības mehānismus operētājsistēmās Windows un macOS.
  • Drošības firmas, piemēram, Socket, StepSecurity, SafeDep un JFrog, uzbrukumu atklāja dažu minūšu laikā, taču ļaunprātīgās pakotnes palika npm serverī stundām ilgi; JFrog identificēja vērtumu kā IronWorm ar pašizplatīšanās spējām.
  • Izstrādātājiem tiek ieteikts jaunināt uz 8.22.0 versiju, mainīt visus noslēpumus un auditēt sistēmas, lai noteiktu kompromitēšanas pazīmes, jo zaglis var izplatīties arī ar zagtiem npm žetoniem.

Jscrambler npm piegādes ķēdes uzbrukuma ilustrācija

2026. gada 11. jūlijā uzbrucējs, izmantojot nozagtus publicēšanas akreditācijas datus, lai izplatītu vairākas ļaunprātīgas versijas, nolaupīja npm pakotni jscrambler, kas ir komerciāls JavaScript kodēšanas slēpšanas un drošības rīks. Incidents ilga aptuveni trīs stundas, un piecās versijās — 8.14.0, 8.16.0, 8.17.0, 8.18.0 un 8.20.0 — bija iekļauta starpplatformu informācijas zagļa programma, kas aktivizējas nekavējoties pēc instalēšanas vai importēšanas. Drošības uzņēmumi, tostarp Socket, StepSecurity, SafeDep un JFrog, dažu minūšu laikā atzīmēja apdraudējumu, taču pakotnes palika lejupielādējamas vairākas stundas, un 8.14.0 versija nekad netika noņemta no reģistra.

Uzbrukums bija vērsts pret programmatūras piegādes ķēdes visneaizsargātāko punktu: izstrādātāja datoru. Atšķirībā no daudziem npm incidentiem, kas izmanto izpildlaika kodu, šajā tika izmantots iepriekšinstalēšanas āķis pirmajās trīs ļaunprātīgajās versijās, kas nozīmē vienkārši palaist npm install jscrambler@8.14.0 bija pietiekami, lai nomestu un izpildītu vietējo bināro failu. Vēlākās versijās (8.18.0 un 8.20.0) nomešanas rīks tika pārvietots uz pakotnes galveno kodu, tāpēc pat --ignore-scripts neapturētu lietderīgo slodzi. Jscrambler apstiprināja, ka pārkāpums aprobežojās ar tā Code Integrity produktu, un kopš tā laika ir atsaucis apdraudētās akreditācijas datus, nostiprinājis savu procesu plūsmu un izlaidis tīru 8.22.0 versiju.

Uzbrukuma vektors: nozagta akreditācija un slēpta slodze

Ļaunprātīgās versijas tika publicētas likumīgā uzturētāja kontā, apejot projekta parasto GitHub balstīto izlaidumu plūsmu. Nevienai no bojātajām versijām nebija atbilstoša apstiprinājuma, taga vai pull pieprasījuma. publiskajā repozitorijā, saskaņā ar StepSecurity un SafeDep. Pakotņu atšķirības starp 8.13.0 un 8.14.0 atklāja divus jaunus failus: dist/setup.js, neliels iekrāvējs un dist/intro.js, 7.8 MB konteiners, kurā ir trīs ar gzip saspiesti vietējie binārie faili operētājsistēmai Windows, macOS un Linux. Instalēšanas laikā setup.js atlasa atbilstošo bināro failu, ieraksta to ar nejaušu nosaukumu sistēmas pagaidu direktorijā, atzīmē to kā izpildāmu un palaiž ar paslēptu izvadi.

Socket atklāja pirmo ļaunprātīgo laidienu tikai sešas minūtes pēc tam, kad tas iekļuva reģistrā. Pēc tam uzbrucējs nākamo trīs stundu laikā izlaida vēl četras versijas , katra no tām nesa to pašu Rust kompilēto informācijas zagli. JFrog vēlāk identificēja vērtumu kā IronWorm, zagli, ko tas bija dokumentējis mēnesi iepriekš, un saistīja to ar Shai-Hulud līniju. Ļaunprogrammatūras komandu un kontroles (C2) infrastruktūra ietvēra divas cietkodā ierakstītas IP adreses (37.27.122.124 un 57.128.246.79) un Tor tīkla adreses, ko novēroja StepSecurity izpildlaika uzraudzība.

Ko ļaunprogrammatūra mērķē

Informācijas zagļa mērķu saraksts ir plašs un īpaši vērsts uz izstrādātājiem. Tas meklē mākoņa akreditācijas datus no AWS, Azure un Google Cloud , tostarp metadatu galapunktus, ko izmanto CI pārvaldītāji. Tas meklē arī kriptovalūtas makus un sākuma frāzes no MetaMask, Phantom, Exodus un citiem, kā arī Bitwarden paroļu pārvaldnieka vafeļu. Tiek apkopotas arī pārlūkprogrammā saglabātās paroles, sīkfaili un sesijas žetoni no Discord, Slack, Telegram un Steam. Jāatzīmē, ka ļaunprogrammatūra uzbrūk konfigurācijas failiem mākslīgā intelekta kodēšanas rīkiem, piemēram, Claude Desktop, Cursor, Windsurf, VS Code un Zed, kur bieži atrodas API atslēgas un Model Context Protocol (MCP) servera akreditācijas dati.

JFrog analīze paplašināja mērķu sarakstu, pievienojot VPN konfigurācijas failus, 1Password glabātuves, Tor slēptās pakalpojumu atslēgas un sarkanās komandas ietvaru, piemēram, Metasploit, Sliver un Havoc, instalēšanas mapes. Šis pēdējais mērķis liek domāt, ka uzbrucēji bija vērsušies arī pret drošības pētniekiem un ielaušanās testētājiem.Ļaunprogrammatūra izmanto spēcīgu katras virknes obfuskāciju, izmantojot ChaCha20-Poly1305 šifrēšanu, kas apgrūtina reverso inženieriju. Masveida eksfiltrācijai tā augšupielādē nozagtos datus tieši uz temp.sh, publisku failu mitinātāju, izmantojot savienojumu, kas nopludina upura īsto IP adresi.

Neatlaidība un uzlabotas spējas

Šī slodze sniedzas tālāk par vienkāršu zādzību. Linux sistēmā tā savieno kodola BPF bibliotēku un var ielādēt eBPF programmu tieši kodola atmiņā, nodrošinot piekļuvi daudz plašākai aizsardzībai nekā lietotāja telpas faili. Gan StepSecurity, gan SafeDep ir atzīmējuši šo eBPF iespēju , lai gan tās precīza funkcija joprojām tiek analizēta. Operētājsistēmās Windows un macOS zaglis pievieno pretkļūdu pārbaudes un noturības mehānismus: slēptu Windows ieplānotu uzdevumu, kas iestatīts uz atkārtotu palaišanu katru minūti, un macOS LaunchAgent, kas atkārtoti ielādējas pēc pieteikšanās. C2 informācija paliek šifrēta binārajā failā un nekad netiek parādīta statiskajā analīzē.

JFrog atklāja arī pašpavairošanas rutīnu. Ļaunprogrammatūra meklē npm žetonus vides mainīgajos un failos, piemēram, .npmrc, pārbauda tos reģistrā, izvēlas augstas lejupielādes pakotnes, ievieto ļaunprātīgu setup.mjs iepriekšinstalē skriptu savos tarball failos un publicē inficētās versijas tieši registry.npmjs.org izmantojot neapstrādātu HTTP PUT — nekad neizsaucot npm klientu. Lai gan JFrog apstiprināja kodā esošo rutīnu, tas neapstiprināja, ka tārpam izdevās kaut ko publicēt, izmantojot nozagtu tokenu. Tomēr sekas ir skaidras: jebkurai mašīnai, kurā darbojas skartā versija, npm tokeni varētu tikt izmantoti, lai tālāk izplatītu uzbrukumu.

Atbilde un sakopšana

Pēc paziņojuma saņemšanas Jscrambler rīkojās ātri. Uzņēmums noraidīja ļaunprātīgo versiju atbalstu un izlaida 8.15.0, vēlāk 8.22.0 kā ieteicamo tīro versiju. Tomēr 8.14.0 versija nekad netika izgūta no npm , kas nozīmē, ka jebkurš tai piesprausts bloķēšanas fails vai komanda joprojām instalē zagli. Uzņēmuma paziņojumā bija uzskaitītas četras ļaunprātīgās versijas (8.14.0, 8.16.0, 8.17.0, 8.20.0), bet netika iekļauta 8.18.0, ko iekļauj gan Socket, gan JFrog. Jscrambler norāda, ka npm pašlaik neziņo par ļaunprātīgo versiju lejupielādi, taču brīdina, ka skaitlis atpaliek par vairākām stundām un joprojām tiek pārbaudīts.

Izstrādātājiem tūlītējās darbības ir skaidras: jaunināt uz 8.22.0 versiju vai piespraust 8.13.0 versiju un auditēt visas sistēmas, kas, iespējams, ir izvilkušas ļaunprātīgās versijas. Pārbaudiet bloķēšanas failus un pakotņu pārvaldnieka žurnālus, lai atrastu jscrambler@8.14.0 un līdzīgas versijasun meklējiet CI ierakstus par dist/setup.js izpilde no 11. jūlija. Operētājsistēmā Windows pārbaudiet, vai uzdevumu plānotājā nav slēptu uzdevumu; operētājsistēmā macOS pārbaudiet ~/Library/LaunchAgents nepazīstamiem plistiem. Ielādētājs ievieto savu lietderīgo slodzi zem nejauša nosaukuma pagaidu direktorijā, tāpēc nav fiksēta binārā nosaukuma, ko meklēt, izmantojot grep — tā vietā instalēšanas laika zīmogi tiek kārtoti atbilstoši mezgla bērnu procesiem un pagaidu direktorija izpildei.

Kompromisa rādītāji

Drošības firmas ir publicējušas detalizētus rādītājus. Ļaunprātīgo pakotņu versijas ir jscrambler@8.14.0, 8.16.0, 8.17.0, 8.18.0 un 8.20.0Pievienoto failu un atspiesto vērtumu SHA-256 heši ir pieejami no Socket un StepSecurity. Izpildes laikā novērotie tīkla galapunkti ietver divus C2 IP (37.27.122.124 un 57.128.246.79) un Tor infrastruktūru (check.torproject.org, archive.torproject.org). Resursdatorā esošie artefakti ietver nejauši nosauktu slēptu failu sistēmas pagaidu direktorijā (formā .{random} or .{random}.exe operētājsistēmā Windows), kā arī slēpts Windows ieplānotais uzdevums vai macOS LaunchAgent saglabāšanai. JFrog arī atzīmē temp.sh kā datu eksfiltrācijas galapunkts un setup.mjs kā izplatīšanas skripts.

Ja palaidāt kādu skarto versiju, izturieties pret katru noslēpumu, pie kura tā varēja nonākt, kā pret nozagtu. Rotēt mākoņa atslēgas, npm un GitHub žetonus, AI rīku un MCP API atslēgas, atcelt Discord, Slack, pārlūkprogrammas un Bitwarden sesijas un pārvietot jebkuru kriptovalūtu no makiem šajā resursdatorā. Bloķēt divas C2 IP adreses un uzraudzīt neparastus izejošos savienojumus ar Tor vai temp.shZaglis savu darbu veic dažu sekunžu laikā pēc instalēšanas, tāpēc pat īslaicīga iedarbība ir pietiekama, lai kompromitētu akreditācijas datus.

Šis incidents ir skarbs atgādinājums, ka npm ekosistēma joprojām ir galvenais piegādes ķēdes uzbrukumu mērķis. Neskatoties uz to, ka npm 12 tika piegādāts ar noklusējuma instalēšanas skriptiem, kas bija izslēgti no 8. jūlija., vecāki klienti tos joprojām palaiž automātiski, un jaunākās ļaunprātīgās versijas pilnībā apieja šo aizsardzību. Jscrambler uzbrukums, kas notika tikai dažas dienas pēc Injective SDK kompromitēšanas, liecina, ka uzbrucēji arvien biežāk vēršas pret izstrādātāju rīkiem un pašiem drošības pakalpojumu sniedzējiem. Mācība ir skaidra: jebkura mašīna, kas darbojas npm install ar īstiem akreditācijas datiem ir uzticēšanās piegādes ķēdei, ka viens nozagts tokens dažu minūšu laikā var kļūt naidīgs.

Related posts: