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

Untrusted Content Masking: una defensa demostrable para agentes web

Un artículo de julio de 2026 restaura la frontera de confianza que los agentes web pierden al leer una página renderizada — enmascarando las regiones no confiables del DOM y enrutándolas a un modelo de salida tipada para bloquear la inyección por construcción.

2026-07-07 // 8 min affects: claude-sonnet-4-5, claude-sonnet-4-6, gpt-5-4, claude-in-chrome

¿Qué es esto?

El 6 de julio de 2026, Kristina Nikolić (ETH Zúrich), Egor Zverev (ISTA), Javier Rando (Anthropic / ETH Zúrich), Matthew Jagielski (Anthropic), Edoardo Debenedetti y Florian Tramèr (ETH Zúrich) publicaron en arXiv Untrusted Content Masking for Web Agents with Security Guarantees. El artículo propone una defensa — Untrusted Content Masking (UCM) — que otorga a un agente de navegación web una garantía demostrable contra el secuestro del flujo de control por inyección de prompt, sin dejar de permitirle leer páginas y actuar sobre ellas.

El problema de partida es conocido. Las defensas que llevan una garantía formal contra la inyección de prompt se basan todas en un aislamiento estricto entre las instrucciones de confianza y los datos no confiables. En una API de uso de herramientas basada en texto esa frontera es natural: el agente lee la interfaz de una función, no la carga útil no confiable en crudo. Un agente web no tiene ese lujo — debe observar una página renderizada que, en palabras de los autores, «entremezcla contenido de confianza con contenido no confiable». Ese enredo estructural disuelve la frontera de confianza de la que depende la garantía. UCM busca reconstruirla dentro del navegador. Se trata de trabajo académico revisado por pares sobre una defensa; aquí no se reproduce ningún exploit funcional.

Cómo funciona

La observación clave: el DOM de una página ya codifica suficiente estructura para separar las regiones de confianza de las no confiables sin leer su contenido. UCM enmascara las regiones no confiables antes de que lleguen al agente, sustituyendo cada una por un marcador de posición etiquetado que conserva la disposición y, si está disponible, una etiqueta semántica (advertisement, user comment, review) más un identificador de elemento. El agente ve la página de confianza completa y su estructura, pero nunca queda expuesto al texto ni a las imágenes controladas por el atacante.

Cuando una tarea realmente necesita un valor no confiable, el agente sigue sin leerlo. Consulta un modelo en cuarentena (Q-Model) aislado: referencia el identificador del elemento enmascarado, formula una pregunta en lenguaje natural y declara un tipo de retorno de un conjunto fijo — bool, int, float, date, enum. El Q-Model lee el contenido oculto y devuelve una respuesta restringida por el tipo.

página renderizada
   ├── regiones de confianza ────────► agente (visibilidad total)
   └── regiones no confiables
          │  sustituidas por un placeholder etiquetado [#c12: "user comment"]

   ¿el agente necesita el valor? ──► pregunta al Q-Model: "¿es #c12 una reseña de 5 estrellas?" -> bool

   el Q-Model lee el texto oculto, devuelve:  true
          │  (un bool no puede transportar "navigate to evil.com")

   la instrucción inyectada no puede propagarse al flujo de control del agente

Como un booleano o un entero no pueden colar una instrucción de texto libre, el secuestro del flujo de control queda bloqueado por construcción, por ingeniosa que sea la inyección. ¿Quién traza las fronteras? Un propietario de sitio activo etiqueta directamente las regiones no confiables — los autores constatan que 15 a 30 selectores CSS por sitio bastan para GitLab, Booking.com y Reddit. Para un propietario pasivo que no aporta nada, un LLM infiere las fronteras a partir de un DOM saneado de contenido (estructura y etiquetas conservadas, texto eliminado para que el propio etiquetador no pueda ser inyectado) y emite selectores CSS.

Por qué importa

Lo que cuenta son las cifras. Frente al benchmark WASP con ataques reforzados, UCM alcanza un 0 % de tasa de éxito de ataque en Claude Sonnet 4.5, Claude Sonnet 4.6 y GPT-5.4. La utilidad se mantiene: en diez conjuntos de tareas a medida el agente enmascarado iguala al no protegido, con un sobrecoste de 1,05×–1,84× — y en torno al 15 % de las tareas resultan de hecho más baratas, porque una página despejada es más fácil de recorrer. En tareas reales de WebArena GitLab, el Q-Model de salida tipada resuelve la mayoría, y una opción de reserva por cadena de texto aprobada por el usuario recupera la utilidad completa.

La lección de arquitectura extiende trabajos como la tríada letal. Los filtros heurísticos pueden ser vencidos por atacantes adaptativos; las defensas garantizadas anteriores compraban su garantía dejando al agente ciego al contenido de la página, lo que destruía la utilidad. UCM, en cambio, elimina la superficie de ataque — el contenido no confiable nunca entra en el contexto del agente — mientras deja que el agente ejecute su bucle habitual de razonamiento y acción.

Defensas

Para los equipos que construyen o endurecen agentes de uso de ordenador, el artículo ofrece un patrón concreto en lugar de un filtro más.

Traza la frontera de confianza en el DOM, no en el flujo de tokens. Decidir qué es de confianza a partir de la estructura — antes de leer texto no confiable alguno — es lo que hace la aislación sólidamente aplicable, a diferencia de los filtros por palabras clave o clasificador que primero deben ingerir la carga útil.

Enruta las lecturas no confiables por un modelo aislado de salida tipada. Obligar al Q-Model a responder como bool/int/date/enum es el mecanismo que impide que una instrucción inyectada regrese como flujo de control. Reserva la extracción de texto libre para una ruta de aprobación explícita del usuario.

Atento al riesgo residual de flujo de datos. UCM garantiza la integridad del flujo de control, no la corrección de los valores: una respuesta bien tipada pero elegida por el atacante todavía puede engañar. Los autores acotan esto consultando cada elemento no confiable en una llamada al Q-Model fresca y aislada, de modo que la manipulación de agregados exige que el atacante controle una porción grande de las entradas, y señalando varias coincidencias positivas como señal de manipulación. Combínalo con políticas a nivel de acción y confirmación del usuario para acciones sensibles.

Conoce el anclaje de confianza. La garantía asume un propietario de sitio honesto y un etiquetado correcto; un sitio plenamente malicioso sigue siendo inseguro pase lo que pase, y los fallos de contenido activo (XSS que escapa de una región etiquetada o reescribe el DOM en tiempo de ejecución) quedan explícitamente fuera de alcance.

Estado

ElementoDetalle
DivulgaciónPreprint arXiv 2607.05277 v1, publicado el 6 de julio de 2026 (CC BY 4.0)
ClaseDefensa — integridad de flujo de control demostrable contra inyección en agentes web mediante enmascarado del DOM + modelo tipado en cuarentena
Probado enAgentes: Claude Sonnet 4.5, Claude Sonnet 4.6, GPT-5.4 · Q-Model: Claude Sonnet 4.5
Resultado reportado0 % de ASR en WASP reforzado; utilidad preservada; sobrecoste 1,05×–1,84×
Etiquetado de fronterasPropietario activo: 15–30 selectores CSS/sitio · Propietario pasivo: inferencia LLM sobre DOM saneado (F1 0,84–0,997)
Límites conocidosAtaques de flujo de datos (valores bien tipados pero falsos); supuesto de propietario honesto + etiquetado correcto; XSS / contenido activo fuera de alcance
Códigogithub.com/ethz-spylab/untrusted-content-masking

Sources