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 нұсқалары Xygeni компаниясының зиянды бағдарламалар туралы ерте ескерту (MEW) жүйесімен 2 мамырда белгіленіп, 3 мамырда зиянды екені расталды.
Имплант ерекше, бірақ олай емес: Telegram боттары, OAST кері шақырулары жоқ, жоқ обмузкажәне орнату кезінде 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 UTC | 1.0.9 | 5, 1.0.5-ден 1.0.9-ға дейін | Кластердің «журнал жүргізу утилитасы» мұқабасы; ең алғашқы жарияланым |
| dom-utils-lite | 2026-04-14 07:36 UTC | 1.0.3 | 3 | Жалпы DOM көмекшісінің мұқабасы |
| node-fetch-lite | 2026-04-19 10:22 UTC | 1.0.2 | 3 | Mimics түйіндерді алу тобы |
| қосқыш-агент | 2026-04-25 05:12 UTC | 1.0.0 | 1 | Жалпы атауы бар «агент» |
| node-gyp-runtime | 2026-04-25 05:17 UTC | 1.0.0 | 1 | Мимикалық жергілікті модуль құрастыру құралдары |
| түйін-орталығын-шешіңіз | 2026-04-25 05:21 UTC | 1.0.9 | 10, 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}\"" /fwscript.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 | Тышқан мен пернетақтаны автоматтандыру / енгізуді модельдеу |
| better-sqlite3 | Chrome, 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 токенінен емес, әзірлеушінің ноутбук алдында айтқан сөзінен кейін болады.
Бұл мүмкіндіктер жиынтығы, шатастырудың болмауы және орнату кезіндегі айқын эксфильтрацияның болмауы, оппортунистік тіркелгі деректерін ұрлау емес, мақсатты кіруге алдын ала дайындық ретінде оқылады.
Біз тек осыған ғана сілтеме жасап отырған жоқпыз. Біз операциялық профильді атап өтіп отырмыз.

Сегіз күндік итерация каденциясы 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 іске қосу пернесіБұл құрал авторы емес, құзыретті интегратор.
Жарияланған артефактілерден ағылшын тілінен басқа жолдарды, ендірілген түсініктемелерді, жергілікті деректерді немесе компилятор шығысының уақыт белдеуінің саусақ іздерін таппадық.
Біз бұрыннан бақылап келе жатқан науқандармен, соның ішінде Шай Хулуд, Owlivion, 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\Software\Microsoft\Windows\CurrentVersion\Run |
| Тұрақтылық мәні | Айнымалы атауы; 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 соңғы нүктесін қажет етпей, бұл отбасын екі ереже ұстайды.
Алдымен, ішкі функцияны орындайтын postinstall скрипттерін белгілеңіз npm install пакеттің өз каталогынан тыс жолға. Кез келген заңды алдын ала құрастырылған жүктеуші, мысалы node-gyp екілік жүктеушілерді қайта құрастырады немесе алдын ала құрастырады, пакеттің ішіне немесе платформаға жазады-standard Тексерілген хэштері бар кэш жолдары. Ол жаңадан жасалған файлға жазылмайды INSTALL_DIR дискінің басқа жерінде.
Екіншіден, мәселе туындаған postinstall скрипттерін белгілеңіз reg add HKCU\…\Run бірге wscript.exe іске қосу құрылғысы ретінде. Бұл npm пакетінен ешқашан заңды емес. Белгілеп, карантинге қойыңыз.
Үшінші эвристика келесі бауырлас пакетті растамас бұрын анықтау үшін пайдалы: жаңа npm жариялаушысы, жоқ. SCM растау, Gmail электрондық поштасы, жоқ repository өрісі және бір-бірінен бірнеше күн аралықпен жарияланған бірнеше қысқа, жалпы, инфрақұрылымға негізделген пакет атаулары өздігінен қолмен қарауды ақтау үшін жеткілікті.
npm тізіліміне хабарланды. Баспагердің тіркелгісі жойылған кезде біз бұл жазбаны жаңартамыз.






