DevTap npm Typosquatting erasoa

DevTap npm Typosquatting erasoa: sei pakete gaiztok garatzaileen lan-estazioak dituzte jomugan

TL; DR

2026ko apirilaren 1etik maiatzaren 3ra bitartean, npm argitaratzaile bakar batek, user0001, egiaztatu gabeko Gmail helbidearekin erregistratuta tanvisoul9@gmail.com, isilean bultzatu zituen sei pakete nahita leunak ziren eta azpiegitura-kutsuko izenekin: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, eta node-env-resolve.

Azken bi bertsioak node-env-resolve, 1.0.7 eta 1.0.8 bertsioak Xygeni-ren Malware Early Warning (MEW) sistemak markatu zituen maiatzaren 2an eta gaiztoak zirela baieztatu zuen maiatzaren 3an.

Inplantea ezohikoa da ez denagatik: ez dago Telegram bot-ik, ez OAST dei-itzulerarik, ez Nahaste, eta ez da AWS kredentzialak instalazio garaian lortzeko saiakerarik egin. Horren ordez, postinstall.js Windows abio-iraunkortasun sarrera bat landatzen du, HKCU Exekutatu gako bat erabiliz, abiarazten duena wscript.exe VBS stub baten aurka. Ondoren, Node.js agente bereizi bat sortzen du, mikrofonoa harrapatzeko, arakatzailearen historia lapurtzeko, pantaila-argazkiak egiteko eta saguaren/teklatuaren simulaziorako moduluak biltzen dituena.

Kluster honi deitzen diogu DevTap, kitaren ondoren garatzaile baten makinan exekutatzen uzten du.

Sei paketeak npm-n zeuden martxan idazteko unean. Erregistroaren gehiegikeria kanalera bidali ditugu. Defendatzaileek argitaratzailearen instalazio guztiak kendu beharko lituzkete kentzeko zain daudenak.

Klusterra: Sei pakete, argitaletxe bat

Argitaratzailearen kontua. user0001 egiaztatu gabe dago. Ez du SCM egiaztapena, domeinuari lotutako posta elektronikorik ez eta aurrekaririk ez. Gmail-eko erabiltzaile-izena tanvisoul9 ez da aurkitu ahal izan dugun beste npm argitaratzaile erregistro batean agertzen.

Sei pakete guztiek mantentzaile bera zerrendatzen dute, kontu beretik argitaratu dira eta kontu bera partekatzen dute. package.json eredu-plaka. Ez dago repository, ez homepage, eta ez description lerro bakarra baino luzeagoa.

Izendatze estrategia da zati interesgarria. Mendekotasun-nahasmen klasiko edo typosquat kanpaina ez bezala, izen hauek ez dute goiko liburutegi zehatz bati zuzenduta. Horren ordez, benetako liburutegi batean desagertzeko kalibratuta daude. package.json or npm ls irteera.

PackageLehen aldiz argitaratuaAzken bertsioaBertsioakKlusterretako rola
centralogger2026-04-01 12:46 UTC1.0.95, 1.0.5tik 1.0.9raKlusterren "erregistro-utilitatea" azala; lehen argitalpena
dom-utils-lite2026-04-14 07:36 UTC1.0.33DOM laguntzaile generikoen azala
nodo-eskuratze-lite2026-04-19 10:22 UTC1.0.23Nodoak bilatzeko familia imitatzen du
konektore-agentea2026-04-25 05:12 UTC1.0.01"Agente" izen generikoa
nodo-gyp-runtime2026-04-25 05:17 UTC1.0.01Modulu natiboak eraikitzeko tresnak imitatzen ditu
nodo-ingurunea-ebazpena2026-04-25 05:21 UTC1.0.910, 1.0.0tik 1.0.9raTantagailu aktiboa; inplante osoa

Izenak bezala centralogger, node-fetch-lite, eta node-gyp-runtime kodearen berrikuspenean eztabaidarik gabeko itxura izateko diseinatuta daude. Proiektu baten mendekotasun-zuhaitzean dagoeneko egongo liratekeen gauzen antza dute.

Argitaratzaile berri eta egiaztatu gabeko batekin eta biltegiko estekak falta direla kontuan hartuta, eredu ezagugarri bat osatzen dute: aktore batek izenak erregistroan sartzen ditu, eta gero azkar errepikatzen du garrantzitsuena. Kasu honetan, node-env-resolve hamar bertsio jaso zituen zortzi egunetan.

Zer sartzen da Windows Dev Box batean?

Kate gaiztoa martxan node-env-resolve:1.0.8 laburra, zuzena eta ezohiko ezaugarriz aberatsa da npm RAT batentzat.

Instalazio ostekoa: Iraunkortasuna eta agente deskonektatua

package.json instalazio-hook bakarra deklaratzen du:

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

postinstall.js hiru gauza egiten ditu ordenan.

Lehenik eta behin, npm zuhaitzetik kanpo instalazio-direktorio bat prestatzen du. Bidea exekuzio-garaian kalkulatzen da script-ean honela: INSTALL_DIROndoren, barneko bat exekutatzen du execSync('npm install --production --silent ...') barruan inplantearen exekuzio-mendekotasunak ateratzeko. Horrek agentea diskoan jartzen du eskuzko nonbait node_modules auditoriak ez du aurkituko.

Bigarrenik, VBS abiarazle bat idazten du eta abioko iraunkortasunerako erregistratzen du:

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

wscript.exe Windows Script Host da, exekutatzen den Microsoft-en binario sinatu bat .vbs kontsola leihorik gabeko fitxategiak. Hori aurrezciszergatik den hobetsia autorregulazio stub-etarako.

Parekatze bat ere badago reg delete barruko bidea src/index.js, inplantea operadorearen aginduz erraz kendu ahal izateko diseinatuta dagoela iradokiz.

Hirugarrenik, prozesu haur-banatu bat sortzen du:

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

Bi xehetasunek garrantzia dute hemen.

SERVER_URL ingurunetik irakurtzen da. Ondorioz, C2 amaiera-puntua inplementazio bakoitzeko konfigura daiteke eta ez dago paketean txertatuta. Aukera txiki baina nahita horrek IOC estatikoen miaketa gehienak zapuzten ditu.

Gainera, sortutako haurrak guraso-ingurune osoa heredatzen du. Beraz, edozein NPM_TOKEN, AWS_*, GITHUB_TOKEN, edo instalazio garaian garatzaileen shellean dagoen SSH agentearen socket-a agente iraunkorren memoriara bidaiatzen du.

Agenteak zer bidaltzen duen

Multzokatua src/ Zuhaitzak hiru modulu ditu, eta haien izenak bakarrik kontatzen du istorioa: audioCapture.js, browserHistory.js, eta systemInfo.js.

Exekuzio-denbora menpekotasunen zerrenda, fasean zehar konponduta npm install, berresten ditu.

Ikuspegi honek gertakari kaotiko bat erantzun kontrolatu bihurtzen du.

Itsu-itsuan erreakzionatu beharrean, taldeek honekin funtzionatzen dute lehentasun argiak eta konponketa azkarra.

DependentziaZertarako balio du testuinguru honetan
pantaila-mahaigainaPantaila-argazki aldian-aldian
@nut-tree-fork/nut-jsSaguaren eta teklatuaren automatizazioa / sarrera simulazioa
sqlite3 hobeaChrome, Edge eta Firefox-eko Historia SQLite datu-baseen irakurketa zuzenak
adm-zipBildutako artefaktuak kanporatu aurretik multzokatzea
zorrotzPantaila-argazkien eta irudi-artefaktuen tamaina aldatzea / konprimitzea
socket.io-bezeroaC2 kanal bidirekzional iraunkorra
nodo-makina-idBiktimaren jarraipena egiteko ostalari bakoitzeko hatz-marka egonkorra

systemInfo.js deiak os.networkInterfaces() lehenengo baliza baino lehen hatz-markak hartzeko gehigarriak.

Zergatik den audio-harrapaketa seinale nabarmenena

MEW-en sailkatzen ditugun npm RAT gehienak instalazio-garaian lapurreta sekretuan gelditzen dira. Irakurtzen dute ~/.npmrc, irakurri ~/.aws/credentials, arraskatu process.env, POST egin webhook batera, eta irten. Hori smash-and-grab eredu ekonomiko batekin bat dator. Kredentzialek bizitza erdia laburra dute, eta erasotzaileak azkar monetizatu behar du.

node-env-resolve forma aldetik desberdina da.

Iraunkortasuna berrabiaraztean ere bizirauteko konfiguratuta dago. Agenteak modu independentean eta iraupen luzekoan exekutatzen da wscript.exeDakarren kit-a garatzaile baten makinan egoteko da, ez hartu eta uzteko: mikrofono grabagailu bat, teklatu/sagu kontrolatzaile bat, arakatzailearen historia osoa jasotzea, pantaila-argazkia eta Socket.IO kanal interaktibo bat konfigura daitekeen C2 batera itzultzeko.

Mikrofonoen harrapaketa da bereziki kanpaina honek npm malware gehienek zeharkatzen ez duten muga.

Garatzaileen lan-estazio bat, gero eta gehiago, garatzaileek zutik dauden elkarrizketak, bezeroekin deiak, diseinu-eztabaidak eta txandako zubiak egiten dituzten lan-estazioa da. Mikrofonoa grabatzen duen inplante bat ez dago benetan garatzailearen npm tokenaren ondoren. Garatzaileak ordenagailu eramangarriaren aurrean esaten duenaren ondoren baizik.

Gaitasun multzo horrek, gehi nahasmendurik ezak eta instalazio-garaian esfiltrazio deigarririk ezak, sarbide zuzendurako aldez aurretiko kokapen gisa irakurtzen da, eta ez kredentzial lapurreta oportunista gisa.

Ez dugu hemendik bakarrik atribuziorik baieztatzen. Eragiketa-profila aztertzen ari gara.

npm typosquatting erasoa - DevTab

Zortzi eguneko iterazio-kadentzia node-env-resolve denbora-lerroan xehetasun operatiboki esanguratsuena da.

Hau ez da "su eta ahaztu" den deskarga bat. Argitaratzaileak aktiboki mantentzen du deskargatzailea, eta horrek normalean bi gauza hauetako bat esan nahi du. Edo proba-inguruneetan doitzen ari dira hedapen zabalagoa egin aurretik, edo instalazio-telemetria dagoeneko itzultzen ari dira eta horri erantzuten ari dira.

Beste bost paketeek ez zuten aldaketarik izan hasierako argitalpenaren ondoren. Hori "behin fasea, izendatua utzi" ereduarekin bat dator euskarri-klusterrarentzat, ingeniaritza-lana lana egiten duen paketean zentratzen den bitartean.

Aitorpena: Pista txikiak, epai irmorik ez

Publikoa OSINT seinaleak meheak dira, eta ez ditugu luzatuko. Behagarria dena:

Gmail-en erabiltzaile-izena tanvisoul9 Hego Asiako izen baten antza du neurri batean, “Tanvi”. Seinale ahula da hau. Gmail-eko erabiltzaile-izena ez da identitatea, eta amaierako soul9 generikoa da. Ez da segurua geografia ondorioztatzea posta elektronikoaren tokiko zati batetik soilik.

Kode estiloa ez da apartekoa Node.js-en: standard liburutegiko deiak, hala nola os, child_process, spawn, eta reg addEz dago nahasmendurik, ez kateen biraketarik eta ezta arazketa-kontrako logikarik ere. Egilea eroso sentitzen da Windows erregistroko primitiboekin eta detached-child-process orkestrazioarekin, baina ez dirudi erabil ditzakeen merkataritza-arlo ezkutuagoetara jotzen ari denik.

Mendekotasunak guztiz ezagunak dira eta prest daude: screenshot-desktop, nut-js, better-sqlite3, eta socket.io-clientEz dago protokolo pertsonalizaturik, ez C2 pilaketa hutsetik sortutakorik, ezta testuliburu batetik haragoko iraunkortasun trikimailu berririk ere. HKCU Exekutatu teklaIntegratzaile gaitua da hau, ez tresnen egilea.

Ez dugu ingelesez ez diren katerik, txertatutako iruzkinik, lokalizazio-daturik edo konpiladore-irteerako ordu-zonaren hatz-markik aurkitu argitaratutako artefaktuen barruan.

Jarraitzen ditugun aurreko kanpainekin kodea gainjartzen den egiaztatu dugu, besteak beste: Shai Hulud, Owlivion, Buildkite, eta azken heibai / claude-code-best Anthropic-CLI klon familia. Ez dugu bat ere aurkitu: ez C2 eredu partekaturik, ez fitxategi diseinu partekaturik, ez idioma partekaturik.

Ez genuke esango: hau estatu-eragile bat denik, talde ezagun bat denik edo geografikoki herrialde zehatz bati lotuta dagoenik.

Eragiketa-profila garatzaileen lan-estazioaren zaintza egiten duen talde txiki eta erdi-trebe batekin bat dator. Seguruenik, finantza-motibazioa sarbidearen ondorengo erabileraren bidezkoa izango da, baina baliteke erosle bereizi baten zerbitzu gisa ezagutza-zerbitzu gisa ere egitea.

Bi puntu zeharka daude aldekoak: klusterra azkar erreko luketen kanporatze-mekanika deigarriak saihestea, hala nola Telegram bot-ak, oastify.com, edo canarytokenak, eta nahita pakete-izen leunak, bolumen handiko igoera labur baten gainetik instalazio luze lasaiak nahiago dituztenak.

Konpromisoaren eta Detekzioaren Adierazleak

Paketeak eta argitaratzailea
FieldBalio
npm argitaratzaileauser0001
Argitaratzailearen helbide elektronikoatanvisoul9@gmail.com, egiaztatu gabe
Paketeakcentralogger, dom-utils-lite, node-fetch-lite, konektore-agentea, node-gyp-runtime, node-ingurunea-ebazpena
Gaiztoa baieztatutanode-env-resolve@1.0.7, node-env-resolve@1.0.8
Ostatu-artefaktuak
MotaBalio
Iraunkortasun-giltzaHKCU\Software\Microsoft\Windows\UnekoBertsioa\Exekutatu
Iraunkortasun balioaAldagaiaren izena; wscript.exe formako datuak " \\ .vbs"
Instalatu kakoapostinstall: postinstall.js nodoa paketearen manifestuan
Inplante moduluaksrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Eszenaratze direktorioaINSTALL_DIR proiektuaren node_modules-etik kanpo ebatzita; kokapena postinstall.js-k ezarri du instalazio unean
Sarea
MotaBalio
C2 garraioasocket.io-client, norabide bikoitzeko kanal iraunkorra
C2 amaiera-puntuaAgenteari SERVER_URL ingurune-aldagaiaren bidez emana; ez da argitaratutako artefaktuetan gogor kodetuta sartua

Detekzio Oharrak

Bi arauk harrapatzen dute familia hau C2 amaiera-puntua behar izan gabe.

Lehenik eta behin, barneko ekintza egiten duten instalazio osteko script-ak markatu npm install paketearen direktoriotik kanpoko bide batera. Aurrez eraikitako edozein deskargatzaile legitimo, adibidez node-gyp berreraikitzen ditu edo aurrez eraikitako binario deskargatzaileak, paketearen barruan edo plataforman idazten du-standard egiaztatutako hash-ekin cache bideak. Ez du sortu berri den batean idazten INSTALL_DIR diskoan beste nonbait.

Bigarrenik, arazoak dituzten instalazio osteko script-ak markatu reg add HKCU\…\Run batera wscript.exe abiarazle gisa. Hau funtsean ez da inoiz zilegi npm pakete batetik. Markatu eta jarri berrogeialdian.

Hirugarren heuristiko bat erabilgarria da hurrengo anai-arreba paketea baieztatu aurretik antzemateko: npm argitaratzaile berri bat, inolako... SCM egiaztapena, Gmail posta elektroniko bat, ez repository eremua, eta elkarrengandik egun gutxira argitaratzen diren hainbat pakete-izen labur, generiko eta azpiegitura-kutsukoak izatea nahikoa da, berez, eskuzko berrikuspena justifikatzeko.

npm erregistroari jakinarazi zaio. Argitaratzaile kontua kentzen denean mezu hau eguneratuko dugu.

sca-tools-software-konposizio-analisi-tresnak
Lehentasuna eman, konpondu eta babestu zure software arriskuak
Lortu zure doako kontua.
Ez da beharrezkoa kreditu txartelik.

Ziurtatu zure softwarearen garapena eta entrega

Xygeni produktu multzoarekin