El phishing que no te pide la contraseña, y por eso el MFA no lo detiene
La ANCI detectó una campaña masiva a nivel nacional que abusa del flujo Device Code de Microsoft Entra ID. La vÃctima escribe un código en una página auténtica de Microsoft, completa su segundo factor, y entrega una sesión al atacante sin que nadie robe nada.
- La ANCI detectó una campaña masiva a nivel nacional que abusa del flujo OAuth 2.0 Device Authorization Grant en Microsoft Entra ID y Microsoft 365 (
AIA26-00268, TLP:CLEAR). - Puede ser efectiva incluso con MFA activo, porque la vÃctima completa la autenticación en infraestructura auténtica de Microsoft. No hay página falsa que detectar ni dominio que bloquear.
- La Agencia es explÃcita: hay que tratarlo como compromiso de identidad y de sesión, no como phishing tradicional. Cambiar la contraseña no basta si quedan tokens válidos, reglas de correo o dispositivos registrados.
Qué pasó
El 19 de junio de 2026 la ANCI publicó AIA26-00268, una investigación de amenazas —no una alerta de rutina— sobre el abuso del flujo Device Code en entornos Microsoft Entra ID y Microsoft 365. La Agencia la describe como una campaña masiva a nivel nacional.
El Device Code Flow es un mecanismo legÃtimo de OAuth, diseñado para dispositivos que no tienen teclado ni navegador: televisores, impresoras, consolas, dispositivos IoT, herramientas de lÃnea de comandos. En su uso normal, el dispositivo pide un código, tú lo escribes en una URL oficial de Microsoft, te autenticas, y el dispositivo recibe sus tokens.
El abuso consiste simplemente en que quien inicia el flujo es el atacante, no un dispositivo tuyo. Él pide el código a Microsoft y te lo hace llegar con un señuelo: un documento compartido, una reunión, un mensaje de voz, una validación de seguridad, una solicitud interna. Puede llegar por correo, por Teams, por WhatsApp o por Signal.
Tú escribes el código en microsoft.com, que es una página auténtica. Completas tu segundo factor, que también es auténtico. Y en ese momento autorizas la sesión que abrió el atacante. Él recibe tokens válidos para Exchange Online, Outlook, SharePoint, OneDrive, Teams y Microsoft Graph.
Nadie robó una contraseña. Nadie falsificó una página. Todo el flujo ocurrió en infraestructura de Microsoft, y por eso los controles orientados a detectar sitios de phishing no marcan nada.
Por qué importa acá
Microsoft 365 y Entra ID son la columna vertebral de identidad de buena parte de las empresas medianas y grandes de Chile, incluidos sectores regulados como banca, salud y servicios públicos. Comprometer esa identidad no es comprometer un correo: es obtener la llave de la organización.
Y hay un dato que dimensiona el problema mejor que cualquier argumento: entre marzo y agosto de 2026, la ANCI publicó 24 alertas de campañas suplantando a Microsoft, Outlook, SharePoint o Microsoft 365 dirigidas a público chileno. Ninguna otra marca se acerca. Microsoft es, con diferencia, el señuelo más usado contra Chile.
Bajo la Ley 21.663, las instituciones definidas como operadores de importancia vital deben tener capacidad de detección y reporte de accesos no autorizados dentro de plazos acotados, lo que exige monitoreo activo de los registros de autenticación en la nube. Y si el token comprometido da acceso a datos personales, entran las obligaciones de la Ley 21.719, incluida la eventual notificación a los titulares afectados.
El problema práctico es el tiempo: como no hay indicadores de compromiso tradicionales, muchas organizaciones descubren este tipo de incidente semanas después del acceso inicial.
Hay dos cruces que conviene hacer, y ninguno aparece si se lee la alerta de forma aislada.
El primero es de volumen. Veinticuatro campañas suplantando a Microsoft en seis meses, más una investigación nacional sobre abuso de su flujo de identidad. Eso no es una marca entre otras: es el terreno donde se está peleando el acceso corporativo en Chile. Si tu organización usa Microsoft 365 y tu programa de concientización sigue centrado en «no hagas clic en enlaces raros», estás entrenando para la guerra anterior. Acá el enlace es legÃtimo.
El segundo está en los indicadores. De los tres dominios que publicó la ANCI, uno es sayze.cl. Un dominio chileno.
Es el mismo patrón que documentamos en la campaña contra CorreosChile, donde el alojamiento era bioredox.cl/wp-content/. Evaluamos con confianza media —el indicio es el TLD y el modo de uso, y no verificamos el estado del sitio— que se trata de otro sitio chileno comprometido, usado como infraestructura intermedia.
Si esa lectura es correcta, el circuito se cierra de una forma incómoda: los sitios .cl desactualizados no solo alojan phishing bancario. También sostienen las páginas intermedias que le entregan el código de dispositivo a un empleado chileno para robarle la sesión corporativa. El WordPress sin parchar de una pyme termina siendo parte de la cadena que compromete a una empresa grande.
24 campañas contra Microsoft entre marzo y agosto de 2026 — Ninguna otra marca se acerca en el conjunto de alertas de la ANCIsayze.cl — Dominio chileno entre los tres indicadores; mismo patrón que bioredox.clautenticación completada en infraestructura legÃtima — Por eso evade tanto el filtrado de URL como el MFA tradicionalEl ataque a la identidad va a seguir desplazando al ataque al endpoint, por una razón económica simple: un token de sesión rinde más que un equipo comprometido y no deja los rastros que un antivirus sabe buscar.
La consecuencia para tu estrategia de detección es concreta. Si tu inversión está concentrada en EDR y filtrado de correo, esta técnica te pasa por al lado: toda la actividad ocurre a nivel de identidad y de nube, no en el equipo. Los registros que importan son los de Entra ID y los de Graph, y la pregunta que hay que poder responder es si alguien los está mirando.
Anatomía del ataque
Mapeo a marcos públicos, para que puedas cruzarlo con tu propia matriz de cobertura.
T1528— El corazón de la técnica: el atacante obtiene el token, no la contraseña.T1566.002— Cuando el código llega por correo con señuelo de documento o reunión.T1566.003— Cuando llega por Teams, WhatsApp o Signal, que es lo que la ANCI observó.T1078.004— Con el token, el atacante opera como el usuario legÃtimo. No hay credencial robada que detectar.T1114.002— Lectura y exfiltración masiva de correo vÃa Microsoft Graph.T1564.008— Reglas de reenvÃo, eliminación u ocultamiento creadas tras el acceso.
Estructurado sobre las seis funciones del NIST CSF 2.0, según el ciclo de respuesta a incidentes de NIST SP 800-61r3 (abril 2025, reemplaza al r2). Proteger y Detectar vienen abiertas.
GV GobernarQuien decide, que se reporta y a quien
La decisión de fondo es simple de enunciar y suele quedar sin dueño: ¿tu organización necesita el Device Code Flow? La ANCI recomienda revisar si existe una necesidad operacional real y documentada, y si no la hay, bloquearlo.
Alguien tiene que ser dueño de la configuración de Entra ID. En muchas organizaciones chilenas ese rol quedó con el proveedor que hizo la migración a Microsoft 365 hace cuatro años, y nadie lo revisó desde entonces.
- Determinar y documentar si existe un caso de uso real para Device Code Flow en el tenant.
- Asignar un responsable interno de la configuración de identidad, no solo del soporte.
- Definir el procedimiento de respuesta ante compromiso de identidad, distinto del de phishing.
ID IdentificarSi esto me toca, por donde me toca
Antes de bloquear nada, mira quién lo está usando hoy. La consulta de la sección de detección te lo dice en un minuto, y en la mayorÃa de los tenants el resultado es cero o casi cero.
Si aparecen usuarios, no asumas que son maliciosos: pueden ser dispositivos legÃtimos sin navegador. IdentifÃcalos antes de aplicar la polÃtica, o vas a romper algo.
- Ejecutar el inventario de 90 dÃas de inicios de sesión por Device Code Flow.
- Identificar cada uso legÃtimo y su justificación antes de bloquear.
- Revisar qué cuentas privilegiadas existen y cuáles tienen MFA resistente a phishing.
PR ProtegerComo evito que ocurra
El control decisivo es uno solo, y es de configuración, no de producto: bloquear el Device Code Flow mediante Conditional Access.
La ruta exacta en Entra ID: crear una polÃtica, en *Conditions* elegir la condición Authentication flows y marcar el bloqueo de Device code flow. La ANCI recomienda aplicarla a todos los usuarios y recursos cloud relevantes, con la única exclusión de las cuentas de emergencia o *break-glass*, siempre que estén protegidas, monitoreadas y documentadas.
Antes de aplicarla en modo bloqueo, déjala en modo reporte unos dÃas. Es la diferencia entre cerrar un vector y dejar sin acceso a la sala de reuniones un lunes por la mañana.
Controles priorizados
P1: esta semana · P2: este mes · P3: este trimestre
| Prio | Control | Esfuerzo | Mapeo |
|---|---|---|---|
| P1 | Ejecutar el inventario de 90 dÃas de inicios de sesión por Device Code Flow antes de tocar nada. Es de un minuto y evita romper un dispositivo legÃtimo. | bajo | CIS Controls v8 8.11 ISO 27001 A.8.16 |
| P1 | Bloquear Device Code Flow con Conditional Access: condición *Authentication flows* → bloquear *Device code flow*. A todos los usuarios y recursos cloud, excluyendo solo las cuentas break-glass documentadas y monitoreadas. Aplicar primero en modo reporte. | bajo | MITRE ATT&CK M1018 CIS Controls v8 6.8 ISO 27001 A.8.2 |
| P1 | Bloquear los tres dominios publicados por la ANCI y buscar hacia atrás 120 dÃas si alguien de la organización los alcanzó. | bajo | MITRE ATT&CK M1021 CIS Controls v8 9.2 ISO 27001 A.8.23 |
| P2 | Migrar las cuentas privilegiadas a MFA resistente a phishing (FIDO2 o passkeys). No detiene este ataque por sà solo, pero elimina toda la familia de técnicas que dependen de una aprobación simple. | medio | MITRE ATT&CK M1032 CIS Controls v8 6.5 ISO 27001 A.8.5 |
| P2 | Incorporar el mensaje especÃfico a la concientización: Microsoft nunca te pide escribir un código para abrir un documento o entrar a una reunión. El mensaje genérico sobre enlaces sospechosos no cubre este caso. | bajo | MITRE ATT&CK M1017 CIS Controls v8 14.2 ISO 27001 A.6.3 |
| P3 | Dejar alertas permanentes en el SIEM para inicios de sesión por Device Code y para creación de reglas de correo, correlacionadas por usuario y ventana temporal. | medio | CIS Controls v8 8.11 ISO 27001 A.8.16 |
El segundo control cierra el vector completo y se configura en una tarde. Es de los pocos casos en que una sola polÃtica elimina una técnica entera, y por lo mismo llama la atención cuántos tenants chilenos siguen con el flujo habilitado sin usarlo jamás.
DE DetectarComo me doy cuenta de que ya ocurrio
Hay dos momentos que detectar, y el segundo es el que casi nadie mira.
El primero es el inicio de sesión por Device Code. En un tenant sano deberÃan ser cero, asà que cualquier evento merece revisión, y con más razón si el usuario nunca habÃa usado ese método o si viene desde una geografÃa, un ASN o un proveedor cloud inhabitual.
El segundo es lo que ocurre después, y es donde se confirma el compromiso: lectura masiva de correo vÃa Graph, creación de reglas de reenvÃo u ocultamiento, registro de dispositivos nuevos, consentimientos OAuth que nadie autorizó, reconocimiento de usuarios y grupos.
Y una señal que no está en ningún log: un usuario que reporta haber escrito un código de Microsoft para abrir un documento o entrar a una reunión. Ese reporte vale más que cualquier alerta, y solo llega si la gente sabe que eso es raro.
Qué necesitas tener logueado
- SigninLogs de Entra ID, con el campo AuthenticationProtocol
- AADNonInteractiveUserSignInLogs, donde aparece el uso posterior de los tokens
- AuditLogs de Entra ID: registro de dispositivos y consentimientos OAuth
- Registros de Exchange Online o CloudAppEvents, para reglas de bandeja de entrada
Indicadores de compromiso
hxxp, [.]) para evitar clics accidentales. El bloque de abajo los trae en crudo, listos para tu lista de bloqueo.| Tipo | Indicador | Confianza | Nota |
|---|---|---|---|
domain |
account[.]important[.]vu |
alta | AIA26-00268 |
domain |
sayze[.]cl |
alta | Dominio chileno: probable sitio comprometido, bloquear la ruta y no el dominio raÃz sin verificar |
domain |
zace0bwdgj[.]smoothwebexperiences[.]de |
alta | AIA26-00268 |
account.important.vu sayze.cl zace0bwdgj.smoothwebexperiences.de
Reglas y consultas de detección
title: Autenticacion por Device Code Flow en Entra ID
id: 7c41f0ab-2d95-4e18-b6f3-1a08d5e97c24
status: experimental
description: |
Detecta inicios de sesion que usan el flujo de codigo de dispositivo (RFC 8628).
En la mayoria de los tenants corporativos este flujo no se usa nunca, asi que
cualquier aparicion merece revision. La campana AIA26-00268 lo aprovecho para
obtener tokens validos sin montar una pagina de login falsa: la victima se
autentica en el portal real de Microsoft y entrega el codigo al atacante.
author: Vantis Chile SpA
date: 2026/09/02
references:
- https://www.vantis.cl/noticias/device-code-phishing-campana-nacional-microsoft-365-chile
- https://datatracker.ietf.org/doc/html/rfc8628
logsource:
product: azure
service: signinlogs
detection:
device_code:
properties.authenticationProtocol: deviceCode
exitoso:
properties.status.errorCode: 0
condition: device_code and exitoso
fields:
- properties.userPrincipalName
- properties.appDisplayName
- properties.ipAddress
- properties.location.countryOrRegion
falsepositives:
- Aprovisionamiento de equipos sin teclado, como salas Teams Rooms o senaletica digital
- Herramientas de consola que lo usan a proposito, como "az login --use-device-code"
- Onboarding masivo de dispositivos por parte del area de TI, acotado en el tiempo
level: high
tags:
- attack.credential_access
- attack.t1528
- attack.initial_access
- attack.t1566
// Inicios de sesion por Device Code Flow: en la mayoria de los tenants deberian ser cero
SigninLogs
| where TimeGenerated > ago(90d)
| where AuthenticationProtocol =~ "deviceCode"
| extend Pais = tostring(LocationDetails.countryOrRegion),
Ciudad = tostring(LocationDetails.city)
| summarize Intentos = count(),
Exitosos = countif(ResultType == 0),
Apps = make_set(AppDisplayName, 10),
Paises = make_set(Pais, 10),
IPs = make_set(IPAddress, 10),
Primero = min(TimeGenerated), Ultimo = max(TimeGenerated)
by UserPrincipalName
| order by Exitosos desc
// Actividad posterior tipica: reglas de correo, lectura masiva por Graph, dispositivos nuevos
let ventana = 90d;
union isfuzzy=true
(CloudAppEvents
| where Timestamp > ago(ventana)
| where ActionType in ("New-InboxRule","Set-InboxRule","UpdateInboxRules")
| project Timestamp, Usuario = AccountDisplayName, Senal = "regla de correo creada",
Detalle = tostring(RawEventData)),
(AADNonInteractiveUserSignInLogs
| where TimeGenerated > ago(ventana)
| where AppDisplayName has_any ("Microsoft Graph","Microsoft Authentication Broker")
| where ResultType == 0
| project Timestamp = TimeGenerated, Usuario = UserPrincipalName,
Senal = "token usado contra Graph", Detalle = strcat(IPAddress, " / ", AppDisplayName)),
(AuditLogs
| where TimeGenerated > ago(ventana)
| where OperationName has_any ("Add device","Add registered users","Consent to application")
| project Timestamp = TimeGenerated,
Usuario = tostring(InitiatedBy.user.userPrincipalName),
Senal = OperationName, Detalle = tostring(TargetResources))
| order by Timestamp desc
// Los tres dominios publicados por la ANCI en AIA26-00268
let dominios = dynamic(["account.important.vu","sayze.cl","zace0bwdgj.smoothwebexperiences.de"]);
union isfuzzy=true
(EmailUrlInfo | where Timestamp > ago(120d) | where Url has_any (dominios)
| project Timestamp, Origen = "correo", Detalle = Url),
(DeviceNetworkEvents | where Timestamp > ago(120d) | where RemoteUrl has_any (dominios)
| project Timestamp, Origen = "navegacion", Detalle = RemoteUrl),
(DnsEvents | where TimeGenerated > ago(120d) | where Name has_any (dominios)
| project Timestamp = TimeGenerated, Origen = "dns", Detalle = Name)
| order by Timestamp desc
rule vantis_aia26_00268_device_code_dominios {
meta:
author = "Vantis Chile SpA"
description = "Contacto con los tres dominios de la campana de Device Code phishing " \
"publicada por la ANCI en AIA26-00268 (Chile, agosto 2026)"
reference = "https://www.vantis.cl/noticias/device-code-phishing-campana-nacional-microsoft-365-chile"
severity = "HIGH"
priority = "HIGH"
rule_version = "1.0"
yara_version = "YL2.0"
events:
(
re.regex($e.network.dns.questions.name,
`(^|\.)(account\.important\.vu|sayze\.cl|zace0bwdgj\.smoothwebexperiences\.de)$`)
or
re.regex($e.target.hostname,
`(^|\.)(account\.important\.vu|sayze\.cl|zace0bwdgj\.smoothwebexperiences\.de)$`)
or
re.regex($e.target.url,
`(account\.important\.vu|sayze\.cl|zace0bwdgj\.smoothwebexperiences\.de)`)
)
outcome:
$usuario = $e.principal.user.userid
$equipo = $e.principal.hostname
$destino = $e.target.hostname
condition:
$e
}
SELECT
DATEFORMAT(devicetime, 'yyyy-MM-dd HH:mm:ss') AS fecha,
QIDNAME(qid) AS evento,
LOGSOURCENAME(logsourceid) AS fuente,
username AS usuario,
sourceip AS origen,
destinationip AS destino,
"URL" AS url,
"DNS Query Name" AS consulta_dns
FROM events
WHERE
"URL" ILIKE '%account.important.vu%'
OR "URL" ILIKE '%sayze.cl%'
OR "URL" ILIKE '%zace0bwdgj.smoothwebexperiences.de%'
OR "DNS Query Name" ILIKE '%account.important.vu%'
OR "DNS Query Name" ILIKE '%sayze.cl%'
OR "DNS Query Name" ILIKE '%zace0bwdgj.smoothwebexperiences.de%'
ORDER BY devicetime DESC
LAST 90 DAYS
El inventario de Device Code Flow va a mostrar usos legÃtimos si tienes dispositivos sin navegador: pantallas de sala, impresoras, algún equipo de laboratorio. IdentifÃcalos antes de bloquear; ese es el punto de correr la consulta primero.
La regla de actividad posterior tiene ruido propio: se crean reglas de correo legÃtimas todos los dÃas. Lo que la vuelve señal es la coincidencia temporal con un inicio de sesión por Device Code. Correlaciona por usuario y ventana de tiempo, no mires las alertas por separado.
RS ResponderContencion y erradicacion
Acá está el error más costoso, y la ANCI lo advierte de forma explÃcita: cambiar la contraseña no basta. El atacante no tiene la contraseña. Tiene tokens.
Un refresh token puede seguir vigente semanas después del cambio de clave. Hay que revocarlos de forma explÃcita, y además revisar todo lo que el atacante pudo dejar puesto para volver: reglas de correo, consentimientos OAuth, dispositivos registrados, métodos de autenticación agregados.
Trátalo como compromiso de identidad y de sesión, no como un correo malicioso más.
- Revocar todas las sesiones y tokens del usuario en Entra ID, no solo cambiar la contraseña.
- Revisar y eliminar reglas de correo creadas o modificadas desde la fecha del acceso.
- Auditar consentimientos OAuth y aplicaciones autorizadas por esa cuenta.
- Revisar dispositivos registrados y métodos de autenticación agregados recientemente.
- Buscar en los registros de Graph qué se leyó o descargó, para dimensionar la exposición de datos.
- Evaluar la obligación de notificar bajo la Ley 21.719 según qué datos quedaron accesibles.
RC RecuperarVolver a operar y no repetirlo
Cierra el vector antes de dar el incidente por resuelto: si no bloqueaste el Device Code Flow, la misma técnica funciona mañana con otro usuario.
Y sobre la concientización: el mensaje tiene que ser especÃfico, porque el genérico no sirve acá. Microsoft nunca te va a pedir que escribas un código para abrir un documento, entrar a una reunión o validar tu seguridad. Si alguien te manda un código y te dice dónde escribirlo, es un ataque, aunque la página sea de Microsoft.
- Verificar que la polÃtica de Conditional Access quedó en bloqueo, no en modo reporte.
- Incorporar el mensaje especÃfico del código a la concientización, con ejemplo real.
- Medir cuánto pasó entre el acceso inicial y la detección. Esa cifra es tu punto de partida.
Llévatelo
Lo de arriba explica. Esto se ejecuta. Son archivos, no capturas de pantalla: se abren, se pegan y funcionan.
La regla Sigma es la canónica: es el formato neutral del que se derivan las demás. Si tu SIEM no aparece en la lista, esa se convierte con pySigma. Las traducciones a motores concretos van sin validar contra tu modelo de datos — revisa los nombres de tabla y campo antes de subirlas a producción.
Fuentes
- ANCI / CSIRT NacionalAIA26-00268 — Abuso del flujo OAuth Device Code en Microsoft Entra ID / Microsoft 365 · 2026-06-19
- MITRE ATT&CKT1528 — Steal Application Access Token
- MITRE ATT&CKT1566.003 — Phishing: Spearphishing via Service
- MITRE ATT&CKT1564.008 — Hide Artifacts: Email Hiding Rules
- BCNLey 21.663, Ley Marco de Ciberseguridad
¿Esto te aplica y no sabes por dónde partir?
Revisamos tu exposición real frente a lo que describe este análisis: superficie expuesta, cobertura de detección y brechas frente a la Ley 21.663. Diagnóstico de 15 minutos, sin costo.
Agendar diagnósticoRelacionado
Ocho campañas contra GTD Telsur en un mes salieron de tres servidores
ANCI publicó ocho alertas distintas por suplantación de la telco entre el 3 y el 31 de agosto. Al cruzar los indicadores…
Los 90 millones de registros que terminan siendo un SMS en tu teléfono
Exfilsquad reclamó 874 GB de un banco africano. Cl0p reapareció con 42 víctimas de nombres tachados. Ninguno de los dos…
ShinyHunters no rompió ningún control: usó la confianza que ya estaba concedida
EY confirmó una intrusión a través de una plataforma de soporte de terceros. Días después, el mismo grupo reclamó tres b…