forge-jsxy npm Infostealer: IOC-er og deteksjonsguide

forge-jsxy: npm-infotyveren som stadig endrer navn

TL; DR

For omtrent to måneder, en enkelt npm-infotyver har dukket opp igjen under en roterende serie pakkenavn mens den sendte en nesten uendret nyttelast. Det startet åpenlyst som forge-jsxy, gytt forge-jsx3 / forge-jsx4 søsken, og droppet deretter «forge»-merkevaren helt for å utgi seg for å være utviklerinfrastruktur – først zredis-typed, og senest pinokio-redis.

Hver variant har samme interne verktøykjede: filer med navn forge-jsx-explorer-*en relayPackageServe modul som betjener en forge-jsxy-package.tgz, og en varig kjøretid skjult under en prikkete katalog slik at den overlever sletting av npm-pakken.

Nyttelasten leser kryptovaluta lommebokmateriale og utviklerlegitimasjon fra verten og overfører dem til Discord webhooks, HuggingFace Hub-opplastinger og et hardkodet C2-endepunkt. Den installerer autostart på OS-nivå slik at den kjører igjen etter omstart, og den fanger opp utklippstavlen, tastaturet og skjermaktivitet. Den nyeste varianten, pinokio-redis, beskriver seg selv som en "Autodesk Forge"-integrasjon – en beskrivelse som ikke er relatert til hva koden gjør.

ØkosystemNPM
Nyttelastklasseflertrinns infotyver + fjernkontrollagent (RAT)
Primære målkryptolommebøker, utvidelser for nettleserlommebøker, utvikler-/skylegitimasjon
Utholdenhetskjult holdbar kjøretid + OS autostart (overlever pakkefjerning)
exfiltrationnettstridhooks + relé, HuggingFace Hub, hardkodet C2 på port 9877
Observert spennMai 2026 – juli 2026 (pågående)
Siste navnpinokio-redis:1.0.127

Angrepsanatomi

Hver variant i denne familien installeres gjennom samme form: en pakke som ser inert ut på oppføringssiden, men deklarerer en postinstall-krok, så Nyttelasten kjører i det øyeblikket pakken installeres som en avhengighet. Kroken driver en femtrinnskjede.

  • Fase 1 — materialisere seg. Installasjonsskriptet dekoder en samlet, kodet blob inn i et sett med runtime-skript og skriver dem til en skjult katalog under plattformkonfigurasjonsplasseringen (forge-jsxy-versjonene brukte en punktum .forge-jsxy/runtime/v / path). Fordi denne kopien ligger utenfor node_modules, fjernes ikke den kjørende agenten hvis du fjerner eller avpubliserer npm-pakken.
  • Fase 2 — vedvarer. Kjeden registrerer en automatisk oppføring for operativsystemet, slik at agenten starter på nytt ved omstart. På Windows kjører dette gjennom et skjult PowerShell-diagnostikkskript; agentprosessen startes frakoblet og med windowsHide satt, slik at det ikke vises noe konsollvindu.
  • Fase 3 — unnvikelse. Kjøretiden sjekker etter kontinuerlige integrasjonsmarkører og avslutter stille når den oppdager et CI-miljø, slik at automatiserte byggesandkasser ikke ser noe. I forge-jsxy-versjonene oppga en kildekommentar at et synlig forgeInstall-felt bevisst ble utelatt fra package.json «fordi det feltet ville være synlig på npm» – operatøren holdt triggermetadataene ute av den offentlige oppføringen med vilje.
  • Trinn 4 – samle inn. Når agenten kjører, høster den følgende i én omgang:
  1. Materiale for kryptolommebøker. En samlet secret_filename_patterns.json-målliste driver et filsystemsøk for wallet.dat, *.mnemonic /.seed / *.phrase-filer, keypair.json, Ethereum UTC– nøkkellagre og *.p12 / *.pfx / *.jks nøkkellagre. Lommebok-avledningsbiblioteker (bip39, secp256k1, base58check og Solana-hjelpere) finnes i pakken.
  2. Utvidelser for nettleserlommebøker. En chromiumExtensionDbHarvest-modul leser de lokale utvidelseslagringsdatabasene til Chromium-nettlesere, stedet der nettleserbaserte lommebokutvidelser oppbevarer hvelvdataene sine.
  3. Legitimasjon og hemmeligheter. Agenten skanner skallhistorikk og filer som inneholder hemmeligheter, leser utvikler-/skylegitimasjon, og koder deretter HuggingFace-legitimasjon for opplasting.
  4. Direkteinnspill. Innhold på utklippstavlen, tastaturinndata og skjermbilder lagres kontinuerlig.
  • Trinn 5 — eksfiltreringInnsamlede data forlater verten gjennom tre kanaler som opererer parallelt: Discord webhooks (discordWebhookPost) og en Discord-reléopplaster som snakker med `discord.com/api/v10` (discordRelayUpload), HuggingFace Hub-opplastinger (hfUpload), og en Hardkodet C2-endepunkt nådd over port 9877. En relayPackageServe modulen serverer i tillegg en forge-jsxy-package.tgz backout – den samme artefaktnavn på tvers av hvert navnebytte.

Det viktige strukturelle punktet er at trinn 1–3 kjører ved installasjonstidspunktet med ingen brukerinteraksjon, og trinn 1 plasserer nyttelasten et sted i pakken lederen sporer ikke. En utvikler som legger merke til den merkelige avhengigheten og kjører npm uninstall fjerner oppføringen, men ikke agenten.

Nyttelasten motstår også rask lesing. Kjøretidsskriptene leveres ikke. i det klare: et kode-distribusjonstrinn holder den operative logikken som en kodet blob som bare utvides til lesbare skript når installasjonskjeden er fullført dekoder den inn i den skjulte runtime-katalogen. Filene som er synlige på listen — den tynne etterinstallasjonsskiven og en dist-materialisering hjelper — avslører lite om hva som til slutt kjører. Denne kodede leveringen design har hatt en målbar effekt på triage: gjennom hele familiens levetid, flere bekreftede varianter ble vurdert som trygge ved automatisert klassifisering, og nyttelasten har vært ugjennomsiktig nok til å stoppe automatisert gjennomgang fullstendig. Atferden som avslører familien er først synlig etter den kodede Fasen utvides, og kjøretiden leses direkte.

Tidslinje

Familiens nyttelast har holdt seg bemerkelsesverdig stabil; det som endrer seg er navn på esken. Buen går fra åpen «smie»-merking mot forkledninger som urelaterte utviklerverktøy.

Dato (2026)Pakke: versjonMerknader
Mai (tidlig)forge-jsxy:1.0.81, :1.0.90Tidligste bekreftede varianter — RAT med AES-256-GCM-kryptert C2
kan 19forge-jsxy:1.0.92 / 1.0.105 / 1.0.107 / 1.0.108Kampanje i aktiv publisering; 1.0.92 ble opprinnelig feilmerket som sikker og reversert ved ny kodegjennomgang
Sent i maiforge-jsx3 / forge-jsx4:1.0.122 / 1.0.123, zod-pinoNavn på søskenpakker, samme verktøykjede
juni 4forge-jsxy:1.0.120Fortsettelse; klassifisert som trygg av ML-modellen (en bom)
21.–23. juniforge-jsxy:1.0.121Modulsettet er uendret fra 1.0.120
juli 6zredis-typed:1.0.127«smie» fjernet fra navnet; fortsatt skip forge-jsxy-package.tgz og forgeAgent* konfigurasjonsnøkler
juli 7pinokio-redis:1.0.127Samme verktøykjede; ny C2; beskriver seg selv som en "Autodesk Forge"-integrasjon

To ting skiller seg ut gjennom tidslinjen. For det første brukes versjonsnummer 1.0.127 ordrett av både zredis-typed og pinokio-redis – navngivningen endres, men byggelinjen tilbakestilles ikke. For det andre sammenfaller skiftet bort fra «forge-*»-navn med et skifte mot navn som leses som vanlig infrastruktur (redis, pinokio), noe som reduserer sjansen for at en utvikler skumleser navnet og nøler.

Indikatorer for kompromiss

IOC-ene nedenfor er defanget. C2-verten roterte mellom forge-jsxy-linjen og den nyeste varianten mens du beholder samme port.

IndikatorVerdiSett inn
C2-endepunkt212.193.3[.]61:9877pinokio-redis:1.0.127
C2-endepunkt79.108.162[.]160:9877forge-jsxy-linjen, zredis-typed:1.0.127
Exfil-kanaldiscord.com/api/webhooks/… (webhook-innlegg)alle varianter
Exfil-kanaldiscord.com/api/v10 (reléopplasting)alle varianter
Exfil-kanalHuggingFace Hub-opplastingalle varianter
Servert artefaktforge-jsxy-package.tgz (Via relayPackageServe)alle varianter
VerktøykjedefilerchromiumExtensionDbHarvest, discordRelayUpload, discordWebhookPost, hfUpload, encode-hf-credentials, forge-jsx-explorer-*alle varianter
Mållistesecret_filename_patterns.json (wallet.dat, .mnemonic/.seed/.phrase, keypair.json, UTC--, .p12/.pfx/*.jks)alle varianter
Skjult kjøretidstiplede …/.forge-jsxy/runtime/v<version>/ config-dir-stiforge-jsxy-linjen
Windows-utholdenhetskjult PowerShell "forge diagnostics" autostart-skriptalle varianter
Installer utløserpostinstall-krok som kaller en dist-materialization-skriptkjedealle varianter

Det mest holdbare deteksjonssignalet er ikke en enkelt vert eller webhook – de roter — men verktøykjedefilnavnene og forge-jsxy-package.tgz gjenstand, som har vedvart ordrett gjennom hvert navneendring.

Attribusjon og observert atferd

Pakkene ble publisert under mer enn én npm-konto. The forge-jsxy linjen brukte utgiveren jacksonkaandorp2 (jacksonkaandorp2@outlook[.]com); Den siste pinokio-redis-varianten ble publisert av donimique (donimiqueakers@gmail[.]com). Ingen av kontoene hadde en bekreftet e-postadresse eller et koblet kildelager. Gjennomgangen på tvers av kontoer er verktøykjede, ikke utgiveridentiteten – de samme modulnavnene, det samme servert .tgz, og den samme exfil-designen gjentas uavhengig av hvem som publiserte.

Flere observerbare atferder indikerer bevisst skjuling snarere enn utilsiktet overinnsamling:

Kjøretidsprogrammet plasseres utenfor node_modules i en skjult katalog, slik at det overlever pakken som leverte det.

Agenten kobler ut når den oppdager et CI-miljø, noe som begrenser eksponeringen i automatiserte analysesandkasser.

Agentprosessen startes frakoblet og vindu-skjult.I I forge-jsxy-versjonene knyttet en kommentar utelatelsen av et synlig installasjonsfelt til at feltet var «synlig på npm».

De offentlige pakkebeskrivelsene er ikke relatert til koden – pinokio-redis presenteres som en «Autodesk Forge»-integrasjon.

Et tilbakevendende deteksjonsgap er verdt å merke seg for forsvarere som er avhengige av automatisert klassifisering: flere bekreftede varianter i denne familien var vurdert som sikker av en ML-klassifikator før kodegjennomgang korrigerte dom. De stabile elementene en anmelder kan ankre på – installasjonstiden kjede, den skjulte kjøretiden, verktøykjeden-filnavnene – er akkurat de som overlever navneendringene.

Vi beskriver det ovennevnte som observert atferd. Vi tilskriver ikke kampanje til enhver navngitt aktør, og vi fremsetter ingen krav om operatørens identitet eller mål utover det koden og infrastrukturen viser.

Innvirkning, trender og veiledning fra forsvarere

Hvem som er eksponert. Samlingssettet er direkte rettet mot utviklere maskiner: kryptovaluta-lommebøker og nøkkellagre, nettleserlommebokutvidelser, skallhistorikk og sky-/tjenestelegitimasjon. Alle som installerer en berørt pakke – direkte eller som en transitiv avhengighet — i løpet av vinduet det var live er innenfor omfanget, og persistensdesignet betyr at Eksponeringen slutter ikke når pakken fjernes.

Hvorfor utholdenhet er viktig. Fordi trinn 1 kopierer nyttelasten inn i en skjult runtime-katalog og trinn 2-registre autostart, den vanlige utbedringsinstinkt (avinstaller den dårlige avhengigheten, slett node_modules, (installer på nytt) fjerner ikke agenten. Hendelsesresponsen må se etter kjøretid utenfor treet og autostart-oppføringen, ikke bare pakken.

Trenden. Denne familien illustrerer et mønster som er verdt å følge med på: en nyttelast som er stabil og moden, pakket inn i en strøm av engangsmaterialerpakkenavn som migrerer bort fra et navn som en tidligere fjerning har gjort gjenkjennelig, mot navn som leses som vanlig infrastruktur. Navnebasert blokkeringslister og utgiveromdømme eldes raskt mot dette; atferd- og artefaktbaserte signaler gjør det ikke.

For utviklere og forbrukere

Behandle skript under installasjon som den primære risikoflaten. Installer med skript deaktivert der det er mulig, og gjennomgå eventuelle avhengigheter som deklarerer en etterinstallasjon. Fest og godkjenn transitive avhengigheter; denne typen skadelig programvare kommer like enkelt gjennom en underavhengighet som en direkte avhengighet.

På en mistenkt vert, søk utover pakken: se etter en skjult runtime-katalog i plattformkonfigurasjonsplasseringen, en uventet autostart-oppføring, og utgående tilkoblinger til Discord webhook eller :9877-endepunkter.

Anta at enhver lommebok-frøfrase, nøkkellager eller legitimasjon som finnes på en berørt vert i løpet av eksponeringsvinduet er kompromittert, og roter.

For registre og forsvarere

Varsel om varige artefakter (forge-jsxy-package.tgz, forge-jsx-explorer-* / chromiumExtensionDbHarvest / discordRelayUpload filnavn) i stedet for pakkenavnet, som endres.

Flagg den strukturelle kombinasjonen familien er avhengig av – en etterinstallasjon som materialiserer skript i en skjult config-dir-sti pluss et operativsystem. autostartregistrering — uavhengig av de spesifikke strengene som er involvert.

Navnet på pakken har endret seg minst fire ganger; kassen inni har ikke. Deteksjon basert på hva koden gjør har overlevd alle ommerking så langt.

sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken