Доставка на пакети от DeviceDoor npm чрез фишинг рамка за код на устройства в Microsoft 365

DeviceDoor: публичен npm пакет, доставящ рамка за фишинг и групови имейли на Microsoft 365 с код на устройство

TL; DR

nolimit-agent е npm пакет, чиито публикувани версии — 1.0.299 чрез 1.0.307, пуснати в продължение на четири дни от 26.06.2026 до 29.06.2026 — всяка от тях носи пълна рамка за фишинг и масови имейли вътре в скрита, напълно обфусирана директория. Във всяка версия главният запис се разрешава на .ad/x0.js, един от ~86 файла в папка с име dotfile, съдържаща приблизително 4,200 javascript-obfuscator string-array blob-а; оформлението на инсталационната кука и записа са идентични по целия ред.

Зад объркването се крие Поток от код на устройство за Microsoft 365 OAuth (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode), който, след като кодът бъде одобрен, чете входящата поща и изпратените елементи в Outlook на жертвата чрез Microsoft Graph API; механизъм за групово изпращане на SMTP и SMS, управляван от списъци с получатели, предоставени от оператора; шаблони за съобщения, използващи брандиране; изграждане на връзки за отваряне и пренасочване; и разузнаване чрез DNS-over-HTTPS, WHOIS и търсене на код в GitHub. Трафик маяци по време на изпълнение към инфраструктурата на оператора на api[.]nolimitent[.]xyz:4100.

Засегнати: всеки, който инсталира която и да е версия на пакета, и всички Пощенска кутия на Microsoft 365 чийто собственик одобрява код на устройство, представен чрез него. Най-новата версия, 1.0.307, е най-новият таг и носи същата възможност за пощенска кутия с код на устройство — злонамереният код не е ограничен до една минала версия.

тежест: критиченЗасегната екосистема: NPMЕдинственият индикатор, който първо трябва да се търси: хостът api[.]nolimitent[.]xyz.

Атаката: как работи

Доброкачествена обвивка над скрит полезен товар

Опаковката представя обикновена повърхност. package.json декларира след инсталиране кука – 

text postinstall: node scripts/postinstall.js 

— и при проверка скриптове/postinstall.js е безвредно: инсталира команда на Windows и излиза. Куката не е мястото, където се намира поведението. основен намлява кофа за боклук и двете полета сочат към .реклама/, директория, чиято водеща точка я предпазва от небрежни ls изход, и чието съдържание е равномерно машинно обфусирано. Статичният скенер е преброил ~4,293 кодирани полезен товар в целия .реклама/ комплект модули; javascript-обфускатор е декларирана зависимост за разработка, която съответства на формата на ротация на низови масиви на пакетираните файлове.

Разделянето е първият сигнал, който си струва да се спомене: инсталационната кука, която един рецензент би проверил, е чиста, докато оперативният код се намира в една директория разстояние, скрит и обфускиран, достигнат само когато се изпълни експортираната входна точка на пакета.

Достъп до пощенска кутия на Microsoft 365 с код на устройство

Модулът .ad/x12.js носи най-важната функционалност на рамката. Той управлява предоставянето на оторизация на устройства на Microsoft 365 OAuth 2.0:

text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode 

Предоставянето на код на устройството е легитимен поток на Microsoft, предназначен за устройства с ограничен вход: услуга изисква код, потребителят въвежда този код в microsoft.com/devicelogin` на второ устройство и одобрява, а заявяващата услуга получава токени. Когато заявяващата услуга принадлежи на някой друг, различен от собственика на пощенската кутия, одобрението предава на тази трета страна токен. След като токенът бъде получен, .ad/x12.js` чете пощенската кутия директно през Microsoft Graph:

text GET graph[.]microsoft[.]com/v1.0/me/mailFolders/inbox/messages?$top=250&$select=from GET graph[.]microsoft[.]com/v1.0/me/mailFolders/sentitems/messages?$top=250&$select=toRecipients 

- $select Проекциите извличат адресите на подателите от входящата поща и адресите на получателите от изпратените съобщения – суровината за картографиране на кореспондентите на жертвата. Това е достъп тип „противник по средата“ (AiTM) чрез съгласие, а не чрез улавяне на парола: няма идентификационни данни за фишинг в класическия смисъл, а само код за одобрение.

Механизъм за масови имейли и SMS с шаблони за персонифициране

Около достъпа до пощенската кутия се намира пощенска програма. Пакетът изпраща редактируеми от оператора файлове с данни — списъци с податели (senders.txt, smtps.txt) и файл с шаблон (functions.txt) — чиито заместващи адреси се четат като формуляр за кастинг за представяне за друг човек: security@apple.com, login-верификация, OAuth услуга, фактуриране и изпращачи на известия за акаунти срещу yourdomain.com заместникът, който операторът замества. SMS страната носи телефонebook и конфигурация на шлюз. Програмата за изпращане на имейли преглежда предоставените от оператора списъци с получатели и изпраща чрез конфигурирани SMTP релета.

За да се осъществят връзки, .ad/xu.js намлява .ad/xq.js създават URL адреси, които експлоатират неяснотата при парсиране на URL адреси и проследяване на кликвания. Моделите на фалшифициране вграждат надежден изглеждащ авторитет преди @ така че видимият префикс се различава от реалния хост:

text https://trusted[.]com@      https://trusted[.]com%40      https://trusted[.]com:80@ https://redirect[.]example[.]com/      https://track[.]example[.]com/click? 

Рамката също така събира фавикони от големи потребители и enterprise доставчици на поща — рутинна техника за изобразяване на убедителен подканен прозорец или целева страница с марката на доставчика.

Разузнаване на цели и инфраструктура

Няколко модула събират контекст преди изпращане. .ad/x0.js разрешава имена през DNS-над-HTTPS (dns[.]google/resolve), .ad/xa.js заявки WHOIS (api[.]whois[.]vu), И .ad/x9.js изпълнява търсене на код в GitHub (api[.]github[.]com/search/code?q=) — модел, съвместим с откриването на изложена конфигурация на пощенския сървър и SMTP идентификационни данни за подаване на информация към списъка за релета. .ad/xs.js запитва CDX индекса на Wayback Machine.

Управление и контрол

От другата страна на объркания набор, .ad/x4.js препраща към крайната точка на оператора:

text http://api[.]nolimitent[.]xyz:4100 

Домакинът споделя своето безлимит марка със собственото наименование на издателя и : 4100 портът е каналът за повикване към дома на рамката. Това е най-издръжливият индикатор за защитниците: пакет, работна станция на разработчика или агент за изграждане, достигащ api[.]nolimitent[.]xyz е изпълнил този код.

Индикатори за компромис

Посочените по-долу индикатори са тези, върху които защитникът може да действа – да използва grep заключващ файл, да блокира хост или да търси в прокси и DNS регистрационни файлове. Крайните точки на Microsoft се появяват, защото рамката ги злоупотребява; те самите по себе си не са злонамерени и не трябва да бъдат блокирани.

индикатор Тип Къде Действия на защитника
nolimit-agent (всички версии 1.0.299–1.0.307) Пакет NPM Grep lockfiles / инсталационни лог файлове
api[.]nolimitent[.]xyz (:4100) C2 хост .ad/x4.js Блокиране; търсене в DNS + прокси регистрационни файлове
.ad/ скрита директория като основна/bin цел структура package.json Статичен сигнал при преглед на регистъра
trusted[.]com@ / %40 / :80@ формуляри за връзки URL пародия .ad/xu.js, .ad/xq.js Проверка на URL адреси на поща/прокси сървър
Грант за код на устройството + Графика inbox/sentitems чета Поведение .ad/x12.js Вход в M365 + преглед на Graph одит

Хешове на файлове, заснети при триаж:

  • пакет/.ad/x0.js — ша256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a

  • пакет/пакет.json — ша256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644

Сигнал за клиент на Microsoft 365, който си струва да се търси независимо от този пакет: успешни влизания с код на устройството, последвани незабавно от четене на Graph пощаПапки/входящи намлява пощаПапки/изпратени елементи, особено от сесия, която потребителят не разпознава.

Атрибуция и наблюдавано поведение

Това, което е видимо, остава отделно от това кой стои зад него.

Наблюдаеми факти: пакетът е публикуван под името handle nolimit-agent с непотвърден Gmail адрес и без свързано хранилище с изходен код; package.json описва го като „разширен изпращач на имейли“ и го маркира с червен отбор ключова дума; кодът по време на изпълнение е концентриран в скрит, обфускиран .реклама/ директория, чийто инструментариум (javascript-обфускатор) е декларирана зависимост; и хостът за повикване api[.]nolimitent[.]xyz използва повторно безлимит марка. Това е един пакет с един контролиран от оператора инфраструктурен ориентир — не е клъстер от множество пакети и не е установено припокриване с предишно посочена кампания.

- червен отбор Ключовата дума не променя класификацията. Легитимните инструменти за офанзивна сигурност, които предоставят възможности за двойна употреба, го правят прозрачно: четлив източник, цели, предоставени от оператора, и без скрити адреси. Този пакет обръща всяко от тези свойства - оперативният му код е обфускиран и скрит и насочва към фиксирана операторска инфраструктура, а не към цел, предоставена от потребителя. Поведението, а не етикетът, определя присъдата, която е злонамерена.

Тук не се твърди намерение. Публикацията описва какво прави кодът — изисква код на устройство, чете пощенска кутия през Graph, изпраща масова поща чрез конфигурирани релета, насочва към фиксиран хост — и оставя мотива непосочен.

Въздействие, тенденции и насоки за защитниците

Два ефекта по време на инсталиране са от значение. Първо, всеки разработчик или CI агент, който инсталира nolimit-agent пренася рамката на този хост и установява връзката „call-home“ към api[.]nolimitent[.]xyzВторо, възможността за код на устройството разширява обхвата отвъд инсталиращия хост: пощенска кутия на Microsoft 365, чийто собственик е подтикнат да одобри представен код, се чете директно през Graph, без парола да пресича кабела.

По-широката тенденция е тази към интернализиране. Фишингът с код на устройство (AiTM) се е преместил от самостоятелна фишинг инфраструктура в пакет в публичен регистър — разпространение от npm инсталиране а не чрез линк, изпратен по имейл. Опаковането на комплекта по този начин заменя проблема с хостинга и доставката на линкове на фишинг оператора за обхват на системния регистър и скрива оперативния код зад чиста инсталационна кука и обфусцирана директория с име на dotfile, което обезсмисля бързия ръчен преглед.

За защитниците:

  • Преглед на регистъра и зависимостите. Отнасяйте се с пакет, чиито основен/кофа за боклук се разрешава в скрита (с префикс точка) директория с равномерно обфусциран код от първа страна като високорисков само по структура, независимо от това дали инсталационната кука изглежда чиста. Минификацията не е обфускация — гейтът е базиран на сигнатурата на декодера на низ-масив, а не на дължината на реда.
  • Втвърдяване на Microsoft 365. Ограничете потока от оторизация на код на устройство с условен достъп, където не е оперативно необходим; предоставянето на код на устройство е известен AiTM вектор и рядко се нуждае от интерактивни потребители. Одит за влизания с код на устройство, последван от незабавно изброяване на пощенските кутии в Graph.
  • Откриване на мрежа. Блокиране и предупреждение включени api[.]nolimitent[.]xyzТърсете изходящи DNS и прокси лог файлове за него в инфраструктурата за разработчици и изграждане.
  • Откриване на пощенски път. - потребител@хост URL-пародия (формуляринадежден[.]com@…) са откриваеми на пощенския шлюз и проксито; маркирайте връзки, чийто компонент за авторитет предхожда @.

Пакетът беше активен в npm по време на анализа. Тъй като скритата рамка обхваща целия публикуван ред на версиите и текущата най-новите Тагът (1.0.307) носи възможността за код на устройството, премахването от системния регистър трябва да обхваща всяка версия, а не само една предходна версия. 

инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni