Shambulio la Uchapaji la DevTap npm

Shambulio la Kuandika kwa DevTap npm: Vifurushi Sita Vibaya Vinalenga Vituo vya Kazi vya Wasanidi Programu

TL; DR

Kati ya Aprili 1 na Mei 3, 2026, mchapishaji mmoja wa npm, user0001, imesajiliwa na anwani ya Gmail ambayo haijathibitishwa tanvisoul9@gmail.com, walisukuma vifurushi sita kimya kimya kwa majina yasiyo na maana na yanayoonekana kama ya miundombinu: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, na node-env-resolve.

Matoleo mawili ya hivi karibuni ya node-env-resolve, 1.0.7 na 1.0.8, ziliripotiwa na mfumo wa Xygeni wa Onyo la Mapema la Programu Hasidi (MEW) mnamo Mei 2 na kuthibitishwa kuwa na programu hasidi mnamo Mei 3.

Kipandikizi hicho si cha kawaida kwa vile sivyo: hakuna roboti za Telegram, hakuna marejesho ya OAST, hapana kufutwa, na hakuna jaribio la kuchukua vitambulisho vya AWS wakati wa kusakinisha. Badala yake, postinstall.js huweka kiingilio cha uimara wa kuwasha Windows, kwa kutumia kitufe cha HKCU Run kinachozinduliwa wscript.exe dhidi ya kijikaratasi cha VBS. Kisha hutoa wakala wa Node.js aliyejitenga ambaye huunganisha moduli za kunasa maikrofoni, wizi wa historia ya kivinjari, upigaji picha, na uigaji wa kipanya/kibodi.

Tunaita kundi hili DevTap, baada ya kifaa hicho, huondoka kikifanya kazi kwenye mashine ya msanidi programu.

Vifurushi vyote sita vilikuwa moja kwa moja mnamo npm wakati wa kuandika habari hii. Tumeviwasilisha kwenye kituo cha unyanyasaji cha usajili. Watetezi wanapaswa kuondoa usakinishaji wowote kutoka kwa mchapishaji wakisubiri kuondolewa.

Kundi: Vifurushi Sita, Mchapishaji Mmoja

Akaunti ya mchapishaji user0001 haijathibitishwa. Haina SCM uthibitishaji, hakuna barua pepe inayohusiana na kikoa, na hakuna historia ya awali. Kishikio cha Gmail tanvisoul9 haionekani katika rekodi nyingine yoyote ya mchapishaji wa npm ambayo tunaweza kuipata.

Vifurushi vyote sita vinaorodhesha mhudumu mmoja, vilichapishwa kutoka kwa akaunti moja, na vinashirikiwa sawa package.json sahani ya boiler. Hakuna repositoryKatika homepage, na hapana description ndefu zaidi ya mstari mmoja.

Mkakati wa majina ndio sehemu ya kuvutia. Tofauti na kampeni ya kawaida ya utegemezi-mkanganyiko au ya uchapaji, hakuna hata moja kati ya majina haya yanayolenga maktaba maalum ya juu. Badala yake, yamepangwa ili kutoweka katika hali halisi. package.json or npm ls pato.

mfukoKuchapishwa kwa kwanzaToleo la MwishomatoleoJukumu katika Kundi
mpiga picha mkuu2026-04-01 12:46 UTC1.0.95, kuanzia 1.0.5 hadi 1.0.9Jalada la "matumizi ya kumbukumbu" la Cluster; chapisho la mapema zaidi
dom-utils-lite2026-04-14 07:36 UTC1.0.33Jalada la msaidizi wa DOM la jumla
nodi-kuchota-lite2026-04-19 10:22 UTC1.0.23Familia ya kuiga nodi
wakala wa kiunganishi2026-04-25 05:12 UTC1.0.01Jina la jumla "wakala"
wakati wa kukimbia wa nodi-jasi2026-04-25 05:17 UTC1.0.01Vifaa vya ujenzi wa moduli asilia za mimics
suluhisho la nodi-env2026-04-25 05:21 UTC1.0.910, kuanzia 1.0.0 hadi 1.0.9Kitoneshi kinachofanya kazi; kipandikizi kamili

Majina kama centralogger, node-fetch-lite, na node-gyp-runtime zimeundwa ili zionekane zisizo na utata katika ukaguzi wa msimbo. Zinasikika kama vitu ambavyo tayari vingekuwa kwenye mti wa utegemezi wa mradi.

Pamoja na mchapishaji mpya, ambaye hajathibitishwa na viungo vya hazina vilivyokosekana, huunda muundo unaotambulika: mwigizaji hupanda majina yenye msuguano mdogo kwenye sajili, kisha hurudia haraka ile muhimu. Katika hali hii, node-env-resolve ilipokea matoleo kumi katika siku nane.

Kinachotua kwenye Kisanduku cha Wasanidi Programu cha Windows

Msururu wa nia mbaya unaendelea node-env-resolve:1.0.8 ni fupi, ya moja kwa moja, na yenye vipengele vingi visivyo vya kawaida kwa RAT ya npm.

Baada ya Kusakinisha: Uvumilivu na Wakala Aliyetenganishwa

package.json inatangaza ndoano moja ya usakinishaji:

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

postinstall.js hufanya mambo matatu kwa mpangilio.

Kwanza, huweka saraka ya usakinishaji nje ya mti wa npm. Njia huhesabiwa wakati wa utekelezaji katika hati kama INSTALL_DIRKisha inaendesha mfumo wa ndani execSync('npm install --production --silent ...') ndani yake ili kuvuta utegemezi wa wakati wa utekelezaji wa kipandikizi. Hii inaweka wakala kwenye diski mahali fulani kama mwongozo node_modules ukaguzi hautapata.

Pili, huandika kizindua cha VBS na kusajili kwa uendelevu wa kuwasha:

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

wscript.exe ni Windows Script Host, binary iliyosainiwa ya Microsoft inayoendeshwa .vbs faili zisizo na dirisha la koni. Hiyo ni kablacisKwa nini inapendelewa kwa vijiti vya autorun.

Pia kuna ulinganifu reg delete njia ya ndani src/index.js, ikidokeza kwamba kipandikizi kimeundwa ili kiweze kutolewa kwa urahisi kwa amri ya opereta.

Tatu, husababisha mchakato wa mtoto uliojitenga:

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

Maelezo mawili ni muhimu hapa.

SERVER_URL inasomwa kutoka kwa mazingira. Kwa hivyo, sehemu ya mwisho ya C2 inaweza kusanidiwa kwa kila uwekaji na haijajumuishwa kwenye kifurushi. Chaguo hilo dogo lakini la makusudi hushinda majaribio mengi ya IOC tuli.

Pia, mtoto aliyezaliwa hurithi mazingira kamili ya mzazi. Kwa hivyo, yoyote NPM_TOKEN, AWS_*, GITHUB_TOKEN, au soketi ya wakala wa SSH iliyopo kwenye ganda la msanidi programu wakati wa kusakinisha husafiri hadi kwenye kumbukumbu ya wakala aliyedumu kwa muda mrefu.

Kile Ajenti Anachosafirisha

Zilizounganishwa src/ mti una moduli tatu ambazo majina yake pekee yanaelezea hadithi: audioCapture.js, browserHistory.js, na systemInfo.js.

Orodha ya utegemezi wa wakati wa utekelezaji, iliyotatuliwa wakati wa hatua npm install, inathibitisha.

Mbinu hii hubadilisha tukio la machafuko kuwa jibu linalodhibitiwa.

Badala ya kujibu kwa upofu, timu hufanya kazi na uwekaji kipaumbele wazi na urekebishaji wa haraka.

utegemeziNi kwa Nini Katika Muktadha Huu
eneo-kazi la picha ya skriniUpigaji picha wa skrini mara kwa mara
@uma-wa-mti-wa-karanga/js za karangaUigaji otomatiki/uigaji wa ingizo la kipanya na kibodi
better-sqlite3Usomaji wa moja kwa moja wa hifadhidata za SQLite za Chrome, Edge, na Firefox History
zip ya admKukusanya vitu vilivyokusanywa kabla ya kuchujwa
mkaliKubadilisha ukubwa/kubana picha za skrini na vitu vya kale vya picha
mteja wa soketi.ioNjia ya C2 inayoendelea pande mbili
kitambulisho cha mashine ya nodiKidole cha kidole thabiti kwa kila mwenyeji kwa ajili ya ufuatiliaji wa mwathiriwa

systemInfo.js wito os.networkInterfaces() kwa ajili ya upigaji alama za vidole zaidi kabla ya beacon ya kwanza.

Kwa Nini Kurekodi Sauti Ni Ishara Bora Zaidi

RAT nyingi za npm tunazojaribu katika MEW husimama wakati wa wizi wa siri wa wakati wa usakinishaji. Zinasomeka. ~/.npmrc, soma ~/.aws/credentials, kukwaruza process.env, TUMIA kwenye mtandao, na utoke. Hiyo inafaa mfumo wa kiuchumi wa smash-and-grab. Vitambulisho vina muda mfupi wa nusu ya maisha, na mshambuliaji anahitaji kupata mapato haraka.

node-env-resolve ni tofauti katika umbo.

Uvumilivu umewekwa ili kuendelea kuwasha upya. Wakala huendesha kwa kutengana na kudumu kwa muda mrefu chini ya wscript.exeKifaa kinachobeba ni cha kuwa hapo kwenye mashine ya msanidi programu, si cha kunyakua na kuondoka: kinasa sauti cha maikrofoni, kiendeshi cha kibodi/kipanya, kuingiza historia kamili ya kivinjari, kunasa skrini, na chaneli shirikishi ya Socket.IO kurudi kwenye C2 inayoweza kusanidiwa.

Hasa upigaji picha wa maikrofoni ndio mstari ambao kampeni hii inavuka ambao programu hasidi nyingi za npm hazivunji.

Kituo cha kazi cha msanidi programu, kwa kiasi kikubwa, ni kituo cha kazi ambapo wasanidi programu hupokea simu za wateja, mijadala ya usanifu, na madaraja ya simu. Kipandikizi kinachorekodi maikrofoni hakifuati tokeni ya npm ya msanidi programu. Ni kwa kiasi kikubwa kile msanidi programu anachosema mbele ya kompyuta ya mkononi.

Seti hiyo ya uwezo, pamoja na ukosefu wa kuficha na kutokuwepo kwa uchujaji wowote wa muda wa usakinishaji, huhesabiwa kama nafasi ya awali ya ufikiaji unaolengwa badala ya wizi wa sifa nyemelezi.

Hatusemi sifa kutokana na hili pekee. Tunabainisha wasifu wa uendeshaji.

shambulio la uchapaji la npm - DevTab

Mzunguko wa marudio wa siku nane kwenye node-env-resolve ndio maelezo yanayoelezea zaidi utendaji katika ratiba.

Hili si jambo la kusahaulika. Mchapishaji anatunza kikamilifu kitoneshi, ambacho kwa kawaida humaanisha moja ya mambo mawili. Ama wanakirekebisha kulingana na mazingira ya majaribio kabla ya kusambazwa kwa upana zaidi, au tayari wana telemetri ya usakinishaji inayorudi na wanaitikia.

Vifurushi vingine vitano havikupata mabadiliko yoyote baada ya kuchapishwa kwao kwa mara ya kwanza. Hilo linafaa muundo wa "hatua moja, acha jina" kwa kundi linalounga mkono huku juhudi za uhandisi zikizingatia kifurushi kinachofanya kazi.

Sifa: Vidokezo Vidogo, Hakuna Uamuzi Kamili

Umma OSINT Ishara ni nyembamba, na hatutazinyoosha. Kinachoonekana:

Kishikio cha Gmail tanvisoul9 inafanana kwa kiasi fulani na jina la Asia Kusini, "Tanvi." Hii ni ishara dhaifu. Vishikio vya Gmail si utambulisho, na vinafuata soul9 ni ya jumla. Si salama kukisia jiografia kutoka kwa barua pepe ya sehemu ya ndani pekee.

Mtindo wa msimbo hauonekani kuwa wa ajabu Node.js: standard simu za maktaba kama vile os, child_process, spawn, na reg addHakuna mzingo, hakuna mzunguko wa mfuatano, na hakuna mantiki ya kuzuia utatuzi. Mwandishi anaridhika na kanuni za awali za usajili wa Windows na mpangilio wa mchakato wa mtoto uliotengwa, lakini haionekani kufikia ufundi wa siri zaidi ambao pengine wangeweza kutumia.

Utegemezi haujulikani kabisa na unajulikana sana: screenshot-desktop, nut-js, better-sqlite3, na socket.io-clientHakuna itifaki maalum, hakuna mrundiko wa C2 ulioviringishwa kutoka mwanzo, na hakuna hila mpya ya kuendelea zaidi ya kitabu cha kiada. Kitufe cha kukimbia cha HKCUHuyu ni mjumuishaji hodari, si mwandishi wa zana.

Hatukupata mifuatano isiyo ya Kiingereza, maoni yaliyopachikwa, data ya eneo, au alama za vidole za eneo la saa za mkusanyiko ndani ya kazi za sanaa zilizochapishwa.

Tuliangalia mwingiliano wa msimbo na kampeni za awali ambazo tayari tunazifuatilia, ikiwa ni pamoja na Shai Hulud, Owlivion, Buildkite, na heibai ya hivi karibuni / claude-code-best Familia ya nakala ya Anthropic-CLI. Hatukupata yoyote: hakuna ruwaza za C2 zilizoshirikiwa, hakuna mipangilio ya faili zilizoshirikiwa, na hakuna nahau zilizoshirikiwa.

Tusingesema: kwamba huyu ni mhusika wa serikali, kundi linalojulikana, au aliyefungamana kijiografia na nchi yoyote maalum.

Wasifu wa uendeshaji unaendana na timu ndogo, yenye ujuzi wa wastani inayofanya ufuatiliaji wa wasanidi programu na vituo vya kazi. Huenda inachochewa kifedha kupitia matumizi ya chini ya ufikiaji, lakini pengine pia uchunguzi-kama-huduma kwa mnunuzi tofauti.

Mambo mawili yasiyo ya moja kwa moja yanaunga mkono hoja zinazosomeka: kuepuka mbinu za kuchuja zinazovutia umakini ambazo zingechoma kundi haraka, kama vile roboti za Telegram, oastify.com, au canarytoken, na majina ya vifurushi yasiyo na mpangilio maalum, ambayo hupendelea usakinishaji wa mkia mrefu tulivu badala ya ongezeko fupi la sauti kubwa.

Viashiria vya Maelewano na Kugundua

Vifurushi na Mchapishaji
ShambaThamani
mchapishaji wa npmuser0001
Barua pepe ya mchapishajitanvisoul9@gmail.com, haijathibitishwa
Packagescentralogger, dom-utils-lite, node-fetch-lite, kiunganishi-wakala, node-gyp-runtime, node-env-resolve
Imethibitishwa kuwa ni hasidinode-env-resolve@1.0.7, node-env-resolve@1.0.8
Vitu vya Kale vya Mwenyeji
ainaThamani
Ufunguo wa kudumuHKCU\Software\Microsoft\Windows\CurrentVersion\Run
Thamani ya kuendeleaJina linalobadilika; data ya fomu wscript.exe " \\ .vbs"
Sakinisha ndoanobaada ya kusakinisha: nodi postinstall.js kwenye faili ya kifurushi
Moduli za vipandikizisrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Saraka ya upangajiINSTALL_DIR imetatuliwa nje ya node_modules za mradi; eneo limewekwa na postinstall.js wakati wa kusakinisha
Mtandao
ainaThamani
Usafiri wa C2socket.io-client, njia ya pande mbili inayoendelea
Sehemu ya mwisho ya C2Imetolewa kwa wakala kupitia kigezo cha mazingira cha SERVER_URL; haijawekwa kwenye maandishi matupu yaliyochapishwa

Vidokezo vya Kugundua

Sheria mbili zinaigusa familia hii bila kuhitaji mwisho wa C2.

Kwanza, tia alama hati za baada ya kusakinisha zinazofanya kazi ya ndani npm install kwenye njia iliyo nje ya saraka ya kifurushi. Kipakuaji chochote halali cha awali, kama vile node-gyp hujenga upya au kupakua faili za binary zilizojengwa awali, huandika ndani ya kifurushi au kwenye mfumo-standard njia za kashe zenye hashe zilizothibitishwa. Haiandiki kwenye faili mpya iliyoundwa INSTALL_DIR kwingineko kwenye diski.

Pili, tia alama hati za baada ya kusakinisha zinazotoa reg add HKCU\…\Run na wscript.exe kama kizindua. Kimsingi hii si halali kamwe kutoka kwa kifurushi cha npm. Kiweke alama na ukiweke karantini.

Mtaala wa tatu wa heuristic ni muhimu kwa kutambua kifurushi kinachofuata cha ndugu kabla hakijathibitishwa: mchapishaji mpya wa npm asiye na SCM uthibitishaji, barua pepe ya Gmail, hakuna repository sehemu, na majina mengi mafupi, ya jumla, ya vifurushi yanayoonekana kama miundombinu yanayochapishwa ndani ya siku chache, yenyewe, yanatosha kuhalalisha ukaguzi wa mikono.

Imeripotiwa kwenye sajili ya npm. Tutasasisha chapisho hili akaunti ya mchapishaji itakapoondolewa.

zana-za-sca-za-uchambuzi-wa-muundo-wa-programu
Weka kipaumbele, rekebisha, na ulinde hatari za programu yako
Pata Akaunti yako ya Bure.
Hakuna kadi ya mkopo inayotakiwa.

Linda Uundaji na Uwasilishaji wa Programu yako

na Xygeni Product Suite