El contenido de este blog proviene de la charla que realicé en la RootedCon 2026 en Madrid. Tras realizar toda la investigación y pruebas, me pareció interesante compartir todo el contenido por aquí y así llegar a más gente. La idea de la investigación en septiembre-octubre del 2025 fue clara: ¿Cuánto puede llegar a confiar un usuario final en una solución IA?
Atención: En ningún momento el propósito de este post es de ayudar a nadie a generar casos de uso de phishing, sino de avisar y crear conciencia sobre el poder de la tecnología mal usada. Además, adrede, hay algunos pasos que no se han descrito para que no pueda ser reproducido.
Con el auge de Copilots, IAs generativas y cuando ya podemos ver vídeos en RRSS que nos cuesta distinguir si son reales o no; la misma IA puede usarse "con malas intenciones" para confundir al usuario final, robar credenciales y aprovechar su sobre confianza para infiltrarse en las organizaciones y robar sus datos. Y si en este caso es aprovecharse de la confianza que tenemos en los productos de Microsoft, veréis que aún es mucho más fácil aplicar "ingeniería social" para engañar al usuario.
El caso que os traigo hoy es sencillo: Un usuario cualquiera recibe acceso a una URL confiable de Microsoft con el pretexto que se ha publicado un Copilot que le puede ayudar a [introducir aquí cualquier tarea del estilo finanzas, Recursos Humanos, etc]. El usuario comprueba que está publicado en un entorno confiable e interacciona con el Copilot. Sin saberlo, ha aceptado delegar sus permisos al bot y por detrás, el autor del bot ha sido capaz de descomponer el token generado y utilizar ese permiso para realizar accesos a los datos de la organización en nombre del usuario. Tenemos robo de token, abuso de token y abuso de la cadena de la delegación de permisos.
¿La clave? El desconocimiento del usuario. La principal ciberamenaza del usuario.
Cuando propuse esta charla para la RootedCon no sabía que los investigadores del portal Datadog habían encontrado el mismo "procedimiento" para abusar los tokens. Os dejo la referencia a su investigación; merece la pena echarle un ojo pues explicará muchos conceptos en más detalle que yo misma: CoPhish: Using Microsoft Copilot Studio as a wrapper for OAuth phishing | Datadog Security Labs. Sin embargo, yo logré en mi caso algo que ellos no pudieron: confundir y ocultar los permisos que el usuario estaba aceptando al interaccionar con el Copilot.
Sin embargo, vamos por partes a desgranar cómo funciona este proceso.
¿Cuáles son las 3 entidades e identidades clave en este ejemplo?
Dentro de nuestro PaaS, tenemos 3 entidades y 4 componentes distintos que interaccionan de modos distintos y la identidad de éstos se materializa de manera distinta:
- Nuestro usuario final: el que interacciona con el chat del Copilot publicado. Su identidad se gestiona mediante un usuario en Entra ID de nuestra organización que permite generar tokens delegados y tiene la posibilidad de consentir ciertos permisos. Por supuesto ya podemos sospechar de casos de consent phishing y over-delegation como veremos en este escenario.
- El flow de Power Automate: usaremos este flujo para "enmascarar" las intenciones de nuestro atacante. La identidad usada para su ejecución se captura del contexto del usuario que provoca el lanzamiento del flujo (durante la conversación con el Copilot) y ese token se transmitirá al conector personalizado. El riesgo que tiene Power Automate es la escala accidental de privilegios (al final tenemos los mismo privilegios que el usuario y quizás eso no sería correcto).
- El conector personalizado: el componente que "robará" el token delegado. En este caso en la organización de origen donde se configura el conector personalizado crearemos un service principal que identifique a la aplicación con todos los permisos delegados de MS Graph que queremos "preguntar por su consentimiento" al usuario final.
- El Agente o Copilot creado en Copilot Studio: será el "caballo de troya" que interactuará con el usuario final y le pedirá aceptar el uso del conector personalizado para, en la sombra, robar el token con todos los permisos delegados del usuario. Actuará como app-only y su service principal será creado automáticamente por Microsoft(*).
(*) A fecha de hoy, marzo del 2026, sigue funcionado así.
Desde el punto de vista de la ciberseguridad: ¿Qué visibilidad tenemos de lo que sucede en Copilot Studio?
Este blog está siendo escrito en marzo del 2026, por lo que el famoso Agent365 y el Agent identity en el que Microsoft está trabajando NO es la configuración por defecto (incluso el setting que habilita la identidad de agentes en Copilot Studio aún está en public preview).
Cuando alguien en nuestra organización crea un Copilot en Copilot Studio, automáticamente se crea un service principal de aplicación en nuestro Entra ID. Sin embargo, no podemos inspeccionar ni los permisos que utiliza, ni el flujo de datos ni fuentes que utiliza. Además, tenemos el problema que cada vez que se añade un conector, una fuente de datos, un flujo o cualquier componente a nuestro Copilot Studio, se generan en masa muchísimos service principals. Hecho que dificulta la auditoría, la gestión y la visibilidad de qué hacen en verdad todos estos service principals sin sentido (y sin owner claro, pues la mayoría tienen a Copilot Studio como owner).
Esto queda un poco a margen de nuestro escenario, pero es necesario para entender la poca trazabilidad que existen a día de hoy de los copilots.
Anatomía de una exfiltración silenciosa
¿Cómo logra el agente malicioso aprovecharse del token del usuario? Usaremos un caballo de troya constituido por un Copilot publicado en un "website" de prueba y publicado bajo un dominio de Microsoft. Esta URL pública se distribuye bajo el pretexto de un agente que utiliza a un perfil de negocio concreto en ciertas tareas. Aquí el componente de ingeniería social y phishing es lo más crítico, pero una vez superado, todo lo demás funciona solo.
El objetivo será robar el token de permisos delegados que se genera cuando el usuario consiente al conector personalizado ciertos permisos que el usuario no es consciente (porque no los muestra). En la práctica, las aplicaciones Power Platform usan bearer tokens: si un token se intercepta, puede permitir replay. Los mecanismos de proof-of-possession no son el comportamiento por defecto en todos los escenarios. Podemos robar ese token generado y utilizarlo en cualquier código malicioso que extraiga datos de la organización a los que el usuario nos ha dado consentimiento sin saberlo.
¿Cómo funciona en flujo a lo largo de la interacción?
La idea es que la víctima interactúa con un Copilot que ha recibido y que aparentemente es confiable. Cuando la víctima interactúa con el agente, de repente este ejecuta un flujo que incluye un conector personalizado. El usuario acepta el uso de conector personalizado (con una descripción y uso falso) sin saber que, lo que está haciendo, es aceptar cientos de permisos delegados. Una vez el token es generado, el atacante lo intercepta mediante un webhook. Ese token es descompuesto mediante JWT (JSON Web token) y la parte del "assertion" es utilizada para requerir un nuevo token para MSGraph con todo los permisos que había consentido el usuario.
En ese momento tenemos un robo del token, un abuso de éste y hemos comprometido la información y el acceso a la organización sin que el usuario lo supiera.
Vamos paso a paso: ¿Cómo puede un usuario caer en un phishing por parte de un atacante?
Con este token, ya podemos construir llamadas a la API de Graph para obtener todos los archivos, emails, reuniones, contactos... y todos los permisos consentidos que el usuario nos haya dado de su organización sin que se detecte si no se monitoriza consent grants + anomalías.






Soy aficionada a la fotografía digital y analógica (mi querida Kiev 4A del 1972).

0 Comentarios