DevTap npm Typosquatting árás

DevTap npm Typosquatting árás: Sex illgjarn pakkar miða á vinnustöðvar forritara

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.

PakkiFyrst birtNýjasta útgáfaútgáfurHlutverk í klasanum
miðlægur2026-04-01 12:46 UTC1.0.95, frá 1.0.5 til 1.0.9Forsíða „skráningargagnsemi“ klasans; fyrsta útgáfa
dom-utils-lite2026-04-14 07:36 UTC1.0.33Almenn DOM-hjálparhlíf
hnúta-fetch-lite2026-04-19 10:22 UTC1.0.23Líkir eftir hnúta-sækja fjölskyldu
tengimiðlari2026-04-25 05:12 UTC1.0.01Almennt heiti „umboðsmaður“
keyrslutími hnúta-gyp2026-04-25 05:17 UTC1.0.01Líkir eftir verkfærum fyrir smíði innfæddra eininga
hnútaumhverfi-leysa2026-04-25 05:21 UTC1.0.910, frá 1.0.0 til 1.0.9Virkur 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}\"" /f

wscript.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æðiTil hvers er það í þessu samhengi
skjámynd-skrifborðRegluleg skjámyndataka
@hnetutré-gaffall/hnetu-jsSjálfvirkni músar og lyklaborðs / innsláttarhermun
betri-sqlite3Bein lestur á SQLite gagnagrunnum í Chrome, Edge og Firefox History
adm-póstnúmerSameining safnaðra gripa fyrir upptöku
skarpurAð breyta stærð / þjappa skjáskotum og myndbrotum
socket.io-viðskiptavinurVaranleg tvíátta C2 rás
hnútavélaauðkenniStöð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.

npm typosquatting árás - DevTab

Á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
Fieldgildi
npm útgefandiuser0001
Netfang útgefandatanvisoul9@gmail.com, óstaðfest
Pakkarcentralogger, dom-utils-lite, node-fetch-lite, tengiforrit, node-gyp-keyrslutími, node-env-resolve
Staðfest að þetta sé illgjarnthnúta-umhverfi-leysa@1.0.7, hnúta-umhverfi-leysa@1.0.8
Gripir hýsils
Gerðgildi
ÞrautseigjulykillHKCU\Software\Microsoft\Windows\CurrentVersion\Run
VaranleikagildiBreytuheiti; gögn á forminu wscript.exe " \\ .vbs"
Setja upp krókpostinstall: hnútur postinstall.js í pakkaupplýsingaskránni
Ígræðslueiningarsrc/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 flutningursocket.io-client, varanleg tvíátta rás
C2 endapunkturVeitt 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.

sca-tools-hugbúnaður-samsetningargreiningartól
Forgangsraðaðu, lagfærðu og tryggðu hugbúnaðaráhættu þína
Fáðu þér ókeypis aðgang.
Ekkert kreditkort krafist.

Tryggðu hugbúnaðarþróun og afhendingu þína

með Xygeni vörupakkanum