DevTap npm Typosquatting Attack

DevTap npm Typosquatting Attack: Sechs béiswëlleg Pakete zielen op Entwéckler-Aarbechtsstatiounen of.

TL; DR

Tëscht dem 1. Abrëll an dem 3. Mee 2026 huet een eenzegen npm-Verlag, user0001, registréiert mat der net verifizéierter Gmail Adress tanvisoul9@gmail.com, huet roueg sechs Paketen mat bewosst langweilegen, infrastrukturell kléngenden Nimm virgestallt: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, an node-env-resolve.

Déi lescht zwou Versioune vun node-env-resolve, 1.0.7 an 1.0.8, goufen den 2. Mee vum Malware Early Warning (MEW) System vun Xygeni markéiert a goufen den 3. Mee als béiswëlleg bestätegt.

Den Implantat ass ongewéinlech fir dat wat en net ass: et gëtt keng Telegram Bots, keng OAST Callbacks, keng d 'Verschwörung, an kee Versuch, AWS-Umeldungsdaten bei der Installatioun ze kréien. Amplaz, postinstall.js installéiert e Windows Boot-Persistence Entrée, andeems en eng HKCU Run Schlëssel benotzt gëtt, déi start wscript.exe géint e VBS-Stub. Dann erstellt et en ofgetrennten Node.js-Agent, deen Moduler fir Mikrofonopnam, Browser-Verlaf-Déifstall, Screenshots a Maus-/Tastatursimulatioun bündelt.

Mir nennen dëse Cluster DevTap, nodeems de Kit op der Maschinn vun engem Entwéckler leeft.

All sechs Pakete waren zum Zäitpunkt vum Schreiwen op npm live. Mir hunn se op de Mëssbrauchskanal vum Registry geschéckt. Verdeedeger sollten all Installatiounen vum Editeur zréckzéien, déi bis zur Entfernung stinn.

De Cluster: Sechs Paketen, een Editeur

De Kont vum Verlag user0001 ass net verifizéiert. Et huet keen SCM Verifizéierung, keng Domain-gebonnen E-Mail-Adress a keng Virgeschicht. De Gmail-Handle tanvisoul9 erschéngt an kengem aneren npm-Verlagsregister, dee mir konnte fannen.

All sechs Pakete lëschten deeselwechten Ënnerhalter op, goufen vum selwechte Kont publizéiert a deelen datselwecht. package.json Standardplack. Et gëtt keen repository, Nee homepage, an nee description méi laang wéi eng eenzeg Zeil.

D'Benennungsstrategie ass den interessanten Deel. Am Géigesaz zu enger klassescher Ofhängegkeets-Duercherneen- oder Typosquat-Kampagne zielt keen vun dësen Nimm op eng spezifesch Upstream-Bibliothéik. Amplaz si se kalibréiert fir an eng richteg ze verschwannen. package.json or npm ls Ausgab.

PakFir d'éischt publizéiertLäscht VersiounVersiounenRoll am Cluster
Zentrallogger2026-04-01 12:46 UTC1.0.95, vun 1.0.5 bis 1.0.9Cover vum "Logging Utility" vum Cluster; fréist Verëffentlechung
dom-utils-lite2026-04-14 07:36 UTC1.0.33Generesch DOM-Hëllefscover
Node-Fetch-Lite2026-04-19 10:22 UTC1.0.23Imitéiert d'Node-Fetch-Famill
Connector-Agent2026-04-25 05:12 UTC1.0.01Genereschen Numm "Agent"
Node-Gyp-Laafzäit2026-04-25 05:17 UTC1.0.01Miméiert Tools fir d'Building vun native Moduler
Node-Env-Léisung2026-04-25 05:21 UTC1.0.910, vun 1.0.0 bis 1.0.9Aktiven Dropper; komplett Implantat

Nimm wéi centralogger, node-fetch-lite, an node-gyp-runtime sinn entwéckelt fir an der Code Review onkontroversiell ausgesinn ze loossen. Si kléngen wéi Saachen, déi scho am Ofhängegkeetsbam vun engem Projet wieren.

Kombinéiert mat engem frëschen, net verifizéierten Editeur a feelenden Repository-Links, bilden si e erkennbart Muster: en Akteur, deen Nimm mat niddreger Reibung an de Registry setzt, an dann iteréiert séier op deen, deen wichteg ass. An dësem Fall, node-env-resolve hunn zéng Versiounen an aacht Deeg kritt.

Wat op enger Windows Dev Box lant

Déi béiswëlleg Kette op node-env-resolve:1.0.8 ass kuerz, direkt an ongewéinlech featureräich fir en npm RAT.

Noinstallatioun: Persistenz an Detached Agent

package.json deklaréiert een eenzegen Installatiounshook:

{ "scripts": { "postinstall": "node postinstall.js" } }

postinstall.js mécht dräi Saachen an der Reiefolleg.

Als éischt stagnéiert et en Installatiounsverzeichnis ausserhalb vum npm-Bam. De Wee gëtt zur Lafzäit am Skript berechent als INSTALL_DIRDann leeft et en internen execSync('npm install --production --silent ...') dran, fir d'Laafzäitofhängegkeeten vum Implantat ze kréien. Dëst setzt den Agent op enger Festplack iergendwou an engem Handbuch. node_modules Audit wäert net fannen.

Zweetens schreift et e VBS-Launcher a registréiert en fir Boot-Persistenz:

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run \     /v ${AGENT_NAME} \     /t REG_SZ \     /d "wscript.exe \"${vbsPath}\"" /f

wscript.exe ass de Windows Script Host, e signéierte Microsoft Binärprogramm, deen ausféiert .vbs Dateien ouni e Konsolefënster. Dat ass virdrucisfirwat et fir Autorun-Stubs bevorzugt ass.

Et gëtt och eng Matching reg delete Wee bannen src/index.js, wat drop hiweist, datt den Implantat sou entwéckelt gouf, datt et op Uerder vum Operator propper erausgeholl ka ginn.

Drëttens, et féiert zu engem ofgetrennten Kandprozess:

spawn(node, [path.join(INSTALL_DIR, 'src/index.js')], {   detached: true,   env: { ...process.env, SERVER_URL } })

Zwee Detailer sinn hei wichteg.

SERVER_URL gëtt aus der Ëmwelt gelies. Dofir ass den C2-Endpoint pro Deployment konfiguréierbar an net am Package integréiert. Déi kleng awer bewosst Wiel besiegt déi meescht statesch-IOC-Sweeps.

Ausserdeem ierft dat entstanent Kand déi voll Elterenëmfeld. Dofir, all NPM_TOKEN, AWS_*, GITHUB_TOKEN, oder den SSH-Agent-Socket, deen zum Zäitpunkt vun der Installatioun an der Developer-Shell präsent ass, reest an de Speicher vum laangliewegen Agent.

Wat den Agent matschéckt

Déi gebündelt src/ De Bam enthält dräi Moduler, deenen hir Nimm eleng d'Geschicht erzielen: audioCapture.js, browserHistory.js, an systemInfo.js.

D'Lëscht vun den Ofhängegkeete vum Lafzäitprozess, déi während dem Staged geléist gouf npm install, bestätegt se.

Dës Approche verwandelt aus engem chaoteschen Tëschefall eng kontrolléiert Reaktioun.

Amplaz blann ze reagéieren, schaffen d'Équipen mat kloer Prioritéiten a séier Reparatur.

OfhängegkeetFir wat et an dësem Kontext ass
Screenshot-DesktopPeriodesch Bildschirmopnam
@nussbaum-Gabel/nuss-jsMaus- a Tastaturautomatiséierung / Inputsimulatioun
besser-sqlite3Direkt Liesunge vun Chrome, Edge a Firefox History SQLite Datenbanken
adm-zipSammlung vu gesammelten Artefakte virun der Exfiltratioun
scharfGréisst änneren / Kompriméiere vu Screenshots an Bildartefakten
socket.io-ClientPersistenten bidirektionalen C2-Kanal
Knuet-Maschinn-IDStabile Fangerofdrock pro Host fir d'Verfollegung vun den Affer

systemInfo.js Appellen os.networkInterfaces() fir zousätzlech Fangerofdrock virum éischte Beacon.

Firwat d'Audioopnam dat erausragend Signal ass

Déi meescht npm RATs, déi mir am MEW triagéieren, stoppen bei geheime Klauen zur Installatiounszäit. Si liesen. ~/.npmrc, liest ~/.aws/credentials, krazen process.env, POST op e Webhook, an erausgoen. Dat passt zu engem Smash-and-Grab Wirtschaftsmodell. Umeldungsinformatiounen hunn eng kuerz Hallefzäit, an den Ugräifer muss séier monetariséieren.

node-env-resolve ass an der Form ënnerschiddlech.

D'Persistenz ass ageriicht fir e Restart ze iwwerliewen. Den Agent leeft ofgetrennt a laanglieweg ënner ... wscript.exeDe Kit, deen et enthält, ass dofir geduecht fir op der Maschinn vun engem Entwéckler do ze sinn, net fir ze gräifen an ze loossen: e Mikrofonrecorder, en Tastatur-/Maus-Driver, eng komplett Browser-Verlaf-Opnam, e Bildschirmopnam an en interaktiven Socket.IO-Kanal zréck op e konfiguréierbare C2.

Mikrofonopnam ass besonnesch d'Linn, déi dës Kampagne iwwerschreit, déi déi meescht npm-Malware net iwwerschreit.

Eng Entwéckler-Aarbechtsstatioun ass ëmmer méi dacks och déi Aarbechtsstatioun, wou Entwéckler Stand-up-Ried, Clientsuriff, Designdiskussiounen a Brécke mat Bereitschaftsleit maachen. En Implantat, deen de Mikrofon ophëlt, ass net wierklech nom NPM-Token vum Entwéckler. Et ass nom deem, wat den Entwéckler virum Laptop seet.

Dës Fäegkeetsset, plus de Manktem u Verschleierung an d'Feele vun iergendenger opzichteger Exfiltratioun während der Installatioun, liest sech als eng Virpositionéierung fir gezielten Zougang anstatt als opportunistesche Klau vun Umeldungsinformatiounen.

Mir behaapten net eleng d'Zouuerdnung dovun. Mir bemierken den operationelle Profil.

npm Typosquatting Attack - DevTab

Déi aacht Deeg Iteratiounskadenz op node-env-resolve ass den operationell aussoendsten Detail an der Zäitlinn.

Dëst ass keen "fire-and-forget"-Drop. Den Editeur ënnerhält den Dropper aktiv, wat normalerweis eng vun zwou Saachen bedeit. Entweder tunen se en un Testëmfeld virum méi breede Gebrauch un, oder se hunn schonn installéiert Telemetrie zréck a reagéieren drop.

Déi aner fënnef Pakete konnten no hirer éischter Verëffentlechung effektiv kee Verfall feststellen. Dat passt zu engem "eemol am Stadium, den Numm loossen"-Muster fir den ënnerstëtzende Cluster, während d'Entwécklungsaarbecht sech op de Pak konzentréiert, deen d'Aarbecht mécht.

Attributioun: Kleng Hiweiser, kee festen Uerteel

ëffentlech OSINT D'Signaler si dënn, a mir wäerten se net ausdehnen. Wat ass observéierbar:

De Gmail-Handle tanvisoul9 gläicht deelweis engem südasiatesche Virnumm, "Tanvi". Dëst ass e schwaacht Signal. Gmail Handles sinn keng Identitéit, an den ofschléissenden Numm soul9 ass generesch. Et ass net sécher, d'Geographie eleng aus engem lokalen Deel vun enger E-Mail ofzeleeden.

De Code-Stil ass onopfälleg Node.js: standard Bibliothéiksuriff wéi z.B. os, child_process, spawn, an reg addEt gëtt keng Obfuskatioun, keng Stringrotatioun a keng Anti-Debug-Logik. Den Auteur ass mat Windows-Registrierungsprimitiven an der Orchestratioun vun detached-child-process vertraut, awer et schéngt net no méi verstehende Handwierkskonscht ze gräifen, déi se plausibel benotze kéinten.

Ofhängegkeete si komplett Standard a gutt bekannt: screenshot-desktop, nut-js, better-sqlite3, an socket.io-clientEt gëtt kee personaliséierte Protokoll, kee vun Null un nei opgebauten C2-Stack a kee neien Trick fir d'Persistenz iwwer e Léierbuch eraus. HKCU Run SchlësselDëst ass e kompetenten Integrator, keen Toolauteur.

Mir hunn keng net-englesch Zeecheketten, agebett Kommentarer, Lokalisatiounsdaten oder Zäitzonenofdréck vum Compiler-Output an de publizéierten Artefakte fonnt.

Mir hunn op Code-Iwwerlappungen mat fréiere Kampagnen iwwerpréift, déi mir scho verfollegen, dorënner Shai Hulud, Owlivion, Buildkite, an déi rezent Heibai / claude-code-best Anthropic-CLI Klonfamill. Mir hunn keng fonnt: keng gemeinsam C2-Musteren, keng gemeinsam Datei-Layouten a keng gemeinsam Idiomen.

Wat mir net soe géifen: datt et sech ëm e staatlechen Akteur, eng bekannt Grupp handelt oder geografesch un e spezifescht Land gebonnen ass.

De operationelle Profil entsprécht engem klenge, mëttelméisseg qualifizéierten Team, deen d'Iwwerwaachung vun den Entwéckler-Aarbechtsstatiounen duerchféiert. Et ass wahrscheinlech finanziell motivéiert duerch d'Notzung vum Zougang am Downstream, awer méiglecherweis och d'Reconnaissance-as-a-Service fir e separate Keefer.

Zwee indirekt Punkten ënnerstëtzen dat: d'Vermeidung vun opfällegen Exfiltratiounsmechaniken, déi de Cluster séier verbrenne géifen, wéi zum Beispill Telegram-Bots, oastify.com, oder Canarytokens, an déi bewosst langweileg Paketnimm, déi roueg Long-Tail-Installatioune léiwer hunn ewéi e kuerze Spike mat héijem Volumen.

Indikatoren fir Kompromësser an Detektioun

Paketen a Verlag
BeräichWäert
npm-Verlaguser0001
E-Mail vum Editeurtanvisoul9@gmail.com, net verifizéiert
Formulencentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
Bestätegt als béiswëllegnode-env-resolve@1.0.7, node-env-resolve@1.0.8
Host-Artefakten
TypeWäert
Schlëssel fir d'PersistenzHKCU\Software\Microsoft\Windows\Aktuell Versioun\Run
PersistenzwäertVariabelen Numm; Donnéeën vun der Form wscript.exe " \\ .vbs"
Haken installéierenpostinstall: Node postinstall.js am Pakmanifest
Implantatmodulersrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Staging-VerzeichnisINSTALL_DIR ausserhalb vun den node_modules vum Projet opgeléist; d'Plaz gouf vun postinstall.js zum Zäitpunkt vun der Installatioun festgeluecht
Network
TypeWäert
C2-Transportsocket.io-client, persistenten bidirektionalen Kanal
C2 EndpunktDem Agent iwwer d'Ëmfeldvariabel SERVER_URL geliwwert; net an publizéiert Artefakte fest kodéiert

Detektiounsnotizen

Zwou Reegele fänken dës Famill ouni den C2-Endpunkt ze brauchen.

Als éischt, markéiert Postinstallatiounsskripter, déi eng intern Installatioun ausféieren npm install an e Wee baussent dem eegene Verzeichnis vum Pak. All legitime Prebuild-Downloader, wéi z.B. node-gyp nei opbauen oder virgebaute binär Downloader, schreift am Pak oder an d'Plattform-standard Cache-Pfade mat verifizéierten Hashes. Et schreift net an eng frësch erstallt INSTALL_DIR soss anzwousch op der Disk.

Zweetens, markéiert Postinstallatiounsskripter déi Problemer verursaachen reg add HKCU\…\Run mat wscript.exe als Launcher. Dëst ass am Fong ni legitim vun engem npm-Pakéit. Markéiert et a stellt et a Quarantän.

Eng drëtt Heuristik ass nëtzlech fir den nächste Geschwësterpaket z'identifizéieren, ier en confirméiert gëtt: e frëschen npm-Publisher ouni SCM Verifizéierung, eng Gmail E-Mail, nee repository Feld, a verschidde kuerz, generesch, infrastrukturkléngend Paketnimm, déi bannent Deeg vuneneen publizéiert ginn, ass eleng genuch fir eng manuell Iwwerpréiwung ze rechtfertegen.

Un d'npm-Registrierung gemellt. Mir aktualiséieren dëse Beitrag, wann de Publisher-Kont geläscht gëtt.

sca-tools-software-zesummesetzungsanalyse-tools
Prioritäriséiert, behënnert a séchert Är Softwarerisiken
Kritt Äre gratis Kont.
Kee Kreditkaart erfuerderlech.

Séchert Är Softwareentwécklung a Liwwerung

mat der Xygeni Produkt Suite