Gecompromitteerde jscrambler 8.14.0 npm-release laat roest Infostealer vallen tijdens installatie

Het jscrambler npm-pakket is gecompromitteerd en door simpelweg de 8.14.0-release te installeren, wordt er een infostealer op uw machine uitgevoerd. De kwaadaardige versie, gepubliceerd op 11 juli 2026, heeft een pre-install hook die een native binary dropt en uitvoert, elk één build voor Windows, macOS en Linux.

Socket markeerde de release zes minuten nadat deze was gepubliceerd. Als u of een van uw bouwsystemen het in dat venster heeft opgehaald, is de payload al uitgevoerd met de toegang die uw installatieproces ook had.

Niets hiervan zit in de eerdere release, 8.13.0. De pakketdiff toont twee nieuwe bestanden onder dist/: setup.js, een kleine lader en intro.js. Ondanks de naam is intro.js geen JavaScript, maar een container van grofweg 7,8 MB met daarin drie met gzip gecomprimeerde native binaire bestanden, elk één voor Linux, Windows en macOS.

Bij de installatie kiest setup.js het binaire bestand voor het hostbesturingssysteem, schrijft het onder een willekeurige naam in de tijdelijke map van het systeem, markeert het als uitvoerbaar bestand en start het losstaand met de uitvoer verborgen.

De toegevoegde bestanden bevinden zich in het gepubliceerde pakket, maar nergens in de openbare bron van jscrambler. StepSecurity en SafeDep hebben beide de release opgehaald en geanalyseerd, en beide rapporteren geen overeenkomende commit-, tag- of pull-aanvraag voor 8.14.0 in de GitHub-repository.

De nieuwste tag is nog steeds 8.13.0. De versie werd rechtstreeks naar npm gepusht onder een legitiem beheerdersaccount, waarbij de normale releasestroom van het project werd omzeild. Dat wijst op een gecompromitteerd npm-account of build-pijplijn. Welke van de twee is nog niet vastgesteld.

De payload is een Rust-infostealer, gebouwd voor alle drie de platforms, die een ontwikkelaarsmachine doorzoekt op geheimen en deze via TLS naar een dropserver verzendt, volgens Socket’s bijgewerkte analyse en een verklaring aan The Hacker News.

De doellijst is breed en gericht op ontwikkelaars: cloudreferenties van AWS, Azure en Google Cloud, inclusief de metadata-eindpunten die CI-runners gebruiken; cryptocurrency-portefeuilles en zaadzinnen van MetaMask, Phantom en Exodus; de Bitwarden-kluis voor wachtwoordbeheer; in de browser opgeslagen wachtwoorden en cookies; en Discord-, Slack-, Telegram- en Steam-sessies.

Het gaat ook op zoek naar iets nieuws: de configuratiebestanden voor AI-coderingstools, waaronder Claude Desktop, Cursor, Windsurf, VS Code en Zed, waar API-sleutels en Model Context Protocol-serverreferenties vaak zitten.

De binaire bestanden doen meer dan stelen. Op Linux koppelt de payload de BPF-bibliotheek van de kernel en kan een eBPF-programma rechtstreeks vanuit het geheugen in de kernel laden. Dat is een steunpunt in de kernel, niet de toegang tot het gebruikersruimtebestand waar de rest van de stealer op vertrouwt. StepSecurity en SafeDep hebben beide de mogelijkheid gemarkeerd, hoewel wat de eBPF doet nog steeds uit elkaar wordt gehaald.

De Windows- en macOS-builds voegen anti-debugging-controles toe, en de stealer-draden blijven volhardend om een ​​herstart te overleven: een verborgen geplande Windows-taak die elke minuut opnieuw wordt gestart, en een macOS LaunchAgent die opnieuw wordt geladen bij het inloggen. De command-and-control-details blijven gecodeerd in het binaire bestand en zijn nooit opgedoken in statische analyses.

De runtime-monitoring van StepSecurity betrapte het verwijderde binaire bestand op twee hardgecodeerde IP-adressen en op de Tor-infrastructuur, de eerste netwerkindicatoren die voor de campagne werden gepubliceerd.

jscrambler is een buildtime-tool, geïnstalleerd als ontwikkelingsafhankelijkheid of uitgevoerd vanuit CI. Die omgevingen bevatten wat de dief verzamelt: cloudsleutels, implementatietokens en broncode die een build- of CI-proces kan bereiken.

Het pakket wordt wekelijks ongeveer 15.800 keer gedownload, en hoeveel de gecompromitteerde versie hebben opgehaald, is nog niet bekend. Dat is een veel kleinere voetafdruk dan de pakketten die getroffen zijn door de grote NPM-compromissen van het afgelopen jaar, die samen miljarden downloads per week opleveren.

Voor een dief die zich richtte op het bouwen van machines was bereik echter nooit het punt. De toegang is.

De Shai-Hulud-worm rende vanaf een installatiehaak om tokens te stelen en verspreidde zich in september door honderden pakketten. De veelgebruikte krijt- en debug-pakketten werden overgenomen via een phishing-onderhoudsaccount en gebruikt om cryptobetalingen om te leiden.

In maart duwde een gekaapt account een platformonafhankelijke trojan naar Axios, een HTTP-bibliotheek met meer dan 83 miljoen downloads per week. Wat de timing hier scherp maakt, is dat npm zojuist precies deze route is ingeslagen: npm 12 werd op 8 juli verzonden, drie dagen vóór deze release, waarbij de afhankelijkheidsinstallatiescripts standaard waren uitgeschakeld.

Op npm 12 wordt een preinstall-hook zoals deze niet uitgevoerd, tenzij iemand deze goedkeurt. Oudere clients voeren ze nog steeds automatisch uit.

Versie 8.15.0 heeft deze sindsdien bovenaan de versielijst van npm vervangen, gepubliceerd vanuit hetzelfde beheerdersaccount en laat zien dat geen van de malwarewaarschuwingen van 8.14.0 is geactiveerd: geen installatiescript, geen gebundeld binair bestand. Maar 8.14.0 werd niet verwijderd.

Het staat nog steeds op npm, dus elk slotbestand of commando dat eraan is vastgemaakt, blijft de stealer installeren. Alleen het hoofd-CLI-pakket werd getroffen; de jscrambler-plug-ins voor webpack, gulp, Metro en grunt bleven op hun schone releases van juni, zonder installatiehooks.

Wat nu te doen

  1. Stap uit 8.14.0. Ga naar 8.15.0, of pin naar 8.13.0 voor een release van vóór het incident, en wis [email protected] uit lockfiles en caches.
  2. Ga na of u 8.14.0 hebt geïnstalleerd. Controleer lockfiles en pakketbeheerderlogboeken voor [email protected] en CI-records voor elke uitvoering van dist/setup.js, vanaf 11 juli. De lader zet zijn payload onder een willekeurige naam neer in de map temp, dus er is geen vaste binaire naam om naar te zoeken; plaats in plaats daarvan de installatietijdstempels op een lijn met onderliggende knooppuntprocessen en de uitvoering van de tijdelijke map. Controleer in Windows Taakplanner op verborgen taken; op macOS inspecteer je ~/Library/LaunchAgents op onbekende plists.
  3. Als 8.14.0 op een machine zou draaien, behandel dan elk geheim dat het zou kunnen bereiken als gestolen en niet alleen als openbaar gemaakt. Roteer cloudsleutels, npm- en GitHub-tokens, en AI-tool en MCP API-sleutels; Discord-, Slack-, browser- en Bitwarden-sessies intrekken; en verwijder eventuele crypto uit portemonnees op die host. Blokkeer de twee onderstaande command-and-control-IP’s.

Het opruimen ging snel, maar een stealer doet zijn werk binnen enkele seconden na de installatie. Een build vastgemaakt aan 8.14.0, op een oudere client die installatiescripts uitvoert, voert nog steeds de payload uit. En op elke machine waarop het al draaide, waren de geheimen verdwenen voordat 8.15.0 ooit bovenaan de lijst stond.

Indicatoren van compromis

Schadelijk pakket: [email protected]. SHA-256-hashes voor de toegevoegde bestanden en hun gedecomprimeerde payloads:

  • dist/setup.js: a742de963f14a92d24ebcbc7b44ac867e23a20d31d1b0094a13a4f83287f4e60
  • dist/intro.js: a41a523ef9517aab37ed6eea0ec881821bdcb7aefcb5c5f603adc7907f868c86
  • Linux-payload: fbbcf4d8f98168f78f5c0c47a9ae56d59ec8ac84a7c9ca6b797fedfb8d62d2bd
  • Windows-payload: b7ca95d1b23c8e67416a25cedf741de0917c2096bbc9d24649eea7853d054903
  • macOS-payload: c8fd47d36bdf7c825378593ab82ed8c24d1dc52e26b507812393e24e1d5201fd

Netwerkeindpunten StepSecurity waargenomen tijdens runtime. De twee IP’s zijn de eindpunten van de directe aanvaller; het binaire bestand bereikt ook de Tor-infrastructuur, waarschijnlijk voor connectiviteit of routering:

  • C2 IP: 37.27.122(.)124
  • C2-IP: 57.128.246(.)79
  • Tor-infrastructuur: check.torproject(.)org, archive.torproject(.)org

On-host-artefacten: een willekeurig genoemd verborgen bestand in de tijdelijke map van het systeem, van de vorm . {willekeurig} of . {random}.exe op Windows, plus een verborgen geplande Windows-taak of een macOS LaunchAgent voor persistentie.

Thijs Van der Does