Attaccu di Typosquatting di DevTap npm

Attaccu di Typosquatting DevTap npm: Sei pacchetti maliziosi miranu à e stazioni di travagliu di i sviluppatori

TL; DR

Trà u 1 d'aprile è u 3 di maghju di u 2026, un solu editore npm, user0001, registratu cù l'indirizzu Gmail micca verificatu tanvisoul9@gmail.com, hà spintu tranquillamente sei pacchetti cù nomi deliberatamente blandi, chì sunanu cum'è infrastrutture: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, e node-env-resolve.

L'ultime duie versioni di node-env-resolve, 1.0.7 è 1.0.8, sò state segnalate da u sistema Malware Early Warning (MEW) di Xygeni u 2 di maghju è cunfirmate cum'è maliziose u 3 di maghju.

L'implantu hè insolitu per ciò chì ùn hè micca: ùn ci sò micca bot Telegram, nè richiami OAST, nè obfuscation, è nisun tentativu di piglià credenziali AWS à u mumentu di l'installazione. Invece, postinstall.js pianta una entrata di persistenza di avvio di Windows, aduprendu una chjave Run HKCU chì lancia wscript.exe contr'à un stub VBS. Dopu, genera un agente Node.js staccatu chì raggruppa moduli per a cattura di microfoni, u furtu di a cronologia di u navigatore, a creazione di screenshots è a simulazione di mouse/tastiera.

Chjamemu stu cluster DevTap, dopu à u kit, parte in esecuzione nantu à a macchina di un sviluppatore.

Tutti i sei pacchetti eranu dispunibili nant'à npm à u mumentu di a scrittura. Li avemu sottumessi à u canale d'abusu di u registru. I difensori devenu caccià tutte l'installazioni da l'editore in attesa di a rimuzione.

U Cluster: Sei Pacchetti, Un Editore

U contu di l'editore user0001 ùn hè micca verificatu. Ùn hà micca SCM verificazione, nisun email ligatu à u duminiu, è nisuna storia precedente. L'indirizzu Gmail tanvisoul9 ùn appare micca in alcun altru registru di editore npm chì pudemu truvà.

Tutti i sei pacchetti elencanu u listessu mantenitore, sò stati publicati da u listessu contu, è spartenu u listessu package.json schedula standard. Ùn ci hè micca repository, Innò homepage, e micca description più longu chè una sola linea.

A strategia di numinazione hè a parte interessante. À u cuntrariu di una campagna classica di cunfusione di dipendenze o typosquat, nisunu di sti nomi hè destinatu à una biblioteca upstream specifica. Invece, sò calibrati per sparisce in un veru package.json or npm ls output.

pacchettuPrima PublicataUltima VersioneversioniRuolo in u Cluster
centralogger2026-04-01 12:46 UTC1.0.95, da 1.0.5 à 1.0.9Copertina di "utilità di logging" di u cluster; prima publicazione
dom-utils-lite2026-04-14 07:36 UTC1.0.33Copertina generica di DOM-helper
node-fetch-lite2026-04-19 10:22 UTC1.0.23Imita a famiglia di recuperu di nodi
agente di cunnettore2026-04-25 05:12 UTC1.0.01Nome genericu "agente"
node-gyp-runtime2026-04-25 05:17 UTC1.0.01Imita l'arnesi di custruzzione di moduli nativi
node-env-resolve2026-04-25 05:21 UTC1.0.910, da 1.0.0 à 1.0.9Contagocce attivu; impianto cumpletu

Nomi cum'è centralogger, node-fetch-lite, e node-gyp-runtime sò cuncipiti per sembrà senza cuntruversia in a revisione di u codice. Sembranu cose chì serianu digià in l'arburu di dipendenze di un prughjettu.

Cumbinati cù un editore frescu è micca verificatu è ligami di repositoriu mancanti, formanu un mudellu ricunniscibile: un attore chì semina nomi à bassa attritu in u registru, poi iterà rapidamente nantu à quellu chì importa. In questu casu, node-env-resolve hà ricevutu dece versioni in ottu ghjorni.

Ciò chì sbarca nantu à una Windows Dev Box

A catena maligna annantu node-env-resolve:1.0.8 hè cortu, direttu è insolitamente riccu di funzioni per un RAT npm.

Postinstallazione: Persistenza è Agente Staccatu

package.json dichjara un unicu hook d'installazione:

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

postinstall.js face trè cose in ordine.

Prima, mette in scena un cartulare d'installazione fora di l'arburu npm. U percorsu hè calculatu à l'esecuzione in u script cum'è INSTALL_DIRDopu esegue un internu execSync('npm install --production --silent ...') dentru per tirà e dipendenze di runtime di l'implantu. Questu mette l'agente nantu à u discu in qualchì locu un manuale node_modules l'audit ùn truverà micca.

Siconda, scrive un launcher VBS è u registra per a persistenza di l'avvio:

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

wscript.exe hè u Windows Script Host, un binariu Microsoft firmatu chì funziona .vbs schedari senza una finestra di cunsola. Què hè precisHè per quessa ch'ellu hè favuritu per i stubs d'autorun.

Ci hè ancu una currispundenza reg delete percorsu dentru src/index.js, ciò chì suggerisce chì l'implantu hè cuncipitu per esse rimovibile facilmente à u cumandamentu di l'operatore.

Terzu, genera un prucessu figliolu staccatu:

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

Dui ditaglii importanu quì.

SERVER_URL hè lettu da l'ambiente. Di cunsiguenza, u puntu finale C2 hè cunfigurabile per implementazione è ùn hè micca integratu in u pacchettu. Sta scelta chjuca ma deliberata scunfighja a maiò parte di i sweep statichi-IOC.

Inoltre, u zitellu generatu eredita l'ambiente parentale cumpletu. Dunque, qualsiasi NPM_TOKEN, AWS_*, GITHUB_TOKEN, o u socket di l'agente SSH prisente in u shell di sviluppatore à u mumentu di l'installazione viaghja in a memoria di l'agente à longa durata.

Ciò chì l'agente spedisce

U bundle src/ L'arburu include trè moduli chì i so nomi solu dicenu a storia: audioCapture.js, browserHistory.js, e systemInfo.js.

A lista di dipendenze in tempu reale, risolta durante a messa in scena npm install, li corrobora.

Questu approcciu trasforma un incidente caòticu in una risposta cuntrullata.

Invece di reagisce à l'aveugla, e squadre operanu cù priorità chjara è riparazione rapida.

DependenzaÀ chì serve in questu cuntestu
screenshot-desktopCattura di schermu periodica
@nut-tree-fork/nut-jsAutomatizazione / simulazione di input di mouse è tastiera
megliu-sqlite3Letture dirette di e basi di dati SQLite di Chrome, Edge è Firefox History
adm-zipRaggruppamentu di l'artefatti raccolti prima di l'esfiltrazione
SharpRidimensionamentu / cumpressione di screenshots è artefatti d'imagine
socket.io-clientCanale C2 bidirezionale persistente
node-machine-idImpronta digitale stabile per host per u tracciamentu di a vittima

systemInfo.js chjama os.networkInterfaces() per impronte digitali supplementari prima di u primu faro.

Perchè a cattura audio hè u segnale eccezziunale

A maiò parte di i RAT npm chì triemu in MEW si fermanu à u furtu secretu in tempu d'installazione. Leghjenu ~/.npmrc, leghje ~/.aws/credentials, raschjà process.env, POST à ​​un webhook, è surtite. Questu currisponde à un mudellu ecunomicu smash-and-grab. I credenziali anu una corta mezza vita, è l'attaccante hà bisognu di monetizà rapidamente.

node-env-resolve hè diversa in forma.

A persistenza hè cunfigurata per sopravvive à u riavviu. L'agente funziona staccatu è di longa durata sottu wscript.exeU kit ch'ellu porta hè per esse quì nantu à a macchina di un sviluppatore, micca per piglià è lascià: un registratore di microfonu, un driver di tastiera/mouse, ingestione di a storia cumpleta di u navigatore, cattura di schermu è un canale Socket.IO interattivu versu un C2 configurabile.

A cattura di u microfonu in particulare hè a linea chì sta campagna attraversa chì a maiò parte di i malware npm ùn attraversanu micca.

Una stazione di travagliu di sviluppatore hè, sempre di più, ancu a stazione di travagliu induve i sviluppatori piglianu stand-up, chjamate cù i clienti, discussioni di cuncepimentu è ponti di guardia. Un implantu chì registra u microfonu ùn hè micca veramente dopu à u token npm di u sviluppatore. Hè dopu à ciò chì u sviluppatore dice davanti à u laptop.

Quellu inseme di capacità, più a mancanza di offuscazione è l'assenza di qualsiasi esfiltrazione appariscente in tempu d'installazione, si legge cum'è un preposizionamentu per un accessu miratu piuttostu chè un furtu di credenziali opportunisticu.

Ùn dichjaremu micca l'attribuzione solu da questu. Nutemu u prufilu operativu.

attaccu di typosquatting npm - DevTab

A cadenza d'iterazione di ottu ghjorni node-env-resolve hè u dettagliu u più operativamente significativu in a cronologia.

Questu ùn hè micca un dropper di tipu "fire-and-forget". L'editore mantene attivamente u dropper, ciò chì di solitu significa una di e duie cose. O u stanu aghjustendu à l'ambienti di prova prima di una implementazione più larga, o anu digià a telemetria d'installazione chì torna è ci stanu rispondendu.

L'altri cinque pacchetti ùn anu vistu nisuna perdita dopu a so publicazione iniziale. Questu currisponde à un mudellu "mette in scena una volta, lasciate cù nome" per u cluster di supportu mentre u sforzu d'ingegneria si cuncentra nantu à u pacchettu chì face u travagliu.

Attribuzione: Picculi indizii, nisun verdettu fermu

Public OSINT I signali sò fini, è ùn li stenderemu micca. Ciò chì hè osservabile:

L'identificatore di Gmail tanvisoul9 s'assumiglia parzialmente à un nome di battesimu sud-asiaticu, "Tanvi". Questu hè un signale debule. I manichi Gmail ùn sò micca identità, è a fine soul9 hè genericu. Ùn hè micca sicuru di deduce a geugrafia da una parte lucale di email solu.

U stile di u codice ùn hè micca rimarchevule Node.js: standard chjamate di biblioteca cum'è os, child_process, spawn, e reg addÙn ci hè nisuna offuscazione, nisuna rotazione di stringa, è nisuna logica anti-debug. L'autore hè à l'aise cù e primitive di u registru di Windows è l'orchestrazione di prucessi detached-child, ma ùn pare micca circà tecniche più furtive chì puderianu plausibilmente aduprà.

E dipendenze sò cumpletamente dispunibili è ben cunnisciute: screenshot-desktop, nut-js, better-sqlite3, e socket.io-clientÙn ci hè micca protocolu persunalizatu, nisuna pila C2 riprodotta da zero, è nisun novu truccu di persistenza al di là di un manuale. Chjave di Esecuzione HKCUQuestu hè un integratore cumpetente, micca un autore di strumenti.

Ùn avemu trovu stringhe micca in inglese, cumenti integrati, dati lucali, o impronte digitali di fusu orariu di output di u compilatore in l'artefatti publicati.

Avemu verificatu a sovrapposizione di codice cù campagne precedenti chì digià seguitemu, cumprese Shai Hulud, Owlivion, Buildkite, è u recente heibai / claude-code-best Famiglia di cloni Anthropic-CLI. Ùn ne avemu trovu nimu: nisun mudellu C2 spartutu, nisun layout di file spartutu, è nisun idiomu spartutu.

Ciò chì ùn diceremu micca: chì questu hè un attore statale, un gruppu cunnisciutu, o geograficamente ligatu à qualsiasi paese specificu.

U prufilu operativu hè coerente cù una piccula squadra moderatamente qualificata chì face a surveglianza di a stazione di travagliu di i sviluppatori. Hè prubabilmente motivatu finanziariamente da l'usu downstream di l'accessu, ma forse ancu da a ricunniscenza cum'è serviziu per un cumpratore separatu.

Dui punti indiretti sustenenu questu: l'evità di meccaniche di esfiltrazione chì attiranu l'attenzione è chì brusgiarianu rapidamente u cluster, cum'è i bot di Telegram, oastify.com, o canarytokens, è i nomi di pacchetti deliberatamente blandi, chì favuriscenu installazioni tranquille à coda longa invece di un breve piccu di grande vulume.

Indicatori di Compromissione è Rilevazione

Pacchetti è Editore
campuValue
editore npmutilizatori0001
E-mail di l'editoretanvisoul9@gmail.com, micca verificatu
Packagescentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
Maliziosu cunfirmatunode-env-resolve@1.0.7, node-env-resolve@1.0.8
Artefatti di l'ospite
TypeValue
Chjave di persistenzaHKCU\Software\Microsoft\Windows\Versione Attuale\Eseguisce
Valore di persistenzaNome di a variabile; dati di a forma wscript.exe " \\ .vbs"
Installà u ganciupostinstall: node postinstall.js in u manifestu di u pacchettu
Moduli d'implantusrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Repertoriu di messa in scenaINSTALL_DIR risolta fora di i node_modules di u prugettu; locu definitu da postinstall.js à u mumentu di l'installazione
Network
TypeValue
Trasportu C2socket.io-client, canale bidirezionale persistente
Puntu finale C2Furnitu à l'agente per mezu di a variabile d'ambiente SERVER_URL; micca codificatu in modu fissu in artefatti publicati

Note di rilevazione

Dui reguli catturanu sta famiglia senza bisognu di u puntu finale C2.

Prima, signalate i scripts di postinstallazione chì eseguiscenu un'operazione interna npm install in un percorsu fora di u cartulare di u pacchettu. Ogni scaricatore di prebuild legittimu, cum'è node-gyp ricustruisce o scaricatori binari precustruiti, scrive in u pacchettu o in a piattaforma-standard percorsi di cache cù hash verificati. Ùn scrive micca in un novu schedariu creatu INSTALL_DIR in altrò nant'à u discu.

Siconda, signalate i scripts di postinstallazione chì presentanu prublemi reg add HKCU\…\Runwscript.exe cum'è u lanciatore. Questu ùn hè essenzialmente mai legittimu da un pacchettu npm. Segnalalu è mettelu in quarantena.

Una terza euristica hè utile per individuà u prossimu pacchettu fratellu prima ch'ellu sia cunfirmatu: un novu editore npm senza SCM verificazione, un email Gmail, nò repository campu, è parechji nomi di pacchetti corti, generici, chì sunanu cum'è infrastruttura publicati à pochi ghjorni l'unu da l'altru hè, di per sè, abbastanza per ghjustificà una revisione manuale.

Segnalatu à u registru npm. Aggiorneremu questu articulu quandu u contu di l'editore serà eliminatu.

sca-tools-software-strumenti-d'analisi-di-cumpusizione
Priorizà, rimedià è assicurà i vostri risichi di software
Uttene u vostru contu gratuitu.
Nisuna carta di creditu necessaria.

Assicurà u vostru sviluppu è a consegna di software

cù a Suite di Prodotti Xygeni