DevTap npm Typosquatting Attack

DevTap npm Typosquatting Hücumu: Altı Zərərli Paket Geliştirici İş Stansiyalarını Hədəfləyir

TL; DR

1 aprel və 3 may 2026-cı il tarixləri arasında tək bir npm naşiri, user0001, təsdiqlənməmiş Gmail ünvanı ilə qeydiyyatdan keçib tanvisoul9@gmail.com, qəsdən sadəlövh, infrastruktur səsləndirən adlarla altı paketi səssizcə irəli sürdü: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtimenode-env-resolve.

Ən son iki versiya node-env-resolve, 1.0.7 və 1.0.8 versiyaları 2 mayda Xygeni-nin Zərərli Proqram Erkən Xəbərdarlıq (MEW) sistemi tərəfindən qeydə alınıb və 3 mayda zərərli olduğu təsdiqlənib.

İmplant qeyri-adidir, amma əslində qeyri-adi deyil: Telegram botları, OAST geri çağırışları yoxdur, yox obfuscationvə quraşdırma zamanı AWS etimadnaməsini əldə etmək cəhdi yoxdur. Bunun əvəzinə, postinstall.js işə salan HKCU Run düyməsini istifadə edərək Windows açılış davamlılığı girişini yaradır wscript.exe VBS stub-una qarşı. Daha sonra mikrofon ələ keçirmə, brauzer tarixçəsinin oğurlanması, ekran görüntüsü çəkmə və siçan/klaviatura simulyasiyası üçün modulları birləşdirən ayrıca Node.js agentini işə salır.

Biz bu klasteri çağırırıq DevTap, dəstdən sonra geliştiricinin maşınında işləməyə davam edir.

Yazı yazıldığı zaman altı paketin hamısı npm-də aktiv idi. Biz onları reyestrin sui-istifadə kanalına təqdim etdik. Müdafiəçilər naşirdən silinməni gözləyən bütün quraşdırmaları ləğv etməlidirlər.

Klaster: Altı Paket, Bir Naşir

Naşir hesabı user0001 təsdiqlənməyib. Onun heç bir SCM Doğrulama, domenlə əlaqəli e-poçt və əvvəlki tarixçə yoxdur. Gmail ünvanı tanvisoul9 Tapa biləcəyimiz başqa heç bir npm naşir qeydində görünmür.

Altı paketin hamısı eyni texniki xidmətçini siyahıya alır, eyni hesabdan dərc olunub və eyni paylaşımı paylaşır package.json Qazan lövhəsi. Yoxdur repository, yox homepagevə yox description tək bir xəttdən daha uzun.

Adlandırma strategiyası maraqlı hissədir. Klassik asılılıq qarışıqlığı və ya yazı tipli kampaniyadan fərqli olaraq, bu adların heç biri müəyyən bir yuxarı axın kitabxanasını hədəf almır. Bunun əvəzinə, onlar real bir mühitə çevrilmək üçün kalibrlənir. package.json or npm ls çıxdı.

PaketiBirinci nəşrSon SürümSürümleriKlasterdəki rol
mərkəzi loqer2026-04-01 12:46 UTC1.0.95, 1.0.5-dan 1.0.9-a qədərKlasterin “qeydiyyat proqramı” üz qabığı; ən erkən nəşr
dom-utils-lite2026-04-14 07:36 UTC1.0.33Generic DOM-köməkçi örtüyü
node-fetch-lite2026-04-19 10:22 UTC1.0.23Mimics node-fetch ailəsi
bağlayıcı-agent2026-04-25 05:12 UTC1.0.01Ümumi ad "agent"
node-gyp-runtime2026-04-25 05:17 UTC1.0.01Mimics doğma modul qurma alətləri
node-env-həll2026-04-25 05:21 UTC1.0.910, 1.0.0-dan 1.0.9-a qədərAktiv damcı; tam implant

Kimi adlar centralogger, node-fetch-litenode-gyp-runtime kod icmalında mübahisəsiz görünmək üçün hazırlanmışdır. Onlar artıq layihənin asılılıq ağacında olan şeylər kimi səslənir.

Təzə, təsdiqlənməmiş naşir və depo bağlantılarının olmaması ilə birlikdə, onlar tanınan bir nümunə yaradır: aktyor reyestrə aşağı sürtünməli adlar səpir, sonra isə vacib olan ad üzərində tez bir zamanda təkrarlayır. Bu halda, node-env-resolve səkkiz gün ərzində on versiya aldı.

Windows Dev Box-a Nə Düşür

Zərərli zəncir işə düşüb node-env-resolve:1.0.8 npm RAT üçün qısa, birbaşa və qeyri-adi dərəcədə xüsusiyyətlərlə zəngindir.

Postinstall: Davamlılıq və Ayrılmış Agent

package.json tək bir quraşdırma çəngəlini elan edir:

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

postinstall.js ardıcıl olaraq üç işi görür.

Əvvəlcə, npm ağacının xaricində quraşdırma qovluğunu mərhələləşdirir. Yol skriptdə icra vaxtında aşağıdakı kimi hesablanır INSTALL_DIRSonra daxili bir işlədir execSync('npm install --production --silent ...') İmplantın işləmə müddətindən asılılıqları çıxarmaq üçün onun içərisindədir. Bu, agenti diskdə bir yerdə təlimat olaraq yerləşdirir node_modules audit tapmayacaq.

İkincisi, o, VBS başlatma cihazını yazır və onu açılış davamlılığı üçün qeydiyyatdan keçirir:

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

wscript.exe işləyən imzalı Microsoft ikili faylı olan Windows Script Host-dur .vbs konsol pəncərəsi olmayan fayllar. Bu əvvəlcədəndircisNiyə autorun stubları üçün üstünlük verilir.

Uyğunluq da var reg delete içəridəki yol src/index.js, implantın operatorun əmri ilə təmiz şəkildə çıxarıla bilən şəkildə dizayn edildiyini göstərir.

Üçüncüsü, bu, ayrıca bir uşaq prosesini yaradır:

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

Burada iki detal vacibdir.

SERVER_URL mühitdən oxunur. Nəticədə, C2 son nöqtəsi hər yerləşdirmə üçün konfiqurasiya edilə bilər və paketə daxil edilmir. Bu kiçik, lakin düşünülmüş seçim əksər statik-IOC süpürmələrini məğlub edir.

Həmçinin, dünyaya gələn uşaq tam valideyn mühitini miras alır. Buna görə də, istənilən NPM_TOKEN, AWS_*, GITHUB_TOKEN, və ya quraşdırma zamanı geliştirici qabığında mövcud olan SSH-agent yuvası uzunömürlü agentin yaddaşına keçir.

Agent nə ilə göndərir

Paketli src/ Ağac, yalnız adları hekayəni izah edən üç moduldan ibarətdir: audioCapture.js, browserHistory.jssystemInfo.js.

Mərhələli rejimdə həll edilən iş vaxtı asılılığı siyahısı npm install, onları təsdiqləyir.

Bu yanaşma xaotik bir hadisəni nəzarətli bir reaksiyaya çevirir.

Komandalar kor-koranə reaksiya vermək əvəzinə, aşağıdakılarla fəaliyyət göstərirlər aydın prioritetləşdirmə və sürətli düzəliş.

asılılıqBu Kontekstdə Nə Üçündür
ekran görüntüsü-masaüstüPeriodik ekran görüntüsü
@nut-tree-fork/nut-jsSiçan və klaviatura avtomatlaşdırılması / giriş simulyasiyası
daha yaxşı-sqlite3Chrome, Edge və Firefox Tarix SQLite verilənlər bazalarının birbaşa oxunması
adm-zipEksfiltrasiyadan əvvəl toplanmış artefaktların birləşdirilməsi
kəskinEkran görüntülərinin və şəkil artefaktlarının ölçüsünü dəyişdirmək/sıxışdırmaq
socket.io-müştəriDavamlı iki istiqamətli C2 kanalı
node-machine-idQurban izləmə üçün hər ev sahibi üçün sabit barmaq izi

systemInfo.js zənglər os.networkInterfaces() ilk mayakdan əvvəl əlavə barmaq izi üçün.

Səs çəkilişi niyə əsas siqnaldır

MEW-də çeşidlədiyimiz əksər npm RAT-lar quraşdırma zamanı gizli oğurluqda dayanır. Onlar oxuyurlar ~/.npmrc, oxuyun ~/.aws/credentials, qaşımaq process.env, Vebhook-a POST göndərin və çıxın. Bu, "sındır və ələ keçir" iqtisadi modelinə uyğundur. Etimadnamələrin qısa yarımömrü var və hücumçu tez bir zamanda pul qazanmalıdır.

node-env-resolve formasına görə fərqlidir.

Davamlılıq yenidən başlatmadan sağ çıxmaq üçün qurulub. Agent ayrıca işləyir və uzun müddət işləyir wscript.exeDəsti götürüb tərk etmək üçün deyil, geliştiricinin maşınında olmaq üçündür: mikrofon yazıcısı, klaviatura/siçan drayveri, tam brauzer tarixçəsinin qəbulu, ekran görüntüsü və konfiqurasiya edilə bilən C2-yə geri qaytarılması üçün interaktiv Socket.IO kanalı.

Xüsusilə mikrofon ələ keçirmə, bu kampaniyanın əksər npm zərərli proqramlarının keçmədiyi xəttdir.

Geliştirici iş stansiyası getdikcə daha çox geliştiricilərin stand-up, müştəri zəngləri, dizayn müzakirələri və növbətçi körpülər qəbul etdiyi iş stansiyasıdır. Mikrofonu qeyd edən implant əslində geliştiricinin npm tokenindən deyil, geliştiricinin noutbukun qarşısında dediyi sözlərdən sonra olur.

Bu imkan dəsti, üstəgəl qarışıqlığın olmaması və hər hansı bir parlaq quraşdırma zamanı ifrazatın olmaması, fürsətçi etimadnamə oğurluğundan daha çox hədəf giriş üçün əvvəlcədən yerləşdirmə kimi oxunur.

Biz yalnız buna istinad etmirik. Əməliyyat profilini qeyd edirik.

npm tiposquatting hücumu - DevTab

Səkkiz günlük iterasiya kadensiyası node-env-resolve zaman xəttindəki ən əməliyyat baxımından ən çox məlumat verən detaldır.

Bu, "atəş et və unut" drop deyil. Naşir dropper-i aktiv şəkildə saxlayır ki, bu da adətən iki şeydən birini ifadə edir. Ya onlar daha geniş yerləşdirmədən əvvəl onu sınaq mühitlərinə uyğunlaşdırırlar, ya da artıq quraşdırma telemetriyası geri qayıdır və ona cavab verirlər.

Digər beş paket ilkin dərcindən sonra faktiki olaraq heç bir dəyişiklik görmədi. Bu, dəstəkləyici klaster üçün "mərhələni bitirdikdən sonra adlandırılmış vəziyyətdən çıxın" şablonuna uyğun gəlir, mühəndislik səyləri isə işi görən paketə yönəlib.

İstinad: Kiçik ipucları, Qəti hökm yoxdur

Ictimai OSINT siqnallar nazikdir və biz onları uzatmayacağıq. Müşahidə edilə bilən nədir:

Gmail ünvanı tanvisoul9 qismən Cənubi Asiyalılara məxsus "Tanvi" adına bənzəyir. Bu, zəif bir siqnaldır. Gmail ünvanları şəxsiyyət deyil və arxada qalanlar soul9 ümumidir. Coğrafiyanı yalnız e-poçtun lokal hissəsindən çıxarmaq təhlükəsiz deyil.

Kod stili diqqətəlayiq deyil. Node.js: standard kimi kitabxana zəngləri os, child_process, spawnreg addHeç bir qarışıqlıq, sətir fırlanması və səhvləri aradan qaldırma məntiqi yoxdur. Müəllif Windows qeyd dəftəri primitivləri və ayrılmış uşaq proseslərinin orkestrasiyası ilə rahatdır, lakin istifadə edə biləcəkləri daha gizli sənətkarlıqlara əl atmır.

Asılılıqlar tamamilə rəfdən kənardadır və hamıya məlumdur: screenshot-desktop, nut-js, better-sqlite3socket.io-clientXüsusi protokol, sıfırdan tətbiq olunan C2 yığını və dərslikdən başqa yeni bir davamlılıq hiyləsi yoxdur. HKCU Run düyməsiBu, alət müəllifi deyil, səriştəli inteqratordur.

Dərc olunmuş artefaktların içərisində ingilis dilində olmayan sətirlər, daxil edilmiş şərhlər, yerli məlumatlar və ya kompilyator çıxışı vaxt qurşağı izləri tapmadıq.

Artıq izlədiyimiz əvvəlki kampaniyalarla kod üst-üstə düşməsini yoxladıq, o cümlədən Şai Hulud, Bayquş, Buildkite və son heibai / claude-code-best Antropik-CLI klon ailəsi. Heç birini tapmadıq: ortaq C2 şablonları, ortaq fayl düzülüşləri və ortaq idiomlar yox idi.

Biz nə deməzdik: bu, dövlət aktyoru, məlum qrup və ya coğrafi olaraq hər hansı bir konkret ölkə ilə əlaqəlidir.

Əməliyyat profili, kiçik, orta ixtisaslı bir komandanın geliştirici iş stansiyası nəzarəti ilə uyğun gəlir. Bu, çox güman ki, girişin sonrakı istifadəsi ilə maliyyə cəhətdən motivasiya olunur, lakin ayrı bir alıcı üçün xidmət kimi kəşfiyyat da mümkündür.

İki dolayı məqamı dəstəkləyir: Telegram botları kimi klasteri tez yandıracaq diqqət çəkən eksfiltrasiya mexanikasından qaçınmaq. oastify.com, və ya canarytokens və qısa, yüksək həcmli sıçrayış əvəzinə sakit uzunquyruqlu quraşdırmalara üstünlük verən qəsdən sadə paket adları.

Güzəşt və Aşkarlama Göstəriciləri

Paketlər və Naşir
SahəDəyər
npm naşiriuser0001
Naşirin e-poçtutanvisoul9@gmail.com, təsdiqlənməmiş
Paketlər centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
Zərərli olduğu təsdiqləndinode-env-resolve@1.0.7, node-env-resolve@1.0.8
Ev sahibi artefaktlar
növüDəyər
Davamlılıq açarıHKCU\Software\Microsoft\Windows\CariVersion\Run
Davamlılıq dəyəriDəyişənin adı; wscript.exe formasının məlumatları " \\ .vbs"
Qarmağı quraşdırınpostinstall: paket manifestində postinstall.js node
İmplant modullarısrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Səhnələşdirmə kataloquINSTALL_DIR layihənin node_modules xaricində həll edildi; yer quraşdırma zamanı postinstall.js tərəfindən təyin edildi
şəbəkə
növüDəyər
C2 daşınmasısocket.io-klient, davamlı iki istiqamətli kanal
C2 son nöqtəsiAgentə SERVER_URL mühit dəyişəni vasitəsilə təqdim olunur; dərc olunmuş artefaktlara sərt şəkildə kodlaşdırılmayıb

Aşkarlama Qeydləri

C2 son nöqtəsinə ehtiyac olmadan bu ailəni iki qayda ilə tuturuq.

Əvvəlcə, daxili bir əməliyyat yerinə yetirən postinstall skriptlərini işarələyin npm install paketin öz qovluğundan kənar bir yola. İstənilən qanuni əvvəlcədən qurulmuş yükləyici, məsələn node-gyp ikili yükləyiciləri yenidən qurur və ya əvvəlcədən qurur, paketin içərisinə və ya platformaya yazır-standard Təsdiqlənmiş heşləri olan keş yolları. Yeni yaradılmış qovluğa yazmır INSTALL_DIR diskin başqa yerində.

İkincisi, problem yaradan postinstall skriptlərini işarələyin reg add HKCU\…\Run donor yumurtaları, wscript.exe başlatma cihazı kimi. Bu, əslində heç vaxt npm paketindən qanuni deyil. Onu işarələyin və karantinə alın.

Üçüncü evristika növbəti qardaş paketini təsdiqlənməzdən əvvəl aşkar etmək üçün faydalıdır: yeni npm naşiri, no. SCM doğrulama, Gmail e-poçtu, yox repository sahə və bir-birindən günlərlə fasilələrlə dərc olunmuş çoxsaylı qısa, ümumi, infrastruktur səsləndirən paket adları özlüyündə əl ilə nəzərdən keçirməyə əsas verir.

npm reyestrinə bildirildi. Naşir hesabı silindikdə bu paylaşımı yeniləyəcəyik.

sca-tools-proqram-kompozisiya-analiz-alətləri
Proqram təminatı risklərinizi prioritetləşdirin, aradan qaldırın və təhlükəsizləşdirin
Pulsuz Hesabınızı əldə edin.
Kredit kartı tələb olunmur.

Proqram təminatınızın hazırlanması və çatdırılmasını təmin edin

Xygeni Məhsul Dəsti ilə