sistema: OPERATIVO
← volver a todos los hacks
INDIRECT INJECTION MEDIUM NEW

ChatInject: falsificar las etiquetas de rol del chat template para eludir la jerarquía de instrucciones

Un artículo de ICLR 2026 muestra que envolver una carga de inyección indirecta en los tokens del chat template de un modelo falsifica un rol prioritario y eleva la tasa de éxito del 5 % al 32 % en AgentDojo, y hasta el 52 % en multironda.

2026-06-03 // 8 min affects: qwen3, gpt-oss-120b, llama-4, glm-4.5, kimi-k2, grok-2, grok-3, gpt-4o, gemini-2.5-pro

¿Qué es esto?

ChatInject es una técnica de inyección de prompts indirecta que abusa del chat template: los tokens de rol especiales (<|system|>, <|user|>, <|assistant|>) con los que los modelos segmentan un prompt en roles. En lugar de ocultar una instrucción en texto plano dentro de la salida de una herramienta, el atacante inserta en ella las etiquetas de rol del modelo, falsificando un rol de mayor prioridad y logrando que el agente trate un dato controlado por el atacante como una instrucción con autoridad.

El método procede de «ChatInject: Abusing Chat Templates for Prompt Injection in LLM Agents», de Hwan Chang, Yonghyun Jun y Hwanhee Lee (Chung-Ang University), publicado en la conferencia ICLR 2026. La revisión actual (arXiv:2509.22830v3) está fechada el 13 de abril de 2026, con el código en la página del proyecto y en GitHub. El tema afecta directamente a cualquiera que despliegue agentes con herramientas, porque apunta al mecanismo mismo —la jerarquía de instrucciones— que los proveedores diseñaron para frenar la inyección indirecta.

Cómo funciona

Los agentes modernos se entrenan para imponer un orden de prioridad por rol: sistema > usuario > asistente > salida de herramienta. Ese orden se implementa con tokens especiales que marcan dónde empieza y termina cada rol. La observación central del artículo es que esa segmentación solo vale lo que vale el canal que la transporta, y la salida de herramienta es el canal menos fiable de todos.

Cuando un atacante que controla el valor de retorno de una herramienta (una página web, un correo, un archivo, una respuesta de API) escribe los tokens de rol del modelo dentro de ese valor, el modelo puede releer las etiquetas falsificadas y ascender el contenido envuelto a un rol de mayor prioridad. Una línea trivial del tipo «ignora las instrucciones anteriores», que el agente normalmente descartaría, se convierte —una vez envuelta en etiquetas system/user falsas— en algo que el modelo lee como procedente de su operador.

Salida de herramienta (controlada por el atacante), esquemáticamente:

   <forged_system_tag> [preámbulo con aire de autoridad]
   <forged_user_tag>   [INSTRUCCIÓN DEL ATACANTE — CENSURADA]

El agente interpreta las etiquetas falsificadas, atribuye erróneamente el
texto envuelto a un rol privilegiado y lo ejecuta en vez de filtrarlo como dato.

El artículo define cuatro variantes de carga —texto plano, texto plano + envoltura ChatInject, diálogo multironda plano y multironda + ChatInject— además de «hooks» agénticos que imitan los tokens de razonamiento <think> y de llamada a herramienta <tool> de un modelo. La variante más potente fabrica una conversación multironda completa dentro de una sola salida de herramienta: un diálogo sintético de 7 turnos usuario/asistente (generado con GPT-4.1) que «justifica» de forma gradual la acción maliciosa, de modo que el agente se encuentra con lo que parece un intercambio previo y consentido. No hace falta ninguna interacción real; la persuasión se falsifica por entero. Es el equivalente en un solo disparo de un jailbreak multironda, introducido de forma clandestina por un único punto de inyección.

Medida en dos benchmarks estándar (AgentDojo e InjecAgent) sobre nueve modelos de frontera, la envoltura eleva la tasa de éxito media (ASR) del 5,18 % al 32,05 % en AgentDojo y del 15,13 % al 45,90 % en InjecAgent; la variante multironda + ChatInject alcanza el 52,33 % en InjecAgent. Las cargas también son transferibles: una envoltura construida con el template de un modelo suele funcionar en otro, incluidos modelos propietarios (GPT-4o, Grok-3, Gemini-2.5-Pro) cuyos templates no son públicos, porque muchos son estructuralmente parecidos a los templates open source más difundidos. Una carga «mixture-of-templates» que agrupa varias convenciones de etiquetas aumenta las probabilidades de acertar con un backbone desconocido. Los modelos con delimitadores de rol débiles (Grok-2) resultaron mucho más resistentes.

Por qué importa

ChatInject no inventa tanto una capacidad nueva como deja al descubierto un supuesto que sostiene todo el edificio. La jerarquía de instrucciones es la defensa estrella contra la inyección indirecta, y se aplica dentro de banda, con tokens que viven en el mismo flujo de bytes que los datos no fiables. Cualquier frontera que un atacante también pueda escribir no es una frontera.

Tres consecuencias destacan. Primera: la transferibilidad implica que un atacante no necesita conocer tu modelo; basta con una envoltura genérica o una mezcla de templates para obtener un ASR significativo contra endpoints propietarios. Segunda: la variante multironda convierte la inyección de prompts —históricamente un problema de un solo disparo— en un problema de persuasión, importando la eficacia de los jailbreaks conversacionales al canal de las salidas de herramienta. Tercera, y la más importante para los defensores: el artículo demuestra que las defensas basadas en prompts en las que confían muchos equipos no aguantan, y que el arreglo obvio (eliminar las etiquetas de rol) se vence con perturbaciones triviales.

Defensas

La conclusión imperativa es que ningún control aislado «en el contexto» es suficiente. Combine las siguientes capas.

  1. Limpie y normalice los tokens de rol de la salida de herramienta, pero no se quede ahí. Elimine o escape los tokens especiales de rol/template en cualquier dato que ingiera el agente, en la frontera parser/tokenizer, y normalice espacios y Unicode para que una edición a nivel de carácter no cuele una etiqueta a través de un filtro literal. El artículo muestra que perturbar ~10 % de los caracteres vence un filtrado por reglas ingenuo: trátelo como necesario, no suficiente.

  2. Separe datos e instrucciones a nivel de arquitectura. La causa raíz es que el contenido de herramienta comparte canal con las instrucciones privilegiadas. Prefiera diseños que mantengan los datos recuperados/de herramienta en una posición estructuralmente distinta y no ascendible, en vez de fiarse de etiquetas in-prompt que el modelo está entrenado para creer. Los modelos y arneses que nunca ascienden el contenido de herramienta son el arreglo duradero.

  3. Controle la acción, no solo el texto: mínimo privilegio. ChatInject solo importa si el agente comprometido puede hacer algo dañino. Exija comprobaciones de política explícitas o confirmación humana antes de las llamadas a herramientas de alto impacto (enviar dinero, publicar, borrar, exfiltrar), y restrinja las credenciales de las herramientas. Es la misma lógica del lethal trifecta y la regla de dos de los agentes: si entrada no fiable, capacidad sensible y exfiltración no pueden coincidir, un ASR alto en la capa de texto no se convierte en una brecha.

  4. No confíe solo en mitigaciones por prompt. La repetición de la instrucción del usuario (sándwich), los prompts de prevención por instrucción y el delimitado ingenuo resultaron en gran medida ineficaces en el artículo, y a veces aumentaron el ASR. Manténgalos como higiene, nunca como control principal.

  5. Use detectores en defensa en profundidad, con cuidado. Detectores externos (un detector PI DeBERTa, Lakera Guard) redujeron el ASR pero reaccionaban sobre todo a la presencia de tokens especiales, no captaban la persuasión multironda contextual y provocaban tasas altas de falsos positivos; su modo de fallo grueso de «descartar toda la salida de herramienta» paraliza al agente. Ajústelos para redactar en lugar de eliminar por completo, y combínelos con los controles anteriores.

  6. Vuelva a probar su propia pila. Los benchmarks (AgentDojo, InjecAgent) y el código del ataque son públicos. Lance cargas de tipo ChatInject contra su modelo y su familia de templates antes de que lo haga un atacante, y no dé por sentado que un modelo propietario es inmune, ya que la proximidad de template con las familias open source impulsó buena parte de la transferencia entre modelos.

Estado

ElementoReferenciaFechaNotas
Artículo ChatInject (v3)arXiv:2509.22830 [cs.CL]2026-04-13Publicado en ICLR 2026
Benchmarks usadosAgentDojo, InjecAgentMétricas ASR + utilidad bajo ataque
Modelos evaluadosQwen3, GPT-oss-120b, Llama-4, GLM-4.5, Kimi-K2, Grok-2 (open); GPT-4o, Grok-3, Gemini-2.5-Pro (closed)Grok-2 el más resistente (delimitadores de rol débiles)
Resultado principalAgentDojo 5,18 %→32,05 % ASR; InjecAgent 15,13 %→45,90 %; multironda 52,33 %Medias entre modelos
Defensas probadasdetector PI, Lakera Guard, prevención por instrucción, delimitadores de datos, repetición de instrucción del usuarioDefensas por prompt en gran medida ineficaces; eliminación de etiquetas eludida por perturbación
Códigopágina del proyecto / GitHubPúblico, con fines de evaluación

El marco correcto no es «un número más de jailbreak». Es que el delimitador que la industria eligió para marcar la confianza puede ser escrito por el propio atacante, y que defender agentes con herramientas exige sacar la frontera de confianza del prompt y llevarla a la acción.

Sources