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 Actualizado Jul 20, 2026 13 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
Tabla de Contenidos

Resumen: robo de tokens MFA y modelo de confianza en el phishing de device code

  • La brecha: Cada presentación de concientización sigue posicionando MFA como la línea de meta, pero el kit Kali365 permite a un operador de bajo nivel recolectar tokens de acceso y de actualización después de que la víctima completa MFA en la página real de Microsoft, con Conditional Access tratando el inicio de sesión como conforme.
  • Lo que cside ve: Un token de actualización FOCI capturado pivotea entre Outlook, Teams, SharePoint, OneDrive y Microsoft Graph dentro de una ventana de inactividad por defecto de 90 días; cside expone anomalías de sesión en vivo en navegadores reales para que el reúso de tokens contra recursos del tenant sea visible en lugar de legítimo.
  • La decisión: Antes de tu próxima revisión de Entra Conditional Access, decide si el flujo device code y Authentication transfer están bloqueados siempre que sea posible, y si las exclusiones de break-glass y Device Registration Service están documentadas.

¿Poco tiempo? Consulta la detección de robo de cuentas de cside. Cubre todo lo de abajo en un solo despliegue.

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 una contraseña ni intercepta un código 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, activo 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 personalizada 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 250 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, incluyendo qué cubre la DBSC de Chrome y qué completa la huella digital de dispositivos.

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 por completo. 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

Founder and CEO of cside. Previously a product manager on Cloudflare Page Shield (now Cloudflare Client-Side Security). Co-chair of the W3C Anti-Fraud Community Group and a Forbes 30 Under 30 honoree. Building accessible security against client-side attacks, 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.

La detección se divide en tres capas. Los proveedores de identidad como Microsoft Entra señalan patrones de inicio de sesión extraños, pero atribuyen el token robado al inicio de sesión con MFA genuino de la víctima. Las herramientas de endpoint detectan el robo basado en malware, pero pasan por alto el phishing de código de dispositivo, donde nada se ejecuta en la máquina de la víctima. Las plataformas de capa de sesión como cside vigilan el entorno del navegador en vivo, de modo que un token reutilizado desde otro dispositivo o red es visible incluso cuando el inicio de sesión original era plenamente conforme.

Usa las tres, porque resuelven problemas distintos. La frecuencia de inicio de sesión de Acceso Condicional obliga a reautenticarse periódicamente, pero deja una ventana larga abierta entre solicitudes. La Evaluación Continua de Acceso revoca el acceso ante eventos críticos casi en tiempo real, pero solo para clientes y recursos que la admiten. La detección de capa de sesión, como cside, añade la comprobación que falta: si el dispositivo que presenta el token es el que se autenticó. Juntas acortan la ventana, reaccionan a los eventos y detectan la reutilización en el intervalo.

No por sí solos. El phishing de código de dispositivo no ejecuta malware en el endpoint de la víctima, así que el EDR no tiene nada que detectar, y el inicio de sesión es un login con MFA genuino en la página real de Microsoft, así que el proveedor de identidad lo registra como conforme. Ambos controles son ciegos a lo que ocurre después: el token se canjea y se reutiliza desde la infraestructura del atacante. Cerrar esa brecha requiere una señal de capa de sesión que compare el dispositivo que usa el token con el dispositivo que se autenticó.

Combina prevención y detección. En prevención, bloquea el flujo de código de dispositivo y la transferencia de autenticación en Acceso Condicional, exige frecuencia de inicio de sesión y habilita la Evaluación Continua de Acceso donde se admita. En detección, busca inicios de sesión de código de dispositivo en los registros de Entra y añade monitoreo de capa de sesión que señale la reutilización de tokens desde un nuevo dispositivo o red. cside cubre la mitad de detección al establecer una línea base de las señales de navegador y dispositivo de cada sesión, de modo que los tokens reutilizados afloran incluso cuando el propio inicio de sesión era legítimo.

cside establece una línea base de cada sesión en la autenticación usando más de 250 señales de navegador, dispositivo y red, y luego observa si las solicitudes posteriores coinciden con esa línea base. Cuando un token se presenta desde una huella de TLS y navegador distinta, un ASN o salida por proxy residencial diferentes, o con marcadores de automatización y headless que no estaban en el inicio de sesión, la huella deja de coincidir. Ese desajuste puede activar la invalidación del token o un desafío adicional antes de que el atacante llegue a los datos del inquilino.

Sí, porque cside no depende de que el inicio de sesión parezca erróneo. La autenticación es genuina y con MFA satisfecha, así que los registros de identidad la tratan como conforme, pero el atacante acaba presentando el token desde un dispositivo y una red distintos. cside compara la sesión en vivo con la línea base que capturó en el inicio de sesión, de modo que la reutilización destaca como un entorno que nunca se autenticó, aunque el evento original fuera impecable.

cside lee más de 250 señales por sesión, que abarcan el navegador, el dispositivo y la red. Para la reutilización de tokens son relevantes las huellas de TLS y navegador, el ASN y si la salida es un proxy residencial o de centro de datos, los marcadores de headless y automatización, y las características del dispositivo que persisten entre visitas. En el inicio de sesión estas forman una línea base; cuando una solicitud posterior se aparta de ella, cside trata el desajuste como una posible sesión robada en lugar del usuario original.

cside se despliega como un único fragmento de JavaScript de origen propio, o mediante el Scan Method sin agente, sin cambios de DNS ni enrutamiento de tráfico. No se sitúa delante de tu tráfico ni actúa como proxy; lee señales de navegador y dispositivo dentro de la sesión. Añades detección de reutilización de tokens en la capa de sesión sin rediseñar tu flujo de inicio de sesión ni la ruta de red. El precio se mide por sesión, con un plan gratuito y niveles de pago, así que habla con el equipo para dimensionar tu volumen.

Monitoriza y protege tus scripts de terceros

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

Empieza gratis o prueba Business con una versión de prueba de 14 días.

Interfaz del panel de cside que muestra la monitorización de scripts y el análisis de seguridad
Related Articles
Reservar una demo

¿Quieres verlo en detalle con un ingeniero?

Treinta minutos, sobre tu propio sitio. Nada de diapositivas.

Reserva una demo personalizada para ver:

Cómo cumplir los requisitos 6.4.3 y 11.6.1 de PCI DSS en 1 día
Por qué los scripts de terceros son un riesgo de seguridad para ti y tus visitantes
Cómo monitorizar fugas de privacidad y consentimiento (RGPD, CCPA) en cada tercero
Cómo frenar el abuso de registros, el uso compartido de cuentas y el fraude de contracargos con device intelligence
Cómo detectar y controlar agentes de IA y bots que llegan a tu sitio en tiempo real

¿Prefieres mandarnos una pregunta?

Buscando huecos libres…

Solo humanos de verdad. Nos daríamos cuenta.

¿Problemas para reservar? Abrir el calendario en una pestaña nueva

¿Qué quieres resolver?

Cuéntanoslo en una línea y te responderemos con algo útil, no con un discurso genérico.

Solemos ayudar con:

Ver qué scripts de terceros se ejecutan en tu sitio
Evidencias para PCI DSS 6.4.3 y 11.6.1
Bots, agentes de IA y robo de cuentas

¿Prefieres reservar una hora? Elegir un hueco