sistema: OPERATIVO
← volver a todos los hacks
AGENTS MEDIUM NEW

AutoJack: un agente navegador convierte una página web en RCE en el host

La investigación AutoJack de Microsoft (18 de junio de 2026) muestra a un agente de IA navegador heredando la identidad localhost para alcanzar un WebSocket MCP local y ejecutar procesos arbitrarios en el host.

2026-06-21 // 6 min affects: autogen-studio, autogen, mcp, browsing-agents

¿Qué es esto?

El 18 de junio de 2026, el Microsoft Defender Security Research Team publicó AutoJack, una cadena de explotación contra AutoGen Studio — la interfaz de prototipado de código abierto del framework multiagente AutoGen de Microsoft. Una simple página web maliciosa, una vez renderizada por un agente navegador local, puede alcanzar un WebSocket Model Context Protocol (MCP) local y lanzar procesos arbitrarios en el host. Microsoft la llamó AutoJack porque «secuestra» al agente y lo convierte en el vehículo de entrega final del atacante, cruzando la frontera de confianza localhost en la que innumerables herramientas de desarrollo confían en silencio. El fallo se notificó al MSRC y se corrigió en el commit b047730 antes de cualquier publicación: se documenta, por tanto, como un patrón, no como un 0-day activo.

Cómo funciona

AutoJack compone tres debilidades independientes en la superficie WebSocket MCP de AutoGen Studio. Ninguna es exótica por sí sola; encadenadas, producen ejecución de código en el host.

Primero, una lista de orígenes permitidos que el propio agente derrota (CWE-1385, falta de validación de origen en WebSockets). El WebSocket MCP solo acepta conexiones cuyo Origin sea http://127.0.0.1 o http://localhost. Eso bloquea correctamente a un humano que apunta un navegador a evil.example. Pero no bloquea el JavaScript renderizado por un navegador headless propiedad de un agente en la misma máquina — un MultimodalWebSurfer, un surfer basado en Playwright o cualquier herramienta de ejecución de código. Todo lo que el agente cargue hereda la identidad loopback.

Segundo, la autenticación es opcional para las rutas MCP (CWE-306, falta de autenticación de una función crítica). El middleware de autenticación de AutoGen Studio omitía explícitamente /api/mcp/* y /api/ws/*, suponiendo que esos handlers verificarían los tokens por su cuenta. El handler del WebSocket MCP nunca lo hizo: aceptaba conexiones sin autenticación, fuera cual fuera el modo configurado.

Tercero, server_params de la URL es la línea de comandos (CWE-78, inyección de comandos del sistema operativo). El endpoint leía un parámetro de consulta server_params, decodificaba en base64 un blob JSON a StdioServerParams y pasaba command + args directamente a stdio_client(). Sin lista blanca de ejecutables, calc.exe, powershell.exe -enc [REDACTED] o bash -c [REDACTED] se aceptaban todos como «servidores MCP».

La cadena completa: el usuario entrega a un agente «resume esta URL» de apariencia inocente una página del atacante; el navegador headless del agente la renderiza; el JavaScript de la página abre ws://localhost:8081/api/mcp/ws/<id>?server_params=[REDACTED]; como la petición se origina en la máquina, la comprobación de origen pasa; como el middleware cortocircuita las rutas MCP, no se requiere token; y AutoGen Studio decodifica la carga y lanza el comando del atacante bajo la cuenta del desarrollador. Es un problema clásico de diputado confundido (confused deputy) — no se reproduce ninguna carga útil aquí, porque la lección es estructural, no una receta.

Por qué importa

Lo relevante no es AutoGen Studio en concreto — Microsoft aclara que la ruta afectada nunca llegó a PyPI, y el paquete actual (autogenstudio 0.4.2.2) no la contiene. Lo relevante es el patrón: cuando un agente en su estación de trabajo puede a la vez navegar por contenido no fiable y hablar con servicios locales privilegiados, localhost deja de ser una frontera de confianza. El loopback se ha tratado durante mucho tiempo como implícitamente fiable — endpoints de depuración, bases de datos de desarrollo, ejecutores de código y sockets de control MCP suelen vincularse a él sin autenticación. Un agente navegador local disuelve esa suposición: el contenido externo ahora dirige un proceso que ya vive dentro de la zona de confianza. Es la misma familia de riesgo estructural que la trifecta letal y el secuestro de agente en localhost — el agente es el puente entre la entrada no fiable y la capacidad privilegiada.

Defensas

Las mitigaciones son concretas y mayormente arquitectónicas:

  • Nunca vincule planos de control sensibles a localhost sin autenticación. En loopback, los sockets de control MCP, endpoints de depuración, ejecutores de código y bases de datos de desarrollo son una superficie de ataque para cualquier agente en la máquina, no un valor predeterminado seguro.
  • Use una lista blanca de ejecutables que puedan lanzarse como servidores MCP en lugar de aceptar command/args de cualquier llamante. La corrección de Microsoft trasladó los parámetros al lado servidor: un POST aparte los almacena por UUID, y el handler WebSocket rechaza los identificadores desconocidos.
  • Coloque el plano de control tras un proxy inverso autenticado que imponga autenticación en todas las rutas, incluidas WebSocket y /api/* — no confíe solo en los modos de autenticación del framework.
  • Rastree la procedencia / use escudos antiinyección para interceptar la fase de navegación inicial, cuando el contenido del atacante dirige por primera vez al agente hacia una página maliciosa.
  • Apóyese en la detección de comportamiento EDR. La cadena termina con un proceso padre de Python o Node que engendra un proceso hijo inesperado — exactamente el patrón que el EDR está diseñado para señalar. Ejecutar builds de agentes experimentales en estaciones gestionadas o en sandbox contiene el radio de impacto.

Estado

ElementoDetalle
Divulgación18 de junio de 2026 (Microsoft Defender Security Research Team)
AfectadoRuta WebSocket MCP de AutoGen Studio compilada desde main durante la ventana previa al lanzamiento
No afectadoRelease de PyPI autogenstudio 0.4.2.2 (ruta ausente)
CorrecciónCommit upstream b047730; main en versión 0.7.2
ClaseCWE-1385 + CWE-306 + CWE-78 encadenadas → RCE en el host

Sources