DevTap npm Typosquatting чабуулу

DevTap npm Typosquatting чабуулу: Иштеп чыгуучунун жумушчу станцияларына багытталган алты зыяндуу пакет

TL; DR

2026-жылдын 1-апрелинен 3-майына чейин бир гана npm басмаканасы, user0001, текшерилбеген Gmail дареги менен катталган tanvisoul9@gmail.com, атайылап жөнөкөй, инфраструктурага окшош аталыштары бар алты пакетти акырындык менен түртүп жиберди: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, жана node-env-resolve.

Акыркы эки версиясы node-env-resolve, 1.0.7 жана 1.0.8 версиялары 2-майда Xygeni компаниясынын зыяндуу программаларды алдын ала эскертүү (MEW) системасы тарабынан белгиленип, 3-майда зыяндуу экени тастыкталган.

Имплант адаттан тыш көрүнүш: Telegram боттору, OAST кайра чалуулары жок, жок Obfuscationжана орнотуу учурунда AWS грамоталарын алууга аракет кылбаңыз. Анын ордуна, postinstall.js ишке киргизүүчү HKCU Run баскычын колдонуп, Windowsтун жүктөө туруктуулугу жазуусун орнотот wscript.exe VBS stub файлына каршы. Андан кийин ал микрофонду тартуу, браузердин тарыхын уурдоо, скриншот тартуу жана чычкан/клавиатура симуляциясы үчүн модулдарды бириктирген өзүнчө Node.js агентин ишке киргизет.

Биз бул кластерди чакырып жатабыз DevTap, комплекттен кийин ал иштеп чыгуучунун машинасында иштеп калат.

Жазылып жаткан учурда алты пакеттин баары 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.23Mimics түйүндөрдү алып келүү үй-бүлөсү
туташтыргыч-агент2026-04-25 05:12 UTC1.0.01Жалпы аталыштагы "агент"
node-gyp-runtime2026-04-25 05:17 UTC1.0.01Мимикалык модуль түзүү куралдарын мимикалоо
түйүн-чөйрө-чечүү2026-04-25 05:21 UTC1.0.910, 1.0.0дон 1.0.9га чейинАктивдүү тамчылаткыч; толук имплант

Сыяктуу ысымдар centralogger, node-fetch-lite, жана node-gyp-runtime кодду карап чыгууда талашсыз көрүнүү үчүн иштелип чыккан. Алар долбоордун көз карандылык дарагында мурунтан эле бар болгон нерселердей угулат.

Жаңы, текшерилбеген басмакана жана жок болгон репозиторий шилтемелери менен айкалышып, алар таанымал үлгүнү түзөт: актер реестрге аз сүрүлүүчүлүктүү аттарды сепкен, андан кийин маанилүүсүнө тез кайталаган. Бул учурда, node-env-resolve сегиз күндүн ичинде он версиясын алды.

Windows иштеп чыгуучу кутучасына эмне түшөт

Зыяндуу чынжыр иштеп жатат 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, жана systemInfo.js.

Этапка бөлүнгөн учурда чечилген иштөө убактысына көз карандылык тизмеси npm install, аларды тастыктайт.

Бул ыкма башаламан окуяны көзөмөлдөнгөн жоопко айландырат.

Командалар сокурдук менен реакция кылуунун ордуна, төмөнкүлөр менен иштешет так артыкчылыктарды аныктоо жана тез оңдоо.

көз карандылыгыБул контекстте эмне үчүн керек
скриншот-рабочийМезгил-мезгили менен экранды тартып алуу
@nut-tree-fork/nut-jsЧычкан жана клавиатураны автоматташтыруу / киргизүү симуляциясы
жакшыраак-sqlite3Chrome, Edge жана Firefox тарыхынын SQLite маалымат базаларын түз окуу
adm-zipЧогултулган артефакттарды эксфильтрациялоодон мурун бириктирүү
курчСкриншоттордун жана сүрөт артефакттарынын өлчөмүн өзгөртүү/кысуу
socket.io-кардарТуруктуу эки багыттуу C2 каналы
түйүн-машина-идентификациясыЖабырлануучуну көзөмөлдөө үчүн ар бир хост үчүн туруктуу манжа изи

systemInfo.js чалуулар os.networkInterfaces() биринчи маяктын алдында кошумча манжа изи үчүн.

Эмне үчүн аудио жаздыруу өзгөчө сигнал болуп саналат

MEWде биз триалдаган көпчүлүк npm RAT'тар орнотуу учурундагы жашыруун уурдоодо токтойт. Алар окушат ~/.npmrcокуп, ~/.aws/credentials, кырып салуу process.env, Вебхукка ЖАЗЫП, андан кийин чыгыңыз. Бул "талкалап, тартып алуу" экономикалык моделине туура келет. Ишеним грамоталарынын жарым-жартылай жаралуу мөөнөтү кыска жана чабуулчу тез арада акча табышы керек.

node-env-resolve формасы боюнча башкача.

Туруктуулук кайра жүктөөдөн аман калуу үчүн орнотулган. Агент өзүнчө иштейт жана узак убакытка иштейт wscript.exeАнын комплекти иштеп чыгуучунун компьютеринде болуу үчүн арналган, алып кетип калуу үчүн эмес: микрофон жазгыч, клавиатура/чычкан драйвери, браузердин толук тарыхын кабыл алуу, экранды тартуу жана конфигурациялануучу C2ге кайра интерактивдүү Socket.IO каналы.

Айрыкча, микрофонду басып алуу - бул өнөктүк көпчүлүк npm зыяндуу программалары кесип өтпөгөн чек ара.

Иштеп чыгуучунун жумуш станциясы барган сайын иштеп чыгуучулар стенд-аптарды, кардарлардын чалууларын, дизайн боюнча талкууларды жана чакыруу боюнча көпүрөлөрдү кабыл алган жумуш станциясы болуп баратат. Микрофонду жаздыруучу имплант чындыгында иштеп чыгуучунун npm токенинен эмес, иштеп чыгуучунун ноутбуктун алдында айткан сөзүнөн кийин болот.

Бул мүмкүнчүлүктөр топтому, ошондой эле бүдөмүктөөнүн жоктугу жана орнотуу учурундагы жаркыраган эксфильтрациянын жоктугу, оппортунисттик маалыматтарды уурдоо эмес, максаттуу кирүү үчүн алдын ала жайгаштыруу катары окулат.

Биз муну менен гана шилтеме жасап жаткан жокпуз. Биз операциялык профилди белгилеп жатабыз.

npm typosquatting чабуулу - DevTab

Сегиз күндүк итерациянын кадансы node-env-resolve убакыт тилкесиндеги эң оперативдүү детал болуп саналат.

Бул "от коюп, унутуп коём" деген сөз эмес. Жарыялоочу дропперди активдүү түрдө тейлеп жатат, бул көбүнчө эки нерсенин бирин билдирет. Же алар аны кеңири жайылтуудан мурун сыноо чөйрөлөрүнө ылайыкташтырып жатышат, же болбосо, аларда телеметрияны орнотуу кайтып келип, ага жооп берип жатышат.

Калган беш пакет алгачкы жарыялангандан кийин эч кандай өзгөрүүнү байкаган жок. Бул колдоочу кластер үчүн "бир этаптан кийин, аталган бойдон калтыруу" үлгүсүнө туура келет, ал эми инженердик аракеттер ишти аткарган пакетке багытталат.

Атрибуция: Кичинекей белгилер, бекем чечим жок

коомдук OSINT сигналдар жука, жана биз аларды созбойбуз. Эмне байкалат:

Gmail'дин туткасы tanvisoul9 жарым-жартылай Түштүк Азиянын "Tanvi" деген атына окшош. Бул алсыз белги. Gmail даректери идентификация эмес, жана арткы беттегилер soul9 жалпы мааниге ээ. Географияны электрондук почтанын жергиликтүү бөлүгүнөн гана аныктоо коопсуз эмес.

Коддун стили өзгөчө эмес. Node.js: standard китепкана чалуулары, мисалы os, child_process, spawn, жана reg addЭч кандай чаташтыруу, саптарды айландыруу жана мүчүлүштүктөрдү оңдоого каршы логика жок. Автор Windows реестринин примитивдери жана өзүнчө бала процесстеринин оркестрлештирилиши менен ыңгайлуу, бирок алар колдоно турган жашыруун соода ыкмаларына умтулбай жаткандай.

Көз карандылыктар толугу менен жок жана баарына белгилүү: screenshot-desktop, nut-js, better-sqlite3, жана socket.io-clientОкуу китебинен башка эч кандай ыңгайлаштырылган протокол, нөлдөн баштап жылдырылган C2 стеги жана жаңы туруктуулук трюку жок. HKCU иштетүү баскычыБул компетенттүү интегратор, куралдын автору эмес.

Жарыяланган артефакттардын ичинен англисче эмес саптарды, камтылган комментарийлерди, жергиликтүү маалыматтарды же компилятор чыгарган убакыт алкагынын манжа издерин тапкан жокпуз.

Биз буга чейин көзөмөлдөгөн мурунку кампаниялар менен коддордун дал келүүсүн текшердик, анын ичинде Шай Хулуд, Овливьон, Buildkite жана жакында эле пайда болгон хейбай / claude-code-best Антропикалык-CLI клон үй-бүлөсү. Биз эч нерсе тапкан жокпуз: жалпы C2 үлгүлөрү, жалпы файл макеттери жана жалпы идиомалар жок.

Биз эмне деп айтпас элек: бул мамлекеттик актёр, белгилүү топ же географиялык жактан кайсы бир белгилүү бир өлкөгө байланыштуу.

Операциялык профиль иштеп чыгуучунун жумушчу станциясын көзөмөлдөөнү жүргүзгөн чакан, орточо квалификациялуу командага дал келет. Бул, кыязы, кирүүнү кийинки колдонуу аркылуу каржылык жактан түрткү берет, бирок, балким, өзүнчө сатып алуучу үчүн кызмат катары чалгындоону да.

Эки кыйыр пункт колдоого алынат: Telegram боттору сыяктуу кластерди тез өрттөп жиберүүчү көңүлдү бурдуруучу эксфильтрация механикасынан качуу. oastify.comже canarytokens, жана атайылап жумшак пакет аталыштары, алар кыска мөөнөттүү жогорку көлөмдөгү кескин өсүштүн ордуна тынч узун куйруктуу орнотууларды артык көрүшөт.

Компромисс жана аныктоо көрсөткүчтөрү

Пакеттер жана басмакана
талаамаани
npm басмаканасыuser0001
Басмакананын электрондук почтасыtanvisoul9@gmail.com, текшерилген эмес
пакеттерcentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
Зыяндуу экени тастыкталдыnode-env-resolve@1.0.7, node-env-resolve@1.0.8
Хост артефакттары
түрүмаани
Туруктуулук ачкычыHKCU\Программалык камсыздоо\Microsoft\Windows\Учурдагы версия\Иштетүү
Туруктуулук маанисиӨзгөрмөнүн аталышы; wscript.exe формасындагы маалыматтар " \\ .vbs"
Илмек орнотууpostinstall: пакеттин манифестиндеги postinstall.js түйүнү
Имплант модулдарыsrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Сахналаштырылган каталогINSTALL_DIR долбоордун node_modules сыртында чечилди; жайгашкан жер postinstall.js тарабынан орнотуу учурунда коюлду
тармак
түрүмаани
C2 транспортуsocket.io-кардар, туруктуу эки тараптуу канал
C2 акыркы чекитиАгентке SERVER_URL чөйрө өзгөрмөсү аркылуу берилген; жарыяланган артефакттарга катуу коддолгон эмес

Аныктоо боюнча эскертүүлөр

Бул үй-бүлөнү C2 чекитине муктаж болбостон эки эреже кармайт.

Биринчиден, ички функцияны аткарган постинсталл скрипттерин белгилеңиз npm install пакеттин өзүнүн каталогунан тышкары жолго. Ар кандай мыйзамдуу алдын ала жүктөөчү, мисалы node-gyp экилик жүктөөчүлөрдү кайра түзөт же алдын ала курат, пакеттин ичине же платформага жазат-standard текшерилген хэштери бар кэш жолдору. Ал жаңы түзүлгөн файлга жазылбайт INSTALL_DIR дисктин башка жеринде.

Экинчиден, көйгөй жараткан пост-орнотуу скрипттерин белгилеңиз reg add HKCU\…\Run менен wscript.exe ишке киргизгич катары. Бул npm пакетинен эч качан мыйзамдуу эмес. Аны белгилеп, карантинге коюңуз.

Үчүнчү эвристика кийинки бир туугандык пакетти тастыкталганга чейин аныктоо үчүн пайдалуу: жаңы npm жарыялоочусу, жок. SCM текшерүү, Gmail электрондук почтасы, жок repository талаа жана бири-биринен бир нече күн аралыгында жарыяланган бир нече кыска, жалпы, инфраструктурага ылайыктуу пакет аталыштары өзүнчө эле кол менен карап чыгууга негиз берет.

npm реестрине кабарланды. Жарыялоочунун аккаунту алынып салынганда, бул билдирүүнү жаңыртабыз.

sca-tools-программалык-композициялык-талдоо-куралдары
Программалык камсыздооңуздун тобокелдиктерин артыкчылыктуу деп эсептеңиз, оңдоңуз жана коопсуздугун камсыз кылыңыз
Акысыз аккаунтуңузду алыңыз.
Насыя картасы талап кылынбайт.

Программалык камсыздоону иштеп чыгууну жана жеткирүүнү камсыз кылыңыз

Xygeni Product Suite менен