Pag-atake sa Typosquatting sa DevTap npm

DevTap npm Typosquatting Attack: Unom ka Malisyoso nga Pakete ang Nag-target sa mga Workstation sa Developer

TL; DR

Tali sa Abril 1 ug Mayo 3, 2026, usa ka npm publisher, user0001, narehistro gamit ang wala mapamatud-i nga Gmail address tanvisoul9@gmail.com, hilom nga nagduso og unom ka pakete nga adunay tinuyo nga walay lami, morag imprastraktura nga mga ngalan: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, Ug node-env-resolve.

Ang pinakabag-o nga duha ka bersyon sa node-env-resolve, 1.0.7 ug 1.0.8, gi-flag sa Xygeni's Malware Early Warning (MEW) system niadtong Mayo 2 ug gikumpirma nga malisyoso niadtong Mayo 3.

Ang implant talagsaon alang sa kung unsa kini dili: walay mga Telegram bot, walay mga OAST callback, wala obfuscation, ug walay pagsulay sa pagkuha sa mga kredensyal sa AWS sa oras sa pag-install. Hinuon, postinstall.js magtanom og Windows boot-persistence entry, gamit ang HKCU Run key nga maglunsad wscript.exe batok sa usa ka VBS stub. Dayon kini mopagawas ug usa ka detached Node.js agent nga mag-bundle sa mga module para sa microphone capture, browser-history theft, screenshotting, ug mouse/keyboard simulation.

Gitawag nato kini nga cluster DevTap, human sa kit, kini mopadagan sa makina sa developer.

Ang tanang unom ka pakete anaa pa sa npm sa panahon sa pagsulat niini. Among gisumite na kini sa abuse channel sa registry. Kinahanglan nga kuhaon sa mga defender ang bisan unsang mga install gikan sa publisher samtang naghulat nga matangtang.

Ang Cluster: Unom ka Pakete, Usa ka Tigmantala

Ang account sa tigmantala user0001 wala mapamatud-i. Wala kini SCM beripikasyon, walay email nga naka-bound sa domain, ug walay naunang history. Ang Gmail handle tanvisoul9 wala makita sa bisan unsang ubang rekord sa npm publisher nga among nakit-an.

Ang tanang unom ka pakete naglista sa samang maintainer, gipatik gikan sa samang account, ug parehas og gamit. package.json boilerplate. Walay repository, dili homepage, ug dili description mas taas kay sa usa ka linya.

Ang estratehiya sa pagngalan mao ang makapainteres nga bahin. Dili sama sa usa ka klasiko nga dependency-confusion o typosquat campaign, wala niini nga mga ngalan ang nagtumong sa usa ka piho nga upstream library. Hinuon, kini gi-calibrate aron mawala ngadto sa usa ka tinuod nga package.json or npm ls output.

packageUnang GipatikPinakabag-nga BersyonMga bersikuloPapel sa Cluster
centrallogger2026-04-01 12:46 UTC1.0.95, gikan sa 1.0.5 ngadto sa 1.0.9Hapin sa “logging utility” sa Cluster; pinakaunang gimantala
dom-utils-lite2026-04-14 07:36 UTC1.0.33Heneral nga tabon sa DOM-helper
node-fetch-lite2026-04-19 10:22 UTC1.0.23Gisundog ang pamilya sa node-fetch
ahente sa konektor2026-04-25 05:12 UTC1.0.01Generic nga ngalan nga "ahente"
node-gyp-runtime2026-04-25 05:17 UTC1.0.01Gisundog ang himan sa pagtukod sa lumad nga module
node-env-resolve2026-04-25 05:21 UTC1.0.910, gikan sa 1.0.0 ngadto sa 1.0.9Aktibong dropper; kompletong implant

Mga ngalan sama sa centralogger, node-fetch-lite, Ug node-gyp-runtime gidisenyo aron tan-awon nga dili kontrobersyal sa pagrepaso sa code. Murag mga butang nga naa na sa dependency tree sa usa ka proyekto.

Inubanan sa usa ka presko, wala mapamatud-i nga tigmantala ug nawala nga mga link sa repository, nagporma sila og mailhan nga sumbanan: usa ka aktor nga nagsabwag og mga ngalan nga low-friction ngadto sa registry, dayon dali nga nag-iterate sa usa nga importante. Niini nga kaso, node-env-resolve nakadawat og napulo ka bersyon sulod sa walo ka adlaw.

Unsay Makita sa Windows Dev Box

Ang malisyoso nga kadena sa node-env-resolve:1.0.8 mubo, direkta, ug talagsaon nga daghan og features para sa usa ka npm RAT.

Postinstall: Paglahutay ug Detached Agent

package.json nagdeklarar og usa ka install hook:

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

postinstall.js nagabuhat ug tulo ka butang nga sunod-sunod.

Una, kini mag-stage og installation directory sa gawas sa npm tree. Ang path gikompyut atol sa runtime sa script isip INSTALL_DIR. Dayon kini modagan og internal execSync('npm install --production --silent ...') sulod niini aron makuha ang mga runtime dependencies sa implant. Gibutang niini ang ahente sa disk sa usa ka manwal node_modules dili makit-an sa audit.

Ikaduha, kini magsulat og VBS launcher ug magrehistro niini para sa boot persistence:

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

wscript.exe mao ang Windows Script Host, usa ka gipirmahan nga Microsoft binary nga nagpadagan .vbs mga file nga walay console window. Kana precisnganong kini paborito alang sa mga autorun stubs.

Adunay usab usa ka panagsama reg delete agianan sa sulod src/index.js, nga nagsugyot nga ang implant gidisenyo nga limpyo nga matangtang kon sugoon sa operator.

Ikatulo, kini nagpatunghag usa ka detached child process:

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

Duha ka detalye ang importante dinhi.

SERVER_URL gibasa gikan sa palibot. Tungod niini, ang C2 endpoint ma-configure matag deployment ug dili ilakip sa package. Kanang gamay apan tinuyo nga pagpili makapildi sa kadaghanan sa mga static-IOC sweep.

Usab, ang natawo nga anak makapanunod sa tibuok nga palibot sa ginikanan. Busa, bisan unsa NPM_TOKEN, AWS_*, GITHUB_TOKEN, o SSH-agent socket nga anaa sa developer shell sa panahon sa install time travels ngadto sa long-lived agent's memory.

Unsay Gipadala sa Ahente

Ang giputos src/ Ang tree naglakip sa tulo ka modules kansang mga ngalan lamang ang nagsaysay sa istorya: audioCapture.js, browserHistory.js, Ug systemInfo.js.

Ang listahan sa runtime dependency, nga nasulbad atol sa staged npm install, nagpamatuod niini.

Kini nga pamaagi naghimo sa usa ka magubot nga insidente nga usa ka kontrolado nga tubag.

Imbis nga mo-react nga walay pagtagad, ang mga team molihok uban ang klaro nga prayoridad ug dali nga pag-ayo.

pagsaligUnsa ang Gamit Niini nga Konteksto
screenshot-desktopPanagsa nga pagkuha sa screen
@nut-tree-fork/nut-jsAwtomasyon sa mouse ug keyboard / simulasyon sa input
mas maayo-sqlite3Direktang pagbasa sa mga database sa SQLite sa Chrome, Edge, ug Firefox History
adm-zipPaghiusa sa mga nakolektang artifact sa dili pa ang exfiltration
MahaitPag-usab sa gidak-on / pag-compress sa mga screenshot ug mga artifact sa imahe
socket.io-kliyentePadayon nga bidirectional nga C2 channel
node-machine-idLig-on nga fingerprint kada host para sa pagsubay sa biktima

systemInfo.js Nagtawag os.networkInterfaces() para sa dugang nga fingerprinting sa dili pa ang unang beacon.

Ngano nga ang Audio Capture Mao ang Talagsaong Signal

Kadaghanan sa mga npm RAT nga among gi-triage sa MEW mohunong sa install-time secret theft. Nabasa nila ~/.npmrc, pagbasa ~/.aws/credentials, pagkalot process.env, POST ngadto sa usa ka webhook, ug exit. Kana mohaom sa usa ka smash-and-grab economic model. Ang mga kredensyal adunay mubo nga half-life, ug ang tig-atake kinahanglan nga makakwarta dayon.

node-env-resolve lahi ra ang porma.

Ang persistence gi-set up aron mabuhi sa pag-reboot. Ang agent modagan nga detached ug molungtad og dugay ubos sa wscript.exeAng kit nga dala niini para magamit sa makina sa usa ka developer, dili para kuhaon ug biyaan: usa ka microphone recorder, usa ka keyboard/mouse driver, kompletong browser-history ingest, screen capture, ug usa ka interactive Socket.IO channel balik sa usa ka ma-configure nga C2.

Ang partikular nga microphone capture mao ang linya nga wala gilapas niini nga kampanya nga wala sa kadaghanan sa npm malware.

Ang workstation sa developer, samot na nga nagkadako, mao usab ang workstation diin ang mga developer mohimo og mga stand-up, motawag sa kustomer, modiskusyon sa disenyo, ug mo-on-call bridge. Ang implant nga mo-record sa mikropono dili gyud nagsunod sa npm token sa developer. Kini nagsunod sa gisulti sa developer atubangan sa laptop.

Kana nga kapabilidad, dugang sa kakulang sa obfuscation ug ang pagkawala sa bisan unsang magarbo nga install-time exfiltration, mabasa isip pre-positioning alang sa targeted access imbes nga oportunistikong pagpangawat sa kredensyal.

Dili lang kini ang among gipasabot nga attribution. Among gipunting ang operational profile.

npm typosquatting attack - DevTab

Ang walo ka adlaw nga iteration cadence sa node-env-resolve mao ang labing detalyado nga operasyonal nga detalye sa timeline.

Dili kini usa ka "fire-and-forget drop". Aktibo nga gimentinar sa publisher ang dropper, nga kasagaran nagpasabot og duha ka butang. Mahimo nila kining i-tune batok sa mga test environment sa dili pa ang mas lapad nga deployment, o aduna na silay install telemetry nga mobalik ug motubag niini.

Ang laing lima ka pakete walay nakitang churn human sa ilang inisyal nga pagmantala. Kini mohaom sa sumbanan nga "stage once, leave named" para sa supporting cluster samtang ang paningkamot sa engineering nagpunting sa pakete nga naghimo sa trabaho.

Atribusyon: Gagmay nga mga Timaan, Walay Lig-on nga Hukom

Public OSINT nipis ang mga signal, ug dili nato kini palapdan. Unsay maobserbahan:

Ang Gmail handle tanvisoul9 medyo susama sa gihatag nga ngalan sa Habagatang Asya, ang "Tanvi." Kini usa ka luya nga signal. Ang mga handle sa Gmail dili identidad, ug ang nagsunod soul9 kay generic. Dili luwas ang pag-ingon nga ang geograpiya gikan lang sa usa ka email local-part.

Ang estilo sa code dili talagsaon sa Node.js: standard mga tawag sa librarya sama sa os, child_process, spawn, Ug reg addWalay obfuscation, walay string rotation, ug walay anti-debug logic. Komportable ang tagsulat sa mga Windows registry primitives ug detached-child-process orchestration, apan daw wala mangita og mas tago nga tradecraft nga posible nilang gamiton.

Ang mga dependency hingpit nga wala na sa estante ug nailhan na: screenshot-desktop, nut-js, better-sqlite3, Ug socket.io-clientWalay custom protocol, walay rolled-from-scratch nga C2 stack, ug walay bag-ong persistence trick gawas sa usa ka libro. Yawe sa Pagdagan sa HKCU. Usa kini ka takos nga integrator, dili usa ka tagsulat sa himan.

Wala kami nakakita og mga string, naka-embed nga mga komento, locale data, o mga fingerprint sa timezone sa compiler-output sulod sa mga gipatik nga artifact.

Among gisusi kon adunay code nga nagsapaw sa mga naunang kampanya nga among gisubay na, lakip na Shai Hulud, Owlion, Buildkite, ug ang bag-o nga heibai / claude-code-best Pamilya sa clone nga Anthropic-CLI. Wala mi nakita: walay gipaambit nga mga pattern sa C2, walay gipaambit nga mga layout sa file, ug walay gipaambit nga mga idiom.

Ang dili namo isulti: nga kini usa ka aktor sa estado, usa ka nailhan nga grupo, o heyograpikanhong nalambigit sa bisan unsang piho nga nasud.

Ang operational profile nahiuyon sa usa ka gamay, kasarangan nga kahanas nga grupo nga naghimo sa pagpaniid sa developer-workstation. Lagmit kini gimaneho sa pinansyal pinaagi sa downstream nga paggamit sa access, apan posible usab nga reconnaissance-as-a-service alang sa usa ka lahi nga pumapalit.

Duha ka dili direktang punto ang nagsuporta sa maong teksto: ang paglikay sa mga mekaniko sa exfiltration nga makadani sa atensyon nga dali nga makasunog sa cluster, sama sa mga Telegram bot, oastify.com, o mga canarytokens, ug ang tinuyo nga walay lami nga mga ngalan sa pakete, nga mas pabor sa hilom nga mga long-tail install kaysa sa mubo nga taas nga volume nga pagsaka.

Mga Timailhan sa Kompromiso ug Pag-ila

Mga Pakete ug Tigmantala
Fieldbili
tigmantala sa npmUser0001
Email sa tigmantalatanvisoul9@gmail.com, wala pa mapamatud-i
packagescentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
Nakumpirma nga malisyosonode-env-resolve@1.0.7, node-env-resolve@1.0.8
Mga Artifact sa Host
Typebili
Yawe sa pagkamapinadayononHKCU\Software\Microsoft\Windows\CurrentVersion\Run
Bili sa pagpadayonNgalan sa baryabol; datos sa porma nga wscript.exe " \\ .vbs"
I-install ang kaw-itpostinstall: node postinstall.js sa manifest sa pakete
Mga modyul sa implantsrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Direktoryo sa pag-stageAng INSTALL_DIR nasulbad sa gawas sa node_modules sa proyekto; ang lokasyon gitakda sa postinstall.js sa oras sa pag-install
network
Typebili
Transportasyon sa C2socket.io-client, padayon nga bidirectional channel
C2 nga katapusan nga puntoGihatag sa ahente pinaagi sa SERVER_URL environment variable; wala gi-hard-code ngadto sa mga gipatik nga artifact

Mga Nota sa Pag-ila

Duha ka lagda ang makadakop niini nga pamilya nga dili kinahanglan ang C2 endpoint.

Una, i-flag ang mga post-install script nga naghimo og internal npm install ngadto sa usa ka agianan gawas sa kaugalingong direktoryo sa pakete. Bisan unsang lehitimong prebuild downloader, sama sa node-gyp mga rebuild o prebuilt-binary downloader, magsulat sulod sa package o ngadto sa platform-standard mga agianan sa cache nga adunay napamatud-an nga mga hash. Dili kini magsulat sa usa ka bag-ong gibuhat INSTALL_DIR sa ubang dapit sa disk.

Ikaduha, i-flag ang mga post-install script nga nag-isyu reg add HKCU\…\Run uban sa wscript.exe isip launcher. Kini dili gyud lehitimo gikan sa usa ka npm package. I-flag ug i-quarantine kini.

Ang ikatulong heuristic mapuslanon para sa pag-ila sa sunod nga sibling package sa dili pa kini kumpirmahon: usa ka bag-ong npm publisher nga walay SCM beripikasyon, usa ka email sa Gmail, dili repository natad, ug daghang mubo, generic, ug morag imprastraktura nga mga ngalan sa pakete nga gipatik sulod sa pipila ka adlaw ang usag usa, sa iyang kaugalingon, igo na aron mogarantiya sa manwal nga pagrepaso.

Gireport na sa npm registry. Among i-update kini nga post kung matangtang na ang publisher account.

mga himan sa pag-analisa sa komposisyon sa software sa sca
Unaha, ayoha, ug siguroha ang mga risgo sa imong software
Kuhaa ang Imong Libre nga Account.
Walay gikinahanglan nga credit card.

Seguraduha ang Imong Pagpalambo ug Paghatud sa Software

uban sa Xygeni Product Suite