← Volver a todas las publicaciones
Publicado el · por Renaud Deraison

Bastó con cargar la página

El Frontier Red Team de Anthropic dice que un modelo no publicado encontró fallos en navegadores y kernels y los encadenó en exploits funcionales, entre ellos uno que tomó el control de un Chrome estándar en macOS segundos después de cargar una página. Los agentes de código abren páginas todo el día. En Bromure Agentic Coding, el navegador del agente se ejecuta en su propia VM desechable, lejos del código, las credenciales y el Mac, y las automatizaciones de revisión de código ponen en práctica en tu propia máquina el consejo de Anthropic de analizar cada pull request.

Cuatro fallos, una página, unos segundos. Cadenas de exploits como esta requerían un equipo de especialistas, y ahora un modelo puede construir una. El navegador que maneja tu agente de código está expuesto a ellas en cada página que abre.

El 27 de octubre, el Frontier Red Team de Anthropic publicó un informe sobre cinco cadenas de exploits que un modelo de investigación interno, no publicado, encontró y construyó “tras un prompt inicial”. Una cadena de exploits enlaza varios fallos de modo que cada uno lleve el ataque más allá de una defensa que el anterior no podía superar. Los objetivos fueron Chrome, Safari, Android, Windows y Linux. Anthropic comunicó las cinco a los fabricantes mediante divulgación coordinada, y The Hacker News, que cubrió el informe ayer, señala que ninguna se ha visto en un ataque real.

La conclusión de Anthropic cabe en una línea: “Los modelos de frontera tienen la capacidad de descubrir y combinar múltiples vulnerabilidades en un exploit funcional”.

Una página, cuatro fallos

La cadena de Chrome es la que hay que leer con atención. Su prueba de concepto abría la Calculadora desde un Chrome con la configuración por defecto en macOS “a los pocos segundos de cargar la página”. La Calculadora es la prueba tradicional: si un exploit puede abrir una app en tu Mac, puede abrir cualquier otra cosa.

Hicieron falta cuatro fallos:

  1. Un fallo en V8, el motor JavaScript de Chrome, permitía a la página corromper la memoria del motor.
  2. Un segundo fallo de V8 escapaba del propio sandbox de memoria de V8 y daba al atacante el control del renderer, el proceso que dibuja la página.
  3. Una race condition en CacheStorage permitía a ese renderer leer memoria fuera de su sandbox y mapear el proceso del navegador, más privilegiado.
  4. Un use-after-free en FedCM, la función de inicio de sesión federado de Chrome, ejecutaba el código del atacante completamente fuera del sandbox.

El sandbox de Chrome da por hecho que el renderer caerá en algún momento y mantiene el daño dentro de él. Los pasos tres y cuatro deshacen eso. Anthropic dice haber comunicado 62 fallos de Chrome que recibieron CVE y estaban corregidos en Chrome 156, todos de gravedad crítica o alta, entre ellos 13 escapes del sandbox y 21 fallos de compromiso del renderer.

La cadena de Safari nunca ejecuta código. Obtiene acceso de lectura y escritura a la memoria del navegador y cambia un solo valor para desactivar la same-origin policy, la regla que impide que un sitio lea otro. Con la regla desactivada, cualquier página podía leer el historial, las cookies y los datos de sesión de Safari, y enviar peticiones autenticadas a otros sitios. Apple lo corrigió en iOS y iPadOS 26.5.2.

La cadena de Linux conseguía una shell de root por la red, sin iniciar sesión, en cualquier máquina con un listener de multipath TCP. Filtrar una dirección del kernel llevó unos 48 minutos, y la shell cinco más. El fallo, CVE-2026-98432, se corrigió upstream el 15 de octubre.

De la carga de una página a código fuera del sandbox de ChromeCarga una páginaChrome por defectoen macOS,sin más clics1 · Heap de V8la página corrompela memoria delmotor JavaScript2 · Rendererescape del sandbox,ASLR burlado,renderer controlado3 · CacheStorageuna race lee memoriafuera del sandbox,mapea el navegador4 · FedCMuse-after-free,el código corresin sandboxCódigo que se ejecuta como tú, en la máquina del navegadorla prueba de concepto abrió la Calculadora; un payload real podría leer tus archivos, claves y tokens
La cadena de Chrome del informe de Anthropic. Una página maliciosa corrompe la memoria de V8, un segundo fallo de V8 toma el control del renderer, una race condition en CacheStorage filtra la disposición de memoria del proceso del navegador, y un use-after-free en FedCM ejecuta código fuera del sandbox de Chrome. La prueba de concepto abría la Calculadora en un Mac estándar a los pocos segundos de cargar la página.

Tu agente abre más páginas que tú

Son fallos de navegador, y un agente de código es ya uno de los usuarios de navegador más activos en la máquina de un desarrollador. Lee documentación, sigue un enlace de una issue, abre la página de un paquete, revisa un resultado de búsqueda, carga la app que acaba de construir para hacer una captura de pantalla. Los servidores MCP de navegador y las extensiones de navegador lo han convertido en rutina: el agente maneja un Chromium real, a menudo el mismo perfil de Chrome en el que el desarrollador inicia sesión cada mañana.

La mayoría de esas páginas el desarrollador nunca las eligió. Un enlace en una issue de GitHub, una URL en un README, el tercer resultado de búsqueda para un mensaje de error: cualquiera puede servir una cadena como la de Anthropic, y con la cadena de Chrome el agente no tiene que hacer clic en nada. La carga de la página ejecuta los cuatro pasos.

En un portátil, el final de esa cadena es la cuenta del desarrollador en el Mac. Esa misma cuenta guarda ~/.ssh, ~/.aws/credentials, el inicio de sesión de gh, las claves de API del propio agente y cada repositorio clonado. Cambia la Calculadora por un script y lo copia todo. Con la cadena de Safari, el botín es el contenido del propio navegador: las cookies y sesiones de cada sitio en el que el desarrollador ha iniciado sesión, al alcance de una sola página.

La misma página en Bromure Agentic Coding

Bromure Agentic Coding ejecuta Claude Code, Codex, Grok, Kimi y omp en VM Ubuntu en tu Mac. Cada máquina tiene además su propio navegador: un Chromium completo que se abre en un panel junto al chat y que compartís tú y el agente. El agente lo maneja a través de un servidor MCP browser integrado con 23 herramientas para navegar, hacer clic, leer el DOM, hacer capturas de pantalla y leer la consola y el registro de red. No tienes que configurar nada.

El navegador tiene una VM para él solo

Ese Chromium no se ejecuta en tu Mac, ni tampoco en la VM del agente. Se ejecuta en una VM auxiliar aparte. La VM del agente y la VM del navegador comparten una red privada para que el navegador pueda cargar el servidor de desarrollo que inició el agente, y eso es todo lo que comparten. Un archivo que escribe el agente no está en el disco del navegador. Incluso localhost, en el navegador, apunta a la propia VM del navegador.

Lanza la cadena de Chrome de Anthropic contra ese navegador. Los pasos uno a cuatro funcionan según lo previsto: el renderer cae, el sandbox cae y el código del atacante se ejecuta como el navegador. Ese código está ahora dentro de una VM que contiene un Chromium y nada más. No hay ~/.ssh que copiar ni ~/.aws que leer. El repositorio, la configuración del agente y sus tokens están todos en otra VM, y tu Mac está detrás de una frontera de hipervisor. Las herramientas de navegador del agente tampoco comparten proceso con Chromium: llegan a él a través de un pequeño shim que habla con el host por vsock. En palabras del manual, “una página hostil nunca puede tocar los archivos del agente ni tu Mac”.

El navegador olvida

Por defecto, el navegador es desechable. Su disco es un clon copy-on-write de una imagen compartida, que se borra cuando el navegador se desmonta. Un navegador oculto se suspende tras unos diez segundos y se desmonta a los cinco minutos, y el siguiente arranca desde una imagen limpia. Un payload que aterriza en la VM del navegador desaparece con la VM.

Eso cubre también el tipo de cadena de Safari, la que lee cookies y sesiones en lugar de ejecutar código. Un navegador desechable no tiene sesiones de ayer. Contiene aquello en lo que el agente inició sesión durante esta tarea, y nada de tu navegación diaria, porque tu navegador de todos los días es otro programa en otra máquina.

Cuando un proyecto necesita un inicio de sesión que dure, Stay signed in to websites, en los ajustes Browser de la máquina, conserva un perfil en un disco cifrado, solo para esa máquina. Actívalo para el sitio de staging contra el que prueba el agente, y déjalo desactivado en cualquier máquina que trabaje con código no fiable.

Portátil: el navegador del agente corre como túEl agente abre un enlace de una issueChrome en macOS, a menudo tu propio perfil con sesiónLa cadena escapa del sandboxel código corre con tu cuenta de macOSTodo lo que tú puedes leer, lo lee~/.ssh, ~/.aws, sesión de gh, claves de API del agente,cada repositorio clonado, cookies del navegadorBromure: el navegador tiene su propia VMVM del agente (Ubuntu)repositorio, config del agente, credenciales sustitutasherramientas por vsockVM auxiliar del navegadorla cadena sale del sandbox de Chrome y aterriza aquí:Chromium y un disco desechable, nada másDesmontada y recreada limpiaclon desechable borrado al desmontar;tu Mac está detrás del hipervisor
La misma cadena en un portátil y en una máquina Bromure. En un portátil, el agente maneja un navegador que se ejecuta como tú en el Mac, así que el código que escapa del sandbox de Chrome puede leer tus claves, tokens y repositorios. En Bromure, el navegador del agente se ejecuta en su propia VM auxiliar desechable; un escape aterriza en una VM que solo contiene Chromium, separada de la VM del agente y del Mac, y la VM se tira.

La VM del agente solo tiene sustitutos

Supongamos que un atacante llega más lejos y alcanza la VM del agente por otra vía, por ejemplo un paquete malicioso que el agente instala siguiendo las instrucciones de la página. Las claves que hay ahí son sustitutos. El token de GitHub en la configuración de gh y en ~/.git-credentials es falso, y el proxy de tu Mac lo cambia por el real solo de camino a github.com. Un sustituto enviado a cualquier otro host se bloquea antes de salir del Mac, y la VM se pausa con una alerta que indica la credencial y adónde iba.

Analiza cada pull request, en tu Mac

Anthropic dice a los defensores que “analizar tu propio código es más importante que nunca”. El informe añade que el análisis corresponde al momento del pull request, porque despejar el atraso “solo resuelve la mitad del problema” mientras siga llegando código nuevo.

Bromure Agentic Coding lo trae integrado. Una automatización de code review vigila un repositorio de GitHub con un agente en una de tus máquinas y registra lo que encuentra como findings, sin duplicados entre análisis. Una vigilancia puede ejecutar tres tipos de análisis:

  • Cada nuevo pull request, revisando lo que cambia el pull request.
  • Cada nuevo commit en la rama vigilada.
  • Una revisión programada, semanal, de los commits nuevos desde la última o del repositorio entero. La línea base completa avanza directorio por directorio por orden de riesgo, empezando por los manejadores de peticiones, la autenticación y el parseo de entradas.

Cualquiera de los cinco agentes puede ejecutarla. Cada revisión queda fijada al commit que cubrió, y el agente cierra la ejecución con findings_done y un resumen. El análisis se ejecuta en tu Mac, con las credenciales de la máquina, dentro de su VM. GitHub se consulta desde el Mac cada tres minutos con el token de la máquina, y ese token nunca entra en la VM. No hay webhooks ni puertos abiertos.

Un analizador de pull requests lee texto no fiable escrito por quien abrió el pull request, y un revisor desatendido se ejecuta sin las peticiones de aprobación. Bromure pasa el título, el cuerpo, el autor y los comentarios de cada pull request por un filtro obligatorio contra la inyección de prompts antes de que el agente los vea. Si el modelo PromptGuard no está instalado, las ejecuciones disparadas por eventos se bloquean en lugar de dejarse pasar. La revisión en sí se ejecuta en una VM llena de sustitutos. Pon la política de escritura de GitHub de la máquina en Read-only en Guardrails y el revisor puede leer todo lo que su token permite, mientras que cualquier push o escritura REST se rechaza en el Mac. Los findings van a Bromure, no al repositorio.

El navegador es una VM aparte

El Chromium del agente se ejecuta en una VM auxiliar. Un escape del sandbox aterriza junto a Chromium, lejos del código, las claves y tu Mac.

Desechable por defecto

El disco del navegador es un clon que se borra al desmontarlo. Payloads y cookies no sobreviven a la tarea.

Sustitutos detrás

La VM del agente guarda tokens falsos. Los reales se quedan en el Mac y solo se añaden para el host al que pertenecen.

Revisión en cada PR

Las automatizaciones de revisión de código analizan cada pull request y cada commit, filtran el texto del PR contra la inyección y pueden ejecutarse en solo lectura.

Parchea, analiza y dale al navegador su propia máquina

Todos los fallos del informe están corregidos, y el primer paso es el de siempre: actualiza Chrome a la versión 156 o posterior, actualiza los dispositivos Apple y parchea los kernels que ejecutan listeners de multipath TCP. Anthropic tiene razón en que los defensores necesitan los mismos modelos que pronto tendrán los atacantes, apuntados primero a su propio código.

El argumento de fondo del informe trata de la próxima tanda de fallos. Si los modelos pueden convertir un puñado de defectos en una cadena funcional así de rápido, algunas de esas cadenas estarán activas antes de que salga el parche. Un agente de código que navega todo el día acabará cargando una de esas páginas. En Bromure Agentic Coding, esa página se carga en una VM hecha para perderse, y tu código, tus claves y tu Mac están en otra parte.

Para ver cómo gestiona el navegador Bromure los zero-day de navegador fuera del coding agéntico, lee Por qué los zero-day del navegador no van a desaparecer. Para una instrucción maliciosa que llegó a un agente a través de un archivo descargado, lee La descarga daba las órdenes.