Доставка пакетів DeviceDoor npm за допомогою фішингової платформи Microsoft 365 Device-Code

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

TL, д-р

nolimit-agent це npm-пакет, опубліковані версії якого — 1.0.299 через 1.0.307, випущені протягом чотирьох днів з 26.06.2026 по 29.06.2026 — кожен містить повний фреймворк для фішингу та масової розсилки всередині прихованого, повністю обфускованого каталогу. У кожній версії головний запис має вигляд .ad/x0.js, один із приблизно 86 файлів у папці з назвою dotfile, що містить приблизно 4,200 блобів рядкового масиву javascript-обфускатора; гачок встановлення та макет запису ідентичні по всьому рядку.

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

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

Тяжкість: критичнийУражена екосистема: нммПерший показник, на який слід звернути увагу: хост api[.]nolimitent[.]xyz.

Атака: як вона працює

Доброякісна оболонка над прихованим корисним вантажем

Упаковка має звичайну поверхню. package.json оголошує після встановлення гачок – 

text postinstall: node scripts/postinstall.js 

— і під час перевірки скрипти/postinstall.js нешкідливий: він встановлює прокладку команд Windows та завершує роботу. Гак не там, де знаходиться поведінка. основний та Бен поля вказують на .реклама/, каталог, початкова крапка якого запобігає випадковому ls вивід, а вміст якого рівномірно обфускується машиною. Статичний сканер нарахував ~4,293 закодовані діапазони корисного навантаження по всьому .реклама/ набір модулів; javascript-obfuscator — це оголошена залежність розробки, яка відповідає формі обертання рядків-масивів у пакетних файлах.

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

Доступ до поштової скриньки 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[.]без обмежень[.]xyz виконав цей код.

Ознаки компромісу

Наведені нижче індикатори — це ті, на які може реагувати захисник: отримати файл блокування за допомогою grep, заблокувати хост або шукати в журналах проксі-сервера та DNS. Кінцеві точки Microsoft з’являються, оскільки фреймворк зловживає ними; самі по собі вони не є шкідливими і не повинні блокуватися.

індикатор тип де Дії захисника
nolimit-agent (усі версії 1.0.299–1.0.307) пакет нмм Файли блокування Grep / журнали встановлення
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

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

Сигнал клієнта Microsoft 365, на який варто звернути увагу незалежно від цього пакета: успішний вхід за допомогою коду пристрою, а потім оперативне зчитування графіків папки/вхідні та папки/відправлені повідомлення, особливо з сеансу, який користувач не розпізнає.

Атрибуція та спостережувана поведінка

Те, що можна спостерігати, залишається відокремленим від того, хто за цим стоїть.

Спостережувані факти: пакет опубліковано під дескриптором nolimit-agent з неперевіреною адресою Gmail та без посилання на репозиторій вихідного коду; package.json описує його як «розширений засіб відправлення електронної пошти» та позначає його тегом червона команда ключове слово; код виконання зосереджений у прихованому, завуальованому .реклама/ каталог, інструментарій якого (javascript-obfuscator) є оголошеною залежністю; а хост виклику додому API[.]без обмежень[.]xyz повторно використовує безлімітний бренд. Це єдиний пакет з одним орієнтиром інфраструктури, керованим оператором, а не кластер з кількох пакетів, і жодного перекриття з раніше названою кампанією не виявлено.

Команда червона команда Ключове слово не змінює класифікацію. Легітимні засоби наступальної безпеки, які забезпечують можливості подвійного використання, роблять це прозоро: читабельний вихідний код, цілі, що надаються оператором, і відсутність прихованих дзвінків додому. Цей пакет інвертує кожну з цих властивостей — його операційний код обфускований та прихований, і він вказує на фіксовану інфраструктуру оператора, а не на ціль, яку надає користувач. Вердикт, який є шкідливим, визначається поведінкою, а не міткою.

Тут не стверджується про намір. У публікації описується, що робить код — запитує код пристрою, зчитує поштову скриньку через Graph, надсилає масову пошту через налаштовані реле, маячить на фіксований хост — і мотив не вказано.

Вплив, тенденції та рекомендації захисників

Два фактори, що впливають на час встановлення, мають значення. По-перше, будь-який розробник або агент непреривної інтеграції, який встановлює nolimit-agent переносить фреймворк на цей хост і встановлює канал зв'язку API[.]без обмежень[.]xyzПо-друге, можливості роботи з кодом пристрою розширюють охоплення за межі хоста встановлення: поштова скринька Microsoft 365, власник якої має схвалити представлений код, зчитується безпосередньо через Graph, без передачі пароля.

Ширша тенденція полягає в інтерналізації. Фішинг за допомогою коду пристрою (AiTM) перейшов від окремої фішингової інфраструктури до пакету в публічному реєстрі — розповсюдження npm встановити а не за посиланням, надісланим електронною поштою. Таке пакування комплекту замінює проблему хостингу та доставки посилань фішингового оператора на охоплення реєстру, а операційний код приховується за чистим гачком встановлення та обфускованим каталогом з назвою dotfile, що перешкоджає швидкому перегляду вручну.

Для захисників:

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

Пакет був активний на npm на момент аналізу. Оскільки прихований фреймворк охоплює всю опубліковану версію та поточну... останній Тег (1.0.307) містить можливість коду пристрою, видалення з реєстру має охоплювати кожну версію, а не лише одну попередню версію. 

інструменти-для-аналізу-складу-програмного-засобу-sca
Визначте пріоритети, усуньте та захистіть ризики, пов'язані з програмним забезпеченням
Отримайте свій безкоштовний обліковий запис.
Не потрібна кредитна картка.

Забезпечте розробку та доставку програмного забезпечення

з пакетом продуктів Xygeni