Paquete DeviceDoor npm: Envío de un marco de phishing basado en códigos de dispositivo de Microsoft 365

DeviceDoor: un paquete npm público que incluye un framework para el phishing y el envío masivo de correos electrónicos basados ​​en códigos de dispositivos de Microsoft 365.

TL; DR

nolimit-agent es un paquete npm cuyas versiones publicadas — 1.0.299 través 1.0.307, lanzados durante cuatro días desde el 26-06-2026 hasta el 29-06-2026, cada uno lleva un Marco completo para la lucha contra el phishing y el correo masivo dentro de un directorio oculto y completamente ofuscado. En cada versión, la entrada principal se resuelve en .ad/x0.js, uno de los ~86 archivos en una carpeta con nombre de archivo oculto que contiene aproximadamente 4,200 blobs de matrices de cadenas de ofuscador de javascript; el gancho de instalación y el diseño de entrada son idénticos en toda la línea.

Detrás de la ofuscación se encuentra un Flujo de código de dispositivo OAuth de Microsoft 365 (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) que, una vez aprobado un código, lee la bandeja de entrada de Outlook de la víctima y los elementos enviados a través de la API de Microsoft Graph; un motor de envío masivo de SMTP y SMS impulsado por listas de destinatarios proporcionadas por el operador; plantillas de mensajes de suplantación de marca; construcción de enlaces de redirección abierta; y reconocimiento a través de DNS-over-HTTPS, WHOIS y búsqueda de código de GitHub. Balizas de tráfico en tiempo de ejecución a la infraestructura del operador en api[.]nolimitent[.]xyz:4100.

Afectados: cualquier persona que instale cualquier versión del paquete y cualquier Buzón de Microsoft 365 cuyo propietario aprueba un código de dispositivo presentado a través de él. La versión más reciente, 1.0.307, es la etiqueta más reciente y tiene la misma capacidad de buzón de código de dispositivo; el código malicioso no se limita a una versión anterior.

Gravedad: críticoEcosistema afectado: npmEl primer indicador a buscar: el anfitrión. api[.]nolimitent[.]xyz.

El ataque: cómo funciona

Una apariencia inofensiva sobre una carga útil oculta.

El paquete presenta una superficie ordinaria. package.json declara un postinstalación gancho - 

text postinstall: node scripts/postinstall.js 

— y en la inspección scripts/postinstall.js es inofensivo: instala un shim de comando de Windows y sale. El comportamiento no reside en el hook. principal y papelera ambos campos apuntan a .anuncio/, un directorio cuyo punto inicial lo mantiene fuera de lo común ls salida, y cuyo contenido está uniformemente ofuscado por la máquina. El escáner estático contó ~4,293 tramos de carga útil codificada a lo largo de la .anuncio/ conjunto de módulos; javascript-ofuscador es una dependencia de desarrollo declarada, que coincide con la forma de rotación de matriz de cadenas de los archivos empaquetados.

La división es la primera señal que merece la pena mencionar: el script de instalación que un revisor examinaría está limpio, mientras que el código operativo se encuentra en un directorio aparte, oculto y ofuscado, al que solo se accede cuando se ejecuta el punto de entrada exportado del paquete.

Acceso al buzón de correo mediante código de dispositivo de Microsoft 365

El módulo .ad/x12.js Contiene la capacidad más importante del marco. Impulsa la concesión de autorización de dispositivos OAuth 2.0 de Microsoft 365:

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

La concesión de código de dispositivo es un flujo legítimo de Microsoft diseñado para dispositivos con limitaciones de entrada: un servicio solicita un código, el usuario escribe ese código en microsoft.com/dispositivologin` en un segundo dispositivo y aprueba, y el servicio solicitante recibe tokens. Cuando el servicio solicitante pertenece a alguien que no es el propietario del buzón, la aprobación le entrega un token a ese tercero. Una vez que se obtiene un token, El script .ad/x12.js lee el buzón 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 

El $seleccionar Las proyecciones extraen las direcciones de remitente de la bandeja de entrada y las de destinatario de los elementos enviados: la materia prima para mapear la correspondencia de la víctima. Se trata de un acceso de intermediario (AiTM) por consentimiento, en lugar de por captura de contraseña: no se requiere ninguna credencial para realizar el phishing en el sentido clásico, solo un código para obtener la autorización.

Un motor de envío masivo de correos electrónicos y SMS con plantillas de suplantación de identidad.

Alrededor del acceso al buzón se encuentra un servidor de correo. El paquete envía archivos de datos editables por el operador: listas de remitentes (remitentes.txt, smtps.txt) y un archivo de plantilla (funciones.txt) — cuyas direcciones provisionales parecen una hoja de casting para suplantación de identidad: security@apple.com, login-verificación, servicio OAuth, facturación y remitentes de notificaciones de cuenta contra un yourdomain.com El operador sustituto reemplaza. El lado de SMS lleva un teléfonoebook y la configuración de la puerta de enlace. El programa de correo itera las listas de destinatarios proporcionadas por el operador y envía a través de relés SMTP configurados.

Para hacer que los enlaces aterricen, .ad/xu.js y .ad/xq.js Construir URL que explotan la ambigüedad del análisis de URL y el seguimiento de clics. Los patrones de suplantación incrustan una autoridad de apariencia confiable antes de una @ por lo que el prefijo visible difiere del host real:

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

El marco también toma favicons de los principales consumidores y enterprise Proveedores de correo electrónico: una técnica habitual para mostrar una solicitud o página de destino convincente con la marca del proveedor.

Reconocimiento de objetivos e infraestructuras

Varios módulos recopilan información contextual antes de enviarla. .ad/x0.js Resuelve nombres a través de DNS-over-HTTPS (dns[.]google/resolve), .ad/xa.js consultas WHOIS (api[.]whois[.]vu), o .ad/x9.js ejecuta la búsqueda de código de GitHub (api[.]github[.]com/search/code?q=) — un patrón consistente con el descubrimiento de la configuración expuesta del servidor de correo y las credenciales SMTP para alimentar la lista de retransmisión. .ad/xs.js Consulta el índice CDX de Wayback Machine.

Comando y control

A través del conjunto ofuscado, .ad/x4.js hace referencia al punto final del operador:

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

El anfitrión comparte su sin límites la marca con la denominación propia del editor, y la : 4100 El puerto es el canal de comunicación del marco. Este es el indicador más duradero para los defensores: un paquete, una estación de trabajo de desarrollador o un agente de compilación que se encuentra api[.]nolimitante[.]xyz ha ejecutado este código.

Indicadores de compromiso

Los indicadores que se muestran a continuación son aquellos sobre los que un defensor puede actuar: buscar en un archivo de bloqueo, bloquear un host o consultar los registros de proxy y DNS. Los puntos finales de Microsoft aparecen porque el marco de trabajo abusa de ellos; no son maliciosos en sí mismos y no deben bloquearse.

Indicador Tipo Donde Acción del defensor
nolimit-agent (todas las versiones 1.0.299–1.0.307) PREMIUM npm Grep lockfiles / install logs
api[.]nolimitent[.]xyz (:4100) Host C2 .ad/x4.js Bloquear; buscar en los registros DNS y de proxy
.ad/ directorio oculto como destino principal/bin Estructura package.json Señal estática en la revisión del registro
trusted[.]com@ / %40 / :80@ formularios de enlace Suplantación de URL .ad/xu.js, .ad/xq.js Inspección de URL de correo/proxy
Concesión de código de dispositivo + Gráfico inbox/sentitems read Comportamiento .ad/x12.js Inicio de sesión en M365 + Revisión de auditoría de Graph

Hashes de archivos capturados en la fase de triaje:

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

  • paquete/paquete.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644

Una señal de inquilino de Microsoft 365 que vale la pena buscar independientemente de este paquete: inicios de sesión exitosos con código de dispositivo seguidos rápidamente por lecturas de Graph de carpetas de correo/bandeja de entrada y Carpetas de correo/elementos enviados, especialmente desde una sesión que el usuario no reconoce.

Atribución y comportamiento observado

Lo que se observa permanece separado de quién está detrás de ello.

Hechos observables: el paquete se publica bajo el identificador agente sin límites con una dirección de Gmail no verificada y sin repositorio de código fuente vinculado; su package.json lo describe como un “remitente de correo electrónico avanzado” y lo etiqueta con el equipo rojo palabra clave; el código de tiempo de ejecución se concentra en un espacio oculto y ofuscado. .anuncio/ directorio cuya cadena de herramientas (javascript-ofuscador) es una dependencia declarada; y el host de llamada a casa api[.]nolimitante[.]xyz reutiliza el sin límites marca. Se trata de un paquete único con un hito de infraestructura controlado por un operador, no de un grupo de varios paquetes, y no se identificó ninguna superposición con una campaña previamente nombrada.

El equipo rojo La palabra clave no cambia la clasificación. Las herramientas legítimas de seguridad ofensiva que ofrecen capacidad de doble uso lo hacen de forma transparente: código fuente legible, objetivos proporcionados por el operador y sin comunicación oculta a un servidor central. Este paquete invierte cada una de estas propiedades: su código operativo está ofuscado y oculto, y envía señales a una infraestructura fija del operador en lugar de a un objetivo proporcionado por el usuario. El comportamiento, no la etiqueta, determina el veredicto, que es malicioso.

Aquí no se afirma la intención. La publicación describe lo que hace el código: solicitar un código de dispositivo, leer un buzón de correo a través de Graph, enviar correo masivo a través de relés configurados, enviar una señal a un host fijo, pero no especifica el motivo.

Dos efectos del tiempo de instalación son importantes. Primero, cualquier desarrollador o agente de CI que instale agente sin límites lleva el marco a ese host y establece la llamada a casa para api[.]nolimitante[.]xyzEn segundo lugar, la capacidad de código de dispositivo extiende el alcance más allá del host de instalación: un buzón de Microsoft 365 cuyo propietario sea inducido a aprobar un código presentado se lee directamente a través de Graph, sin que ninguna contraseña pase por la red.

La tendencia más amplia es la de internalizar. El phishing de código de dispositivo (AiTM) ha pasado de una infraestructura de phishing independiente a un paquete en un registro público: distribución por npm instalar En lugar de mediante un enlace enviado por correo electrónico, este método de empaquetado permite cambiar el problema del operador de phishing relacionado con el alojamiento y la entrega de enlaces por el alcance de un registro, y oculta el código operativo tras un gancho de instalación limpia y un directorio ofuscado con un archivo oculto que dificulta una inspección manual rápida.

Para los defensores:

  • Revisión del registro y las dependencias. Tratar un paquete cuyo principal/papelera Se resuelve en un directorio oculto (con prefijo de punto) de código propio uniformemente ofuscado, lo que representa un alto riesgo solo por su estructura, independientemente de si el gancho de instalación parece limpio. La minificación no es lo mismo que la ofuscación: la clave está en la firma del decodificador de matriz de cadenas, no en la longitud de la línea.
  • Refuerzo de la seguridad de Microsoft 365. Restrinja el flujo de autorización de códigos de dispositivo con Acceso Condicional cuando no sea necesario para la operación; las concesiones de códigos de dispositivo son un vector AiTM conocido y rara vez las necesitan los usuarios interactivos. Realice una auditoría de los inicios de sesión con códigos de dispositivo, seguida de una enumeración inmediata de los buzones de Graph.
  • Detección de red. Bloquear y alertar en api[.]nolimitante[.]xyz. Busque registros DNS salientes y de proxy en toda la infraestructura de desarrollo y compilación.
  • Detección de ruta de correo. El usuario @ host Formularios de suplantación de URL (trusted[.]com@…) son detectables en la puerta de enlace de correo y el proxy; marque los enlaces cuyo componente de autoridad precede a un @.

El paquete estaba activo en npm en el momento del análisis. Debido a que el marco oculto abarca toda la línea de versión publicada y la actual más reciente La etiqueta (1.0.307) tiene capacidad de código de dispositivo, la eliminación del registro debería cubrir todas las versiones, no solo una única versión anterior. 

sca-tools-software-herramientas-de-analisis-de-composicion
Priorice, solucione y proteja sus riesgos de software
Además, te ofrecemos una prueba gratuita de 7 días de nuestra Business Edition para que puedas explorar las funciones avanzadas de la plataforma SecurityScorecard.
No se requiere tarjeta de crédito

Asegure el desarrollo y entrega de software

con la suite de productos Xygeni