Skip to main content
Blog
Blog Attacks

MFA no falló, falló el modelo de confianza: phishing por código de dispositivo y robo de tokens OAuth (Kali365)

Kali365 abusa de la concesión de autorización de dispositivo de OAuth 2.0 para robar tokens de Microsoft 365 tras MFA. Análisis técnico del flujo, FOCI y detección.

Jun 05, 2026 12 min read
Un token de acceso OAuth 2.0 en el centro de un diagrama que conecta un dispositivo legítimo con el dispositivo de un atacante

El 2026-05-21 el FBI emitió el aviso de servicio público I-052126-PSA, alertando sobre un kit de Phishing-as-a-Service llamado Kali365 que secuestra cuentas de Microsoft 365. No roba contraseñas. No intercepta códigos MFA. La víctima inicia sesión en la propia página de Microsoft, completa la autenticación multifactor, y el atacante igualmente se lleva acceso persistente. Kali365 hace esto abusando de la concesión de autorización de dispositivo de OAuth 2.0 para capturar los tokens de acceso y de actualización que Microsoft emite tras un inicio de sesión totalmente legítimo.

No es una técnica nueva. En febrero de 2025 Microsoft documentó una campaña de phishing por código de dispositivo de Storm-2372, un actor que evalúa como alineado con intereses estatales rusos, activa contra objetivos de gobierno, defensa, telecomunicaciones y energía. Lo que cambió es el empaquetado. Kali365 convierte esa táctica en un kit por suscripción con señuelos generados por IA, de modo que un actor de baja habilidad puede ejecutarla. El login funciona, el aviso de MFA funciona, y la suposición debajo de ambos falla: que un evento de autenticación exitoso te dice quién tiene la sesión un minuto después.

Esa suposición es el verdadero objetivo. "El usuario se autenticó correctamente" dejó de ser un límite de confianza. La sesión activa, transportada por un token al portador atado a nada, lo es.

Qué automatiza realmente Kali365

El FBI describe Kali365 como una plataforma de PhaaS distribuida por Telegram, vista por primera vez en abril de 2026. Incluye señuelos de phishing generados por IA, plantillas de campaña automatizadas, paneles en tiempo real para rastrear a personas específicas, y captura de tokens OAuth. En palabras del FBI, "reduce la barrera de entrada, dando a atacantes menos técnicos acceso a señuelos de phishing generados por IA, plantillas de campaña automatizadas, paneles de seguimiento de individuos/entidades en tiempo real, y capacidades de captura de tokens OAuth."

Léelo como una división del trabajo. Las partes difíciles del phishing por código de dispositivo solían ser escribir un señuelo convincente y operar de forma fiable la infraestructura de captura y canje de tokens dentro de una ventana de 15 minutos. La IA escribe el señuelo. El kit ejecuta la fontanería de OAuth. El operador solo elige objetivos. Eso es lo que hace de esto un ejemplo más limpio de IA escalando el fraude que la mayoría: no inventa un ataque nuevo, elimina la habilidad que antes controlaba el acceso a uno existente.

El flujo de código de dispositivo, paso a paso

La concesión de autorización de dispositivo existe por una buena razón. Permite iniciar sesión en dispositivos donde es incómodo escribir, como televisores inteligentes, decodificadores y herramientas de línea de comandos. Ves un código corto, lo introduces en tu teléfono, el dispositivo queda autenticado. El diseño es legítimo y se usa constantemente en Microsoft 365.

Este es el mismo flujo convertido en ataque:

  1. El atacante envía un POST a https://login.microsoftonline.com/common/oauth2/v2.0/devicecode usando un client_id propio y público, a menudo Microsoft Office (d3590ed6-52b3-4102-aeff-aad2292ab01c) o Azure CLI (04b07795-8ddb-461a-bbee-02f9e1bf7b46). Son clientes de Microsoft con consentimiento previo, así que no hace falta registrar una app ni consentimiento de administrador.
  2. Microsoft devuelve un device_code, un user_code que una persona puede teclear, la URL de verificación https://microsoft.com/devicelogin y un expires_in de 900 segundos. El atacante tiene ahora una ventana de 15 minutos.
  3. El atacante engaña a la víctima para que abra microsoft.com/devicelogin e introduzca el user_code. Microsoft Entra no admite verification_uri_complete, la variante prerellenada del enlace, así que la víctima debe teclear el código a mano. Ese paso manual es exactamente lo que un señuelo de alta conversión escrito por IA está diseñado para impulsar.
  4. La víctima se autentica en la página genuina de Microsoft, completa MFA y da su consentimiento. Cada elemento es real: el dominio es Microsoft, el certificado es válido, el aviso de MFA es el de siempre.
  5. El atacante consulta https://login.microsoftonline.com/common/oauth2/v2.0/token con grant_type=urn:ietf:params:oauth:grant-type:device_code y el device_code, respetando el interval (5 segundos) y absorbiendo las respuestas authorization_pending, hasta que el endpoint devuelve un access_token y un refresh_token.

No hay dominio falsificado que marcar ni payload en el endpoint que detectar. La parte fraudulenta es un flujo legítimo de Microsoft completado por la persona equivocada, y el token que produce es indistinguible de un token emitido a una sesión real.

Por qué MFA queda satisfecho y Acceso condicional lo deja pasar

Esta es la parte que pilla a los equipos por sorpresa. La víctima completó de verdad el inicio de sesión interactivo, incluido MFA, contra el endpoint real de Microsoft. Así que el inicio de sesión se registra como satisfecho por MFA, reflejado en el detalle de autenticación del registro de inicio de sesión de Entra y, en los tokens v1.0, en el claim amr con el valor mfa. Acceso condicional evalúa ese inicio de sesión como un login interactivo conforme y con MFA superado, y emite tokens en consecuencia.

El atacante no está saltándose MFA en el sentido de derrotar el desafío. El desafío se ejecutó y se superó. Lo que el modelo de token al portador nunca hace es atar el token emitido al dispositivo que superó el desafío. MFA respondió "¿se está autenticando la persona correcta ahora mismo?". No respondió "¿es el dispositivo correcto el que tiene este token treinta segundos después?", y nada en el flujo estándar lo hace.

El alcance del daño: tokens de actualización FOCI y escalada a PRT

Un token de acceso capturado es un problema durante una hora. El token de actualización es el verdadero premio, y el modelo de tokens de Microsoft lo hace peor que el compromiso de una sola app.

Los tokens de actualización emitidos a los clientes propios de Microsoft suelen ser tokens FOCI, Family of Client IDs. Un token de actualización de familia obtenido a través de un cliente puede canjearse por tokens de acceso como otros clientes de la familia, de modo que un token capturado vía Microsoft Office puede intercambiarse por acceso a Exchange Online, Teams, SharePoint y OneDrive, y Microsoft Graph. Un solo token de actualización robado es movimiento lateral por los datos del tenant, no un punto de apoyo en una app.

La aritmética de la vida útil lo agrava. Desde enero de 2021 las vidas útiles de los tokens de actualización ya no se pueden ajustar mediante políticas de vida útil de token; la ventana de inactividad por defecto del token de actualización es de 90 días y la edad máxima es, en la práctica, hasta su revocación. Donde el cliente y el recurso admiten Evaluación de acceso continuo, los tokens de acceso pueden extenderse a entre 24 y 28 horas, aunque son revocables casi en tiempo real ante eventos críticos. Para forzar la reautenticación ahora te apoyas en la frecuencia de inicio de sesión de Acceso condicional, no en la política de token.

El techo de escalada es aún más alto. En la actualización de febrero de 2025 de su informe sobre Storm-2372, Microsoft observó que el actor pasaba al cliente Microsoft Authentication Broker (29d9ed98-a469-4536-ade2-f981bc1d605e) para obtener un token de actualización, registrar un dispositivo controlado por el atacante en Entra ID y luego acuñar un Primary Refresh Token. Un PRT es material de identidad duradero y ligado al dispositivo que desbloquea un single sign-on amplio. El código de dispositivo es el punto de entrada; el PRT es el tenant.

"Autenticado correctamente" dejó de ser un límite de confianza

Durante años el modelo dominante fue simple: verifica al usuario en el login y luego confía en el token hasta que expire. Los backends registran el evento de autenticación, los proveedores de identidad alertan sobre patrones de inicio de sesión extraños, y una vez que la sesión existe la mayoría de las aplicaciones dejan de preguntar quién está del otro lado.

El phishing por código de dispositivo es una refutación limpia de ese modelo. El evento de login es genuino, el token es genuino, y lo único que está mal es que el token ahora lo tiene alguien distinto de la persona que se autenticó. Un token emitido para un usuario en su portátil en un país puede canjearse y reproducirse desde la infraestructura del atacante en otro, y Entra ve una sesión válida y satisfecha por MFA porque, en el momento de la autenticación, lo era.

Ayuda ver los tres caminos comunes de robo de tokens lado a lado. Todos terminan con un token válido posautenticación, pero tocan partes distintas de la superficie de ataque, lo que cambia tanto cómo evaden los controles como dónde aún puedes atraparlos.

AtaqueToken capturadoQué toca a la víctimaDónde ocurre el uso maliciosoBrecha principal de telemetría
Phishing por código de dispositivo (Kali365)OAuth de acceso y de actualización (a menudo FOCI)Un mensaje de phishing más la página real microsoft.com/deviceloginCanje y reúso del token desde la infraestructura del atacanteEl inicio de sesión es el login MFA genuino de la víctima; el canje se le atribuye
Phishing adversary-in-the-middleToken de sesión o cookie capturados en tránsitoUna página de login falsa con proxy inversoSesión reproducida desde la infraestructura del atacanteExiste un dominio parecido pero la sesión se ve válida aguas abajo
Malware infostealerCookies de sesión copiadas del discoMalware ejecutándose en el endpointSesión reanudada desde la cookie robadaCompromiso del endpoint, pero la sesión reanudada pasa las comprobaciones del servidor

El hilo común es la última columna. En todos los casos la aplicación tiene un token válido y trata a quien lo posee como el usuario autenticado. El dispositivo que se autenticó y el dispositivo que ahora usa el token son distintos, y el modelo estándar no tiene comprobación nativa para esa diferencia.

Detectarlo y bloquearlo

Aquí hay dos tareas: cerrar el flujo y encontrar dónde ya se usó.

Bloquear el flujo en Acceso condicional de Entra

Esto se corresponde directamente con la recomendación principal del FBI. En Acceso condicional, usa la condición de flujos de autenticación y pon el flujo de código de dispositivo en Bloquear, y bloquea la transferencia de autenticación en la misma política. La propia guía de Microsoft es bloquear el flujo de código de dispositivo siempre que sea posible.

  1. Aplica la política a todos los usuarios y todos los recursos, y luego excluye las cuentas de emergencia y de acceso de respaldo para que una mala configuración no te deje fuera.
  2. Si un proceso legítimo registra dispositivos por el flujo de código de dispositivo, excluye el Servicio de registro de dispositivos (01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9), ya que las políticas de flujos de autenticación se aplican allí cuando la política apunta a todos los recursos.
  3. Audita el uso actual del código de dispositivo antes de aplicar, para que las excepciones genuinas se conozcan en lugar de adivinarse.

Buscar el uso previo en los registros de inicio de sesión

Los inicios de sesión por código de dispositivo son visibles en los registros de inicio de sesión de Entra ID. El filtro de detección más usado es el protocolo de autenticación:

SigninLogs
| where AuthenticationProtocol == "deviceCode"
| summarize logins=count() by UserPrincipalName, AppDisplayName, IPAddress, tostring(LocationDetails.countryOrRegion)

Vigila también OriginalTransferMethod == "deviceCodeFlow" para captar sesiones rastreadas por protocolo en renovaciones posteriores, y marca los eventos de registro de dispositivos realizados por el cliente Microsoft Authentication Broker donde no los esperas, que es la señal de la escalada a PRT.

La limitación honesta está en la tabla de arriba. El evento de autenticación que produjo el token es el inicio de sesión real y satisfecho por MFA de la víctima, así que la detección por registros es fuerte sobre el flujo en sí pero débil sobre el canje y el reúso que vienen después, que Entra atribuye a ese inicio de sesión legítimo.

Dónde se cierra de verdad la brecha del código de dispositivo: la capa de sesión

Un token robado tiene que usarse en algún lugar, y ese lugar casi nunca es el dispositivo que se autenticó. Ese desajuste es la señal que el modelo de token al portador descarta y la que cside está construida para conservar.

La huella digital avanzada de dispositivos de cside recopila más de 100 señales de navegador, dispositivo y red para crear un identificador persistente de cada visitante. En la autenticación, esas señales establecen una línea base para la sesión. Cuando un token se presenta más tarde desde un entorno distinto, una huella de TLS y de navegador distinta, un ASN o una salida por proxy residencial distintos, marcas de automatización o headless que no estaban en el login, la huella no coincide con la línea base, y ese desajuste puede activar la invalidación del token o un desafío adicional antes de que el atacante llegue a los datos. Profundizamos en esto en cómo los datos de ubicación avanzados detectan el reúso inseguro de tokens y en el cambio más amplio en por qué la sesión del navegador ya es un plano de control de seguridad.

cside también monitorea el entorno del lado del cliente en busca de los scripts maliciosos y las cargas de secuestro de sesión que operan por debajo de la capa de autenticación. Esa es la visibilidad a nivel de navegador que los registros de backend no pueden ofrecer, y es la parte de la superficie de ataque donde realmente se decide el robo de tokens. Para ver dónde encaja esto en un stack más amplio de apropiación de cuentas, nuestra guía para comparar soluciones de prevención de ATO mapea dónde se detiene MFA y dónde empiezan las señales a nivel de sesión.

Solicita una demo para ver cómo cside detecta sesiones comprometidas antes de que ocurra el daño.

Los controles de Microsoft 365, el comportamiento de Entra y la guía del FBI son correctos a fecha de 2026-05-31. Los flujos de los proveedores, los IDs de cliente y los avisos cambian; confirma las opciones actuales de flujo de código de dispositivo y de Acceso condicional de Microsoft antes de depender de una configuración específica.

Simon Wijckmans
Founder & CEO Simon Wijckmans

Founder and CEO of cside. Building better security against client-side executed attacks, and making solutions more accessible to smaller businesses. Web security is not an enterprise only problem.

FAQ

Frequently Asked Questions

La concesión de autorización de dispositivo de OAuth 2.0, definida en el RFC 8628. Existe para que dispositivos con entrada limitada, como televisores y CLIs, puedan iniciar sesión: el dispositivo solicita un código al servidor de autorización, el usuario introduce ese código en otra página y se autentica, y el dispositivo consulta el endpoint de token hasta recibir los tokens. Kali365 inicia ese flujo por sí mismo y luego engaña a la víctima para que complete el paso de autenticación en la página real de Microsoft, de modo que el kit recoge los tokens de acceso y de actualización que el flujo emite.

No. La víctima completa MFA en la página genuina de inicio de sesión de Microsoft, así que la autenticación se registra como satisfecha por MFA y Acceso condicional la trata como un inicio de sesión interactivo conforme. Los tokens emitidos a partir de ese inicio de sesión son legítimos. MFA demostró quién se autenticó; no ató el token resultante al dispositivo que se autenticó, y esa es la brecha por la que pasa el atacante.

FOCI (Family of Client IDs) es un comportamiento no documentado de Entra donde un grupo de clientes propios de Microsoft comparte una familia de tokens. Un token de actualización de familia capturado a través de un cliente, como Microsoft Office, puede canjearse en el endpoint de token por tokens de acceso a otras apps de la familia: Outlook y Exchange, Teams, OneDrive y SharePoint, y Microsoft Graph. Un solo token de actualización robado se convierte en alcance lateral por todo Microsoft 365, no en acceso a una sola app.

Crea una política de Acceso condicional con la condición de flujos de autenticación, pon el flujo de código de dispositivo en Bloquear y bloquea la transferencia de autenticación en la misma política. Microsoft recomienda bloquear el flujo de código de dispositivo siempre que sea posible. Excluye las cuentas de emergencia, y excluye el Servicio de registro de dispositivos si un proceso legítimo registra dispositivos por este flujo. Después audita los registros de inicio de sesión de Entra filtrando por el protocolo de autenticación de código de dispositivo.

Monitorea y Asegura tus Scripts de Terceros

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Comienza gratis, o prueba Business con una prueba de 14 días.

Interfaz del panel de cside mostrando monitoreo de scripts y análisis de seguridad
Related Articles
Reservar una demo