Напад на грешке у DevTap-у у npm-у

DevTap npm напад типосквотингом: Шест злонамерних пакета циља програмерске радне станице

ТЛ; ДР

Између 1. априла и 3. маја 2026. године, један npm издавач, user0001, регистровано са непровереном Gmail адресом tanvisoul9@gmail.com, тихо је промовисао шест пакета са намерно благим, инфраструктурно звучећим именима: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, i node-env-resolve.

Две најновије верзије node-env-resolve, 1.0.7 и 1.0.8, означене су од стране Xygeni-јевог система за рано упозоравање на злонамерни софтвер (MEW) 2. маја и потврђене као злонамерне 3. маја.

Имплантат је необичан због онога што није: нема Телеграм ботова, нема OAST повратних позива, нема обфусцатиони без покушаја преузимања AWS акредитива током инсталације. Уместо тога, postinstall.js поставља унос за перзистенцију покретања система Windows, користећи тастер HKCU Run који покреће wscript.exe против VBS стаба. Затим покреће одвојени Node.js агент који обједињује модуле за снимање микрофона, крађу историје прегледача, прављење снимака екрана и симулацију миша/тастатуре.

Овај кластер називамо ДевТап, након комплета, он наставља да ради на машини програмера.

Свих шест пакета је било доступно на npm-у у време писања овог текста. Послали смо их на канал регистра за злоупотребе. Браниоци би требало да повуку све инсталације од издавача које чекају уклањање.

Кластер: Шест пакета, један издавач

Налог издавача user0001 није верификовано. Нема SCM верификација, без имејлова везаних за домен и без претходне историје. Gmail налог tanvisoul9 не појављује се ни у једном другом запису издавача npm-а који смо могли пронаћи.

Свих шест пакета наводи истог одржаваоца, објављени су са истог налога и деле исте package.json шаблонски. Нема repository, не homepage, и без description дуже од једне линије.

Стратегија именовања је занимљив део. За разлику од класичне кампање забуне зависности или типоскварта, ниједно од ових имена није усмерено на одређену узводну библиотеку. Уместо тога, калибрисана су тако да нестану у стварном package.json or npm ls излаз.

пакетФирст ПублисхедНајновија верзијаверзијеУлога у кластеру
централогер2026-04-01 12:46 UTC1.0.95, од ​​1.0.5 до 1.0.9Насловна страна кластера „услужног програма за евидентирање“; најранија објава
dom-utils-lite2026-04-14 07:36 UTC1.0.33Генерички DOM-помоћни покривач
node-fetch-lite2026-04-19 10:22 UTC1.0.23Имитира породицу чворова за преузимање
конектор-агент2026-04-25 05:12 UTC1.0.01„Агент“ генеричког имена
node-gyp-runtime2026-04-25 05:17 UTC1.0.01Имитира алате за изградњу нативних модула
node-env-resolve2026-04-25 05:21 UTC1.0.910, од ​​1.0.0 до 1.0.9Активна капаљка; пуни имплантат

Имена воле centralogger, node-fetch-lite, i node-gyp-runtime су дизајнирани да изгледају неконтроверзно у прегледу кода. Звуче као ствари које би већ биле у стаблу зависности пројекта.

У комбинацији са новим, непровереним издавачем и недостајућим линковима ка репозиторијуму, они формирају препознатљив образац: актер уноси имена са ниским коефицијентом трења у регистар, а затим брзо мења оно које је важно. У овом случају, node-env-resolve добио десет верзија за осам дана.

Шта се налази на Windows Dev Box-у

Злонамерни ланац на node-env-resolve:1.0.8 је кратак, директан и необично богат функцијама за npm RAT.

Постинсталација: Перзистентност и одвојени агент

package.json декларише једну инсталациону куку:

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

postinstall.js ради три ствари редом.

Прво, припрема инсталациони директоријум ван npm стабла. Путања се израчунава током извршавања у скрипти као INSTALL_DIRЗатим покреће интерни execSync('npm install --production --silent ...') унутар њега да би се преузеле зависности имплантата током извршавања. Ово ставља агента на диск негде где је приручник node_modules ревизија неће пронаћи.

Друго, пише VBS покретач и региструје га за перзистентност покретања:

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

wscript.exe је Windows Script Host, потписани бинарни фајл компаније Microsoft који се покреће .vbs датотеке без конзолног прозора. То је преcisЗато је фаворизован за аутоматско покретање.

Такође постоји подударање reg delete пут унутра src/index.js, што сугерише да је имплант дизајниран тако да се може лако уклонити на команду оператера.

Треће, ствара одвојени подпроцес:

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

Овде су важна два детаља.

SERVER_URL се чита из окружења. Као резултат тога, крајња тачка C2 се може конфигурисати по распоређивању и није уграђена у пакет. Тај мали, али намерни избор онемогућава већину статичких IOC прегледа.

Такође, новорођено дете наслеђује целокупно родитељско окружење. Стога, свако NPM_TOKEN, AWS_*, GITHUB_TOKEN, или SSH-агентски сокет присутан у програмерској љусци у време инсталације путује у меморију дуготрајног агента.

Шта агент испоручује

У пакету src/ стабло укључује три модула чија сама имена говоре причу: audioCapture.js, browserHistory.js, i systemInfo.js.

Листа зависности током извршавања, решена током припреме npm install, потврђује их.

Овај приступ претвара хаотичан инцидент у контролисани одговор.

Уместо да реагују слепо, тимови раде са јасно одређивање приоритета и брзо отклањање проблема.

зависностЧему служи у овом контексту
снимак екрана-десктопПериодично снимање екрана
@nut-tree-fork/nut-jsАутоматизација/симулација уноса миша и тастатуре
боље-sqlite3Директно читање SQLite база података историје Chrome, Edge и Firefox
adm-zipГруписање сакупљених артефаката пре извлачења
оштарПромена величине/компримирање снимака екрана и артефаката на сликама
socket.io-клијентПерзистентни двосмерни C2 канал
id-машине-чвораСтабилан отисак прста по хосту за праћење жртве

systemInfo.js позиви os.networkInterfaces() за додатно узимање отисака прстију пре првог сигналног уређаја.

Зашто је снимање звука изузетан сигнал

Већина npm RAT-ова које тријажујемо у MEW-у заустављају се на тајној крађи током инсталације. Они читају ~/.npmrc, читати ~/.aws/credentials, стругати process.env, POST на вебхук и излаз. То се уклапа у економски модел „разбиј и зграби“. Акредитиви имају кратак период полураспада и нападач мора брзо да их монетизује.

node-env-resolve је различитог облика.

Перзистентност је подешена да преживи поновно покретање. Агент ради одвојено и дуговечно под wscript.exeКомплет који носи је за употребу на машини програмера, а не за преузимање и остављање: снимач микрофона, драјвер за тастатуру/миш, комплетно уношење историје прегледача, снимање екрана и интерактивни Socket.IO канал назад до конфигурабилног C2.

Снимање микрофона је посебно граница коју ова кампања прелази, а коју већина npm малвера не прелази.

Радна станица програмера је, све више, и радна станица где програмери одржавају презентације, позиве са купцима, дискусије о дизајну и дежурне мостове. Имплантат који снима микрофон заправо није усмерен ка програмеровом npm токену. Он је усмерен ка ономе што програмер каже испред лаптопа.

Тај скуп могућности, плус недостатак замагљивања и одсуство било каквог блиставог извлачења података током инсталације, тумачи се као претходно позиционирање за циљани приступ, а не као опортунистичка крађа акредитива.

Не тврдимо приписивање само на основу овога. Примећујемо оперативни профил.

Напад грешком у npm-у - DevTab

Осмодневна итеративна ритам на node-env-resolve је најоперативнији детаљ у временској линији.

Ово није инсталациони дроп по принципу „пали и заборави“. Издавач активно одржава дроппер, што обично значи једну од две ствари. Или га подешавају у тест окружењима пре шире примене, или већ имају телеметријске податке о инсталацији и реагују на њих.

Осталих пет пакета није имало никакве промене након почетног објављивања. То се уклапа у образац „једном се заврши, оставе се именовано“ за кластер подршке, док се инжењерски рад фокусира на пакет који обавља посао.

Атрибуција: Мали трагови, без чврсте пресуде

Јавност ОСИНТ Сигнали су танки и нећемо их растежати. Шта је видљиво:

Gmail налог tanvisoul9 делимично подсећа на јужноазијско име, „Танви“. Ово је слаб сигнал. Gmail идентификационе ознаке нису идентитет, а пратећа soul9 је генеричко. Није безбедно закључивати географију само на основу локалног дела имејла.

Стил кода је неупадљив Node.js: standard позиви библиотеци као што су os, child_process, spawn, i reg addНема замагљивања, нема ротације низова и нема логике против дебаговања. Аутор је упознат са примитивним процесима регистра Windows-а и оркестрацијом одвојених подпроцеса, али изгледа да не посеже за скривенијим занатским техникама које би вероватно могли да користе.

Зависности су потпуно готове и добро познате: screenshot-desktop, nut-js, better-sqlite3, i socket.io-clientНе постоји прилагођени протокол, нема C2 стека направљеног од нуле, нити нови трик за перзистенцију изван уџбеника. Тастер за покретање HKCU-аОво је компетентан интегратор, а не аутор алата.

Нисмо пронашли стрингове који нису на енглеском језику, уграђене коментаре, податке о локалним подешавањима или отиске временских зона из компајлера унутар објављених артефаката.

Проверили смо преклапање кода са претходним кампањама које већ пратимо, укључујући Схаи Хулуд, Оливион, Buildkite и недавни heibai / claude-code-best Антропна-CLI клонска породица. Нисмо пронашли ниједан: нема заједничких C2 образаца, нема заједничких распореда датотека нити заједничких идиома.

Оно што не бисмо рекли: да је ово државни актер, позната група или географски везан за било коју одређену земљу.

Оперативни профил је у складу са малим, умерено квалификованим тимом који обавља надзор радних станица програмера. Вероватно је финансијски мотивисан кроз коришћење приступа накнадним коришћењем, али могуће и извиђањем као услугом за посебног купца.

Две индиректне тачке поткрепљују ово: избегавање механизама ексфилтрације који привлаче пажњу и брзо би уништили кластер, као што су Телеграм ботови, oastify.com, или canarytokens, и намерно блага имена пакета, која фаворизују тихе инсталације са дугим репом у односу на кратак скок великог обима.

Индикатори компромитовања и откривања

Пакети и издавач
ПољеVrednost
НПМ издавачусерКСНУМКС
Имејл адреса издавачаtanvisoul9@gmail.com, непроверено
Пакетицентралоггер, дом-утилс-лајт, ноде-фетч-лајт, конектор-агент, ноде-гип-рунтиме, ноде-енв-ресолве
Потврђено злонамерноnode-env-resolve@1.0.7, node-env-resolve@1.0.8
Артефакти домаћина
типVrednost
Кључ перзистентностиHKCU\Софтвер\Мајкрософт\Виндоус\Тренутна верзија\Покрени
Вредност перзистенцијеНазив променљиве; подаци облика wscript.exe " \\ .vbs"
Инсталирајте кукупостинсталација: чвор postinstall.js у манифесту пакета
Имплантни модулисрц/аудиоЦаптуре.јс, срц/броусерХистори.јс, срц/системИнфо.јс
Припремни директоријумINSTALL_DIR је решен ван node_modules пројекта; локација је подешена помоћу postinstall.js током инсталације
мрежа
типVrednost
C2 превозsocket.io-клијент, перзистентни двосмерни канал
Крајња тачка C2Доставља се агенту преко променљиве окружења SERVER_URL; није чврсто кодирано у објављеним артефактима

Белешке о детекцији

Два правила хватају ову породицу без потребе за крајњом тачком C2.

Прво, означите скрипте након инсталације које извршавају интерну npm install у путању ван директоријума самог пакета. Било који легитимни програм за преузимање пребуилд-а, као што је node-gyp реконструкције или преузимачи унапред изграђених бинарних датотека, пише унутар пакета или у платформу-standard путање кеша са провереним хешевима. Не уписује у свеже креирану INSTALL_DIR негде другде на диску.

Друго, означите скрипте након инсталације које издају проблеме reg add HKCU\…\Run sa wscript.exe као покретач. Ово у суштини никада није легитимно из npm пакета. Означите га и ставите у карантин.

Трећа хеуристика је корисна за уочавање следећег сродног пакета пре него што буде потврђен: нови npm издавач без SCM верификација, Gmail имејл, не repository поље, и више кратких, генеричких имена пакета која звуче као инфраструктура објављених у року од неколико дана је само по себи довољно да оправда ручни преглед.

Пријављено npm регистру. Ажурираћемо ову објаву када налог издавача буде уклоњен.

sca-tools-software-composition-analysis-tools
Приоритизујте, отклоните и обезбедите ризике везане за ваш софтвер
Набавите свој бесплатни налог.
Није потребна кредитна картица.

Обезбедите свој развој и испоруку софтвера

са Xygeni пакетом производа