Пакет npm DeviceDoor для распространения фишинговой платформы на основе кода устройств Microsoft 365.

DeviceDoor: общедоступный npm-пакет, содержащий фреймворк для фишинга и массовой рассылки электронных писем, основанный на коде устройств Microsoft 365.

TL, д-р

nolimit-agent Это пакет npm, опубликованные версии которого — 1.0.299 через 1.0.307Выпущенные в течение четырех дней, с 26.06.2026 по 29.06.2026, каждый из них содержит Полная система защиты от фишинга и массовой рассылки электронных писем. внутри скрытой, полностью обфусцированной директории. В каждой версии основная запись разрешается в .ad/x0.js, один из ~86 файлов в папке с точечным именем, содержащей примерно 4,200 строковых массивов, обфусцирующих JavaScript; структура хука установки и точки входа идентична по всей строке.

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

Затронуто: всех, кто устанавливает любую версию пакета, а также всех пользователей, установивших любую версию пакета. Почтовый ящик Microsoft 365 Владелец устройства подтверждает предоставленный через него код. Самая последняя версия, 1.0.307Это самая последняя на данный момент метка, обладающая той же возможностью отправки кода устройства в почтовый ящик — вредоносный код не ограничивается одной предыдущей версией.

Уровень опасности: критическойЗатронутая экосистема: НПМПервый индикатор, на который следует обратить внимание: хост. api[.]nolimitent[.]xyz.

Атака: как она работает

Безобидная оболочка, скрывающая полезную нагрузку.

Упаковка имеет обычную поверхность. пакет.json объявляет послеустановка крюк - 

text postinstall: node scripts/postinstall.js 

— и при осмотре scripts/postinstall.js Это безвредно: программа устанавливает заглушку для команд Windows и завершает работу. Перехватчик находится не там, где происходит выполнение этого действия. main и бункер поля, на которые указывают оба поля .объявление/, справочник, у которого точка в начале не позволяет ему быть неформальным. 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) и файл-шаблон (функции.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? 

Эта платформа также собирает значки сайтов (favicon) от основных потребительских сайтов и enterprise почтовые провайдеры — стандартный метод для создания убедительного сообщения или целевой страницы с фирменной символикой провайдера.

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

Несколько модулей собирают контекст перед отправкой. .ad/x0.js разрешает имена через DNS-over-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 выполнил этот код.

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

Ниже перечислены индикаторы, на которые может отреагировать защитник: поиск в файле блокировки, блокировка хоста или поиск в журналах прокси и 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

Хэши файлов, полученные в ходе сортировки:

  • package/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a

  • package/package.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644

Сигнал для клиента Microsoft 365, заслуживающий внимания независимо от этого пакета: успешный вход в систему с использованием кода устройства, за которым сразу же следуют считывания данных из Graph API. почтовые папки/входящие и mailFolders/sentitemsособенно из сессии, которую пользователь не узнает.

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

То, что поддается наблюдению, остается отдельным от того, кто за этим стоит.

Наблюдаемые факты: пакет опубликован под указанным ником. nolimit-agent с неподтвержденным адресом Gmail и без ссылки на репозиторий исходного кода; его пакет.json описывает его как «продвинутый инструмент для отправки электронных писем» и помечает его соответствующим образом. красная команда ключевое слово; код времени выполнения сосредоточен в скрытом, обфусцированном виде. .объявление/ каталог, чей набор инструментов (javascript-obfuscator) является объявленной зависимостью; и хостом, отвечающим за вызов системы. api[.]nolimitent[.]xyz повторно использует без ограничений бренд. Это единый пакет с одним контролируемым оператором элементом инфраструктуры — не кластер из нескольких пакетов, и пересечения с ранее упомянутой кампанией не выявлено.

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

Здесь не указывается конкретный замысел. В сообщении описывается, что делает код — запрашивает код устройства, считывает почтовый ящик через Graph, отправляет массовые рассылки через настроенные ретрансляторы, отправляет маяк на фиксированный хост — и мотивация остается невысказанной.

Влияние, тенденции и рекомендации для защитников

Два фактора, влияющие на процесс установки, имеют значение. Во-первых, любой разработчик или агент CI, который выполняет установку. nolimit-agent устанавливает фреймворк на этом хосте и устанавливает соединение с удаленным сервером. api[.]nolimitent[.]xyzВо-вторых, возможность использования кода устройства распространяется за пределы хоста установки: почтовый ящик Microsoft 365, владелец которого должен подтвердить представленный код, считывается непосредственно через Graph, при этом пароль никогда не передается по сети.

Более широкая тенденция заключается в том, чтобы ее усвоить. Фишинг с использованием кода устройства (AiTM) переместился из автономной инфраструктуры фишинга в пакет, зарегистрированный в общедоступном реестре, — распространение осуществляется посредством Установка npm Вместо отправки ссылки по электронной почте. Такая упаковка комплекта избавляет оператора фишинга от проблем с хостингом и доставкой ссылок в пользу охвата реестра, а операционный код скрывается за чистым установочным хуком и обфусцированным каталогом с точечным именем, что исключает возможность быстрого ручного просмотра.

Для защитников:

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

На момент анализа пакет был доступен в npm. Это объясняется тем, что скрытая структура фреймворка охватывает всю опубликованную линейку версий, включая текущую. последний Тег (1.0.307) обладает возможностью работы с кодом устройства, поэтому удаление из реестра должно охватывать все версии, а не только одну старую. 

sca-инструменты-программное обеспечение-композиция-анализ-инструменты
Расставьте приоритеты, устраните и защитите риски, связанные с программным обеспечением
Получите бесплатный аккаунт.
Нет необходимости кредитную карту.

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

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