Útok na typosquatting v DevTap npm

Útok typu „typosquatting“ v DevTap npm: Šest škodlivých balíčků cílí na vývojářské pracovní stanice

TL, DR

Mezi 1. dubnem a 3. květnem 2026 jeden vydavatel npm, user0001, registrovaný s neověřenou adresou Gmail tanvisoul9@gmail.com, tiše prosadil šest balíčků se záměrně nevýraznými názvy znějícími o infrastruktuře: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, a node-env-resolve.

Nejnovější dvě verze node-env-resolveVerze , 1.0.7 a 1.0.8 byly 2. května označeny systémem včasného varování před malwarem (MEW) společnosti Xygeni a 3. května byly potvrzeny jako škodlivé.

Implantát je neobvyklý tím, čím není: neexistují žádní Telegram boti, žádné zpětné volání OAST, žádné zmateka žádný pokus o získání přihlašovacích údajů AWS v době instalace. Místo toho, postinstall.js zavádí položku perzistence spouštění systému Windows pomocí klíče HKCU Run, který spouští wscript.exe proti VBS stubu. Poté vytvoří samostatného Node.js agenta, který obsahuje moduly pro zachycení z mikrofonu, krádež historie prohlížeče, snímání obrazovky a simulaci myši/klávesnice.

Tomuto klastru říkáme DevTap, po instalaci sady spustí na počítači vývojáře.

Všech šest balíčků bylo v době psaní tohoto článku aktivních na npm. Odeslali jsme je do kanálu pro kontrolu zneužívání v registru. Obránci by měli stáhnout všechny instalace od vydavatele, které čekají na odstranění.

Klastr: Šest balíčků, jeden vydavatel

Účet vydavatele user0001 je neověřený. Nemá žádný SCM ověření, žádný e-mail vázaný na doménu a žádná předchozí historie. Účet Gmailu tanvisoul9 se neobjevuje v žádném jiném záznamu vydavatele npm, který jsme našli.

Všech šest balíčků uvádí stejného správce, byly publikovány ze stejného účtu a sdílejí stejný package.json standardní. Neexistuje žádný repository, Ne homepage, a žádná description delší než jeden řádek.

Zajímavá je strategie pojmenování. Na rozdíl od klasické kampaně zaměřené na zmatek závislostí nebo překlepy, žádný z těchto názvů necílí na konkrétní upstreamovou knihovnu. Místo toho jsou kalibrovány tak, aby zmizely ve skutečném package.json or npm ls výstup.

BalíčekPrvní vydáníNejnovější verzeverzeRole v klastru
centralogger2026-04-01 12:46 UTC1.0.95, z verze 1.0.5 na 1.0.9Obálka „logging utility“ clusteru; nejdříve publikováno
dom-utils-lite2026-04-14 07:36 UTC1.0.33Generický kryt DOM-helperu
node-fetch-lite2026-04-19 10:22 UTC1.0.23Napodobuje rodinu node-fetch
konektor-agent2026-04-25 05:12 UTC1.0.01Generický název „agent“
node-gyp-runtime2026-04-25 05:17 UTC1.0.01Napodobuje nástroje pro sestavení nativních modulů
node-env-resolve2026-04-25 05:21 UTC1.0.910, z verze 1.0.0 na 1.0.9Aktivní kapátko; plný implantát

Jména jako centralogger, node-fetch-lite, a node-gyp-runtime jsou navrženy tak, aby při kontrole kódu vypadaly nekontroverzně. Zní to jako věci, které by již byly ve stromu závislostí projektu.

V kombinaci s novým, neověřeným vydavatelem a chybějícími odkazy na repozitáře tvoří rozpoznatelný vzorec: aktér vkládá do registru názvy s nízkým třením a poté rychle přechází na ten, na kterém záleží. V tomto případě, node-env-resolve obdržel deset verzí během osmi dnů.

Co se nachází na vývojářské krabici Windows

Zlomyslný řetězec node-env-resolve:1.0.8 je krátký, přímočarý a na npm RAT neobvykle bohatý na funkce.

Po instalaci: Perzistence a odpojený agent

package.json deklaruje jeden instalační hook:

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

postinstall.js dělá postupně tři věci.

Nejprve vytvoří instalační adresář mimo npm strom. Cesta se vypočítá za běhu skriptu jako INSTALL_DIRPak spustí interní execSync('npm install --production --silent ...') uvnitř něj pro stažení běhových závislostí implantátu. Tím se agent umístí na disk někam, kde je manuální node_modules audit nenajde.

Za druhé, zapíše spouštěč VBS a zaregistruje ho pro perzistenci spouštění:

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

wscript.exe je Windows Script Host, podepsaný binární soubor od Microsoftu, který běží .vbs soubory bez konzolového okna. To je předemcisProto je upřednostňován pro automatické spouštění pahýlů.

Existuje také shoda reg delete cesta uvnitř src/index.js, což naznačuje, že implantát je navržen tak, aby byl na povel operátora snadno vyjímatelný.

Za třetí, vytvoří oddělený podřízený proces:

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

Důležité jsou zde dva detaily.

SERVER_URL se čte z prostředí. V důsledku toho je koncový bod C2 konfigurovatelný pro každé nasazení a není integrován do balíčku. Tato malá, ale záměrná volba poráží většinu statických IOC sweepů.

Také zrozené dítě zdědí celé rodičovské prostředí. Proto jakékoli NPM_TOKEN, AWS_*, GITHUB_TOKEN, nebo soket SSH agenta přítomný ve vývojářském shellu v době instalace putuje do paměti agenta s dlouhou životností.

Co agent dodává

Sbalený src/ Strom obsahuje tři moduly, jejichž názvy samy o sobě vypovídají o příběhu: audioCapture.js, browserHistory.js, a systemInfo.js.

Seznam závislostí za běhu, vyřešený během fázování npm install, je potvrzuje.

Tento přístup promění chaotický incident v kontrolovanou reakci.

Místo slepé reakce týmy pracují s jasné stanovení priorit a rychlá náprava.

ZávislostK čemu to v tomto kontextu je
snímek obrazovky plochyPravidelné snímání obrazovky
@nut-tree-fork/nut-jsAutomatizace / simulace vstupu myší a klávesnicí
lepší-sqlite3Přímé čtení historie z databází SQLite v Chrome, Edge a Firefoxu
admin-zipSdružování sebraných artefaktů před exfiltrací
ostrýZměna velikosti / komprese snímků obrazovky a obrazových artefaktů
socket.io-clientTrvalý obousměrný kanál C2
ID uzlu-počítačeStabilní otisk prstu pro jednotlivé hostitele pro sledování obětí

systemInfo.js volá os.networkInterfaces() pro dodatečné snímání otisků prstů před prvním majákem.

Proč je záznam zvuku tím nejdůležitějším signálem

Většina npm RATů, které třídíme v MEW, se zastaví u tajné krádeže během instalace. Čtou ~/.npmrc, Přečtěte si ~/.aws/credentials, škrábat process.env, POST na webhook a ukončení. To odpovídá ekonomickému modelu „rozbij a uchvát“. Přihlašovací údaje mají krátký poločas rozpadu a útočník je potřebuje rychle zpeněžit.

node-env-resolve má odlišný tvar.

Perzistence je nastavena tak, aby přežila restart. Agent běží odděleně a má dlouhou životnost pod... wscript.exeSada, kterou obsahuje, je určena k tomu, aby byla na počítači vývojáře, nikoli k jeho uchopení a odchodu: záznamník mikrofonu, ovladač klávesnice/myši, kompletní historie prohlížeče, snímání obrazovky a interaktivní kanál Socket.IO zpět do konfigurovatelného C2.

Zejména zachycení mikrofonu je hranicí, kterou tato kampaň překračuje, a kterou většina malwaru NPM nepřekračuje.

Vývojářská pracovní stanice je stále častěji také pracovní stanicí, kde vývojáři vedou stand-up vystoupení, hovory se zákazníky, diskuse o designu a pohotovostní komunikace. Implantát, který nahrává mikrofon, ve skutečnosti nesouvisí s vývojářovým npm tokenem. Spíše s tím, co vývojář říká před notebookem.

Tato sada funkcí, plus absence zmatku a absence jakéhokoli okázalého odcizení během instalace, se vnímá jako předběžná příprava pro cílený přístup, nikoli jako oportunistická krádež přihlašovacích údajů.

Netvrdíme o připisování pouze na základě tohoto. Bereme na vědomí operační profil.

útok s typosquattingem v npm - DevTab

Osmidenní iterační kadence na node-env-resolve je z operativního hlediska nejvýznamnějším detailem v časové ose.

Nejedná se o drop, který se dá snadno vyhodit a zapomenout. Vydavatel aktivně udržuje dropper, což obvykle znamená jednu ze dvou věcí. Buď ho ladí v testovacím prostředí před širším nasazením, nebo již má k dispozici telemetrii instalace a reaguje na ni.

U ostatních pěti balíčků se po jejich prvním publikování prakticky nestaly žádné ztráty. To odpovídá vzoru „jednou proveďte fázi, pojmenujte ji“, zatímco se inženýrské úsilí zaměřuje na balíček, který práci vykonává.

Uvedení zdroje: Malé indicie, žádný pevný verdikt

Veřejné OSINT Signály jsou tenké a nebudeme je natahovat. Co je pozorovatelné:

Úchyt Gmailu tanvisoul9 částečně připomíná jihoasijské křestní jméno „Tanvi“. To je slabý signál. Úchyty Gmailu nepředstavují identitu a koncové soul9 je obecné. Není bezpečné odvodit geografii pouze z lokální části e-mailu.

Styl kódu Node.js je nevýrazný: standard hovory z knihovny, jako například os, child_process, spawn, a reg addNeexistuje žádné zmatkování, rotace řetězců ani logika proti ladění. Autor si je vědom primitiv registru Windows a orchestrace oddělených podřízených procesů, ale nezdá se, že by sahal po nenápadnějších technikách, které by mohl věrohodně používat.

Závislosti jsou zcela standardní a dobře známé: screenshot-desktop, nut-js, better-sqlite3, a socket.io-clientNeexistuje žádný vlastní protokol, žádný C2 stack vytvořený od nuly ani žádný nový trik s perzistencí nad rámec učebnice. Klíč HKCU SpustitToto je kompetentní integrátor, nikoli autor nástrojů.

V publikovaných artefaktech jsme nenašli neanglické řetězce, vložené komentáře, data o lokalizaci ani otisky časových pásem z výstupu kompilátoru.

Zkontrolovali jsme, zda se kód nepřekrývá s předchozími kampaněmi, které již sledujeme, včetně Shai Hulud, Owlivion, Buildkite a nedávný heibai / claude-code-best Klonovaná rodina Anthropic-CLI. Žádné jsme nenašli: žádné sdílené vzory C2, žádná sdílená rozvržení souborů ani žádné sdílené idiomy.

Co bychom neřekli: že se jedná o státního aktéra, známou skupinu nebo že je geograficky vázán na nějakou konkrétní zemi.

Provozní profil odpovídá malému, středně kvalifikovanému týmu provádějícímu dohled nad vývojářskými pracovišti. Pravděpodobně je to finančně motivováno následným využitím přístupu, ale pravděpodobně i průzkumem jako službou pro samostatného kupce.

Dva nepřímé body to podporují: vyhýbání se odtažitým mechanismům exfiltrace, které by cluster rychle spálily, jako jsou například Telegram boti, oastify.com, nebo canarytokens, a záměrně nevýrazné názvy balíčků, které upřednostňují tiché instalace s dlouhým ocasem před krátkodobým nárůstem objemu.

Indikátory kompromitace a detekce

Balíčky a vydavatel
PoleHodnota
vydavatel npmuser0001
E-mail vydavateletanvisoul9@gmail.com, neověřeno
Balíčkycentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
Potvrzeno škodlivénode-env-resolve@1.0.7, node-env-resolve@1.0.8
Hostitelské artefakty
TypHodnota
Klíč perzistenceHKCU\Software\Microsoft\Windows\Aktuální verze\Spustit
Hodnota perzistenceNázev proměnné; data ve formátu wscript.exe " \\ .vbs"
Instalace hákupostinstall: uzel postinstall.js v manifestu balíčku
Implantátové modulysrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Přípravný adresářINSTALL_DIR vyřešen mimo node_modules projektu; umístění nastavené souborem postinstall.js v době instalace
Síť
TypHodnota
Doprava C2socket.io-client, perzistentní obousměrný kanál
Koncový bod C2Poskytnuto agentovi prostřednictvím proměnné prostředí SERVER_URL; není pevně zakódováno do publikovaných artefaktů.

Poznámky k detekci

Tuto rodinu zachytí dvě pravidla bez nutnosti koncového bodu C2.

Nejprve označte postinstalační skripty, které provádějí interní npm install do cesty mimo vlastní adresář balíčku. Jakýkoli legitimní program pro stahování předbuildů, například node-gyp přestavby nebo stahování předkompilovaných binárních souborů, zapisuje do balíčku nebo do platformy-standard cesty mezipaměti s ověřenými haši. Nezapisuje do nově vytvořené INSTALL_DIR jinde na disku.

Za druhé, označte postinstalační skripty, které vydávají reg add HKCU\…\Run s wscript.exe jako spouštěč. Toto v podstatě nikdy není legitimní z npm balíčku. Označte to a uložte do karantény.

Třetí heuristika je užitečná pro nalezení dalšího sourozeneckého balíčku před jeho potvrzením: nový npm publisher bez SCM ověření, e-mail Gmail, ne repository pole a několik krátkých, generických názvů balíčků znějících jako infrastruktura publikovaných během několika dní je samo o sobě dostatečné k ruční kontrole.

Nahlášeno do registru npm. Tento příspěvek aktualizujeme, jakmile bude účet vydavatele odstraněn.

nástroje pro analýzu složení softwaru SCA
Stanovte priority, opravte a zabezpečte svá softwarová rizika
Získejte svůj bezplatný účet.
Nevyžaduje se žádná kreditní karta.

Zajistěte si vývoj a dodávky softwaru

s produktovým balíčkem Xygeni