Paquete npm de DeviceDoor que envía unha estrutura de phishing de código de dispositivo de Microsoft 365

DeviceDoor: un paquete npm público que inclúe unha estrutura de correo masivo e phishing de código de dispositivo de Microsoft 365

TL, RD

nolimit-agent é un paquete npm cuxas versións publicadas — 1.0.299 ata 1.0.307, publicados durante catro días, dende o 26/06/2026 ata o 29/06/2026, cada un contén un marco completo de phishing e correo masivo dentro dun directorio oculto e totalmente ofuscado. En todas as versións, a entrada principal resólvese en .ad/x0.js, un dos ~86 ficheiros nun cartafol chamado dotfile que contén aproximadamente 4,200 blobs de matrices de cadeas de javascript-obfuscator; o gancho de instalación e o deseño da entrada son idénticos en toda a liña.

Detrás da ofuscación atópase un Fluxo de código de dispositivo OAuth de Microsoft 365 (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) que, unha vez aprobado un código, le a caixa de entrada de Outlook da vítima e os elementos enviados a través da API de Microsoft Graph; un motor de envío masivo de SMTP e SMS impulsado por listas de destinatarios proporcionadas polo operador; modelos de mensaxes de suplantación de marca; construción de ligazóns de redirección aberta; e recoñecemento a través de DNS sobre HTTPS, WHOIS e busca de código GitHub. Balizas de tráfico en tempo de execución para a infraestrutura do operador en api[.]nolimitent[.]xyz:4100.

Afectados: calquera persoa que instale calquera versión do paquete e calquera Caixa de correo de Microsoft 365 cuxo propietario aproba un código de dispositivo presentado a través del. A versión máis recente, 1.0.307, é a etiqueta máis recente actual e ten a mesma capacidade de correo electrónico de código de dispositivo: o código malicioso non está limitado a unha única versión anterior.

Gravedade: críticoEcosistema afectado: npmO único indicador que hai que buscar primeiro: o anfitrión api[.]nolimitent[.]xyz.

O ataque: como funciona

Unha cuncha benigna sobre unha carga útil oculta

O envase presenta unha superficie ordinaria. paquete.json declara unha postinstalación gancho – 

text postinstall: node scripts/postinstall.js 

— e na inspección scripts/postinstalación.js é inofensivo: instala un shim de comandos de Windows e sae. O comportamento non reside no gancho. O Inicio caixa ambos os campos apuntan a .anuncio/, un directorio cuxo punto inicial o mantén fóra do uso casual ls saída e cuxo contido está uniformemente ofuscado pola máquina. O escáner estático contou ~4,293 tramos de carga útil codificada en todo o .anuncio/ conxunto de módulos; javascript-ofuscator é unha dependencia de desenvolvemento declarada, que coincide coa forma de rotación de matrices de cadeas dos ficheiros agrupados.

A división é o primeiro sinal que paga a pena nomear: o gancho de instalación que un revisor examinaría está limpo, mentres que o código operativo se atopa a un directorio de distancia, oculto e ofuscado, alcanzable só cando se executa o punto de entrada exportado do paquete.

Acceso ao correo electrónico con código de dispositivo de Microsoft 365

O módulo .ad/x12.js leva a capacidade máis importante do marco de traballo. Impulsa a concesión de autorización de dispositivos Microsoft 365 OAuth 2.0:

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

A concesión de código de dispositivo é un fluxo lexítimo de Microsoft deseñado para dispositivos con restricións de entrada: un servizo solicita un código, o usuario escribe ese código en microsoft.com/dispositivologin` nun segundo dispositivo e aproba, e o servizo solicitante recibe tokens. Cando o servizo solicitante pertence a alguén que non sexa o propietario do correo electrónico, a aprobación entrega un token a ese terceiro. Unha vez obtido un token, `.ad/x12.js` lee a caixa de correo directamente a través de 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 

o $select As proxeccións extraen os enderezos dos remitentes da caixa de entrada e os enderezos dos destinatarios dos elementos enviados, a materia prima para mapear os correspondentes dunha vítima. Trátase dun acceso de tipo adversario no medio (AiTM) por consentimento en lugar de por captura de contrasinal: non hai credenciais para o phishing no sentido clásico, só un código para obter a aprobación.

Un motor de correo masivo e SMS con modelos de suplantación de identidade

Arredor do acceso ao buzón atópase un correo. O paquete envía ficheiros de datos editables polo operador: listas de remitentes (remitentes.txt, smts.txt) e un ficheiro de modelo (funcións.txt) — cuxos enderezos provisorios se len como unha folla de casting para a suplantación de identidade: seguridade@apple.com, login-verificación, servizo OAuth, facturación e remitentes de notificacións de contas contra un yourdomain.com substituír o operador. O lado do SMS leva un teléfonoebook e configuración da pasarela. O servidor de correo itera as listas de destinatarios subministradas polo operador e envía a través de retransmisións SMTP configuradas.

Para facer que as ligazóns aterren, .ad/xu.js .ad/xq.js crear URLs que aproveiten a ambigüidade da análise de URLs e o seguimento de clics. Os patróns de falsificación incrustan unha autoridade de aparencia fiable antes dun @ polo que o prefixo visible difire do servidor real:

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

A estrutura tamén colle favicons dos principais consumidores e enterprise provedores de correo: unha técnica habitual para renderizar unha páxina de destino ou unha indicación de marca convincente para o provedor.

Recoñecemento de obxectivos e infraestruturas

Varios módulos recompilan contexto antes de envialos. .ad/x0.js resolve nomes a través de DNS sobre HTTPS (dns[.]google/resolve), .ad/xa.js consultas WHOIS (api[.]whois[.]vu) E .ad/x9.js executa a busca de código de GitHub (api[.]github[.]com/busca/código?q=) — un patrón consistente co descubrimento da configuración exposta do servidor de correo e das credenciais SMTP para alimentar a lista de retransmisión. .ad/xs.js consulta o índice CDX de Wayback Machine.

Comando e control

A través do conxunto ofuscado, .ad/x4.js fai referencia ao punto final do operador:

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

O anfitrión comparte o seu sen límite marca coa propia denominación da editorial e a : 4100 o porto é a canle de chamada á casa da estrutura. Este é o indicador individual máis duradeiro para os defensores: un paquete, unha estación de traballo de desenvolvedor ou un axente de compilación que chega api[.]nolimitent[.]xyz executou este código.

Indicadores de compromiso

Os indicadores seguintes son aqueles sobre os que pode actuar un defensor: grep a lockfile, bloquear un host ou buscar proxy e rexistros DNS. Os puntos finais de Microsoft aparecen porque o framework os utiliza de forma abusiva; non son maliciosos en si mesmos e non se deben bloquear.

Indicador tipo Onde Acción do defensor
nolimit-agent (todas as versións 1.0.299–1.0.307) Paquete npm Ficheiros de bloqueo Grep / rexistros de instalación
api[.]nolimitent[.]xyz (:4100) Host C2 .ad/x4.js Bloquear; buscar rexistros de DNS + proxy
.ad/ directorio oculto como destino principal/bin estrutura package.json Sinal estático na revisión do rexistro
trusted[.]com@ / %40 / :80@ formularios de ligazón URL falsa .ad/xu.js, .ad/xq.js Inspección de URL de correo/proxy
Concesión de código de dispositivo + Gráfico inbox/sentitems ler Comportamento .ad/x12.js Inicio de sesión en M365 + revisión da auditoría de Graph

Copias hash de ficheiros capturadas na triaxe:

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

  • paquete/paquete.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644

Un sinal de arrendatario de Microsoft 365 que paga a pena buscar independentemente deste paquete: inicios de sesión correctos co código do dispositivo seguidos inmediatamente de lecturas de gráfico de Cartafoles de correo/caixa de entrada Cartafoles/sentimentos de correo, especialmente dunha sesión que o usuario non recoñece.

Atribución e comportamento observado

O que é observable permanece separado de quen está detrás del.

Feitos observables: o paquete publícase baixo o nome comercial axente sen límite cun enderezo de Gmail non verificado e sen repositorio de orixe vinculado; o seu paquete.json descríbeo como un "remitente de correo electrónico avanzado" e etiquétao co equipo vermello palabra clave; o código de execución está concentrado nun espazo oculto e ofuscado .anuncio/ directorio cuxa cadea de ferramentas (javascript-ofuscator) é unha dependencia declarada; e o servidor de chamada a casa api[.]nolimitent[.]xyz reutiliza o sen límite marca. Trátase dun único paquete cun punto de referencia de infraestrutura controlado polo operador, non dun clúster de varios paquetes, e non se identificou ningunha superposición cunha campaña nomeada previamente.

o equipo vermello A palabra clave non cambia a clasificación. As ferramentas lexítimas de seguridade ofensiva que inclúen capacidade de dobre uso fano de forma transparente: código fonte lexible, obxectivos subministrados polo operador e sen chamada de inicio oculta. Este paquete inverte cada unha desas propiedades: o seu código operativo está ofuscado e oculto e envía balizas a unha infraestrutura fixa do operador en lugar de a un obxectivo subministrado polo usuario. O comportamento, non a etiqueta, rexe o veredicto, que é malicioso.

Aquí non se afirma a intención. A publicación describe o que fai o código (solicitar un código de dispositivo, ler unha caixa de correo a través de Graph, enviar correo masivo a través de relés configurados, enviar unha baliza a un host fixo) e non especifica o motivo.

Impacto, tendencias e orientación para os defensores

Dous efectos no tempo de instalación importan. En primeiro lugar, calquera desenvolvedor ou axente de CI que instale axente sen límite leva a estrutura a ese host e establece a chamada de inicio a api[.]nolimitent[.]xyzEn segundo lugar, a capacidade de código de dispositivo esténdese máis alá do host de instalación: unha caixa de correo de Microsoft 365 cuxo propietario é inducido a aprobar un código presentado léese directamente a través de Graph, sen que ningún contrasinal cruce nunca o cable.

A tendencia máis xeneralizada é a de internalizar. A suplantación de identidade por código de dispositivo (AiTM) pasou dunha infraestrutura de suplantación de identidade independente a un paquete nun rexistro público: distribución por npm instalar en lugar de mediante unha ligazón enviada por correo electrónico. Empaquetar o kit deste xeito sacrifica o problema de aloxamento e entrega de ligazóns do operador de phishing polo alcance dun rexistro e agocha o código operativo detrás dun gancho de instalación limpo e un directorio ofuscado chamado dotfile que impide unha rápida revisión manual.

Para os defensores:

  • Revisión do rexistro e das dependencias. Tratar un paquete cuxo Inicio/caixa resólvese nun directorio oculto (con prefixo de punto) de código propio uniformemente ofuscado como de alto risco só pola estrutura, independentemente de se o gancho de instalación parece limpo. A minificación non é ofuscación: porta na sinatura do descodificador de matrices de cadeas, non na lonxitude da liña.
  • Endurecemento de Microsoft 365. Restrinxir o fluxo de autorización do código do dispositivo con acceso condicional onde non sexa necesario desde o punto de vista operativo; as concesións de código do dispositivo son un vector de AiTM coñecido e os usuarios interactivos raramente as necesitan. Auditar os inicios de sesión do código do dispositivo seguidos da enumeración inmediata do correo de Graph.
  • Detección de rede. Bloquear e alertar activado api[.]nolimitent[.]xyzBusca rexistros de DNS e proxy de saída en toda a infraestrutura de desenvolvedores e compilacións.
  • Detección de rutas de correo. o usuario@host Formularios de URL falsos (de confianza[.]com@…) son detectables na pasarela de correo e no proxy; marcan as ligazóns cuxo compoñente de autoridade precede a un @.

O paquete estaba dispoñible en npm no momento da análise. Dado que a estrutura oculta abrangue toda a liña de versións publicadas e a actual última A etiqueta (1.0.307) contén a capacidade de código do dispositivo, a eliminación do rexistro debería abarcar todas as versións, non só unha única versión anterior. 

ferramentas-sca-tools-software-ferramentas-de-análise-de-composición
Priorizar, corrixir e protexer os riscos do software
Obtén a túa conta gratuíta.
Non se precisa tarxeta de crédito.

Asegura o desenvolvemento e a entrega do teu software

con Xygeni Product Suite