El agente confió en la puntuación
Agent Data Injection, una prueba de concepto de la Universidad Nacional de Seúl, la UIUC y Largosoft publicada en julio de 2026, no esconde instrucciones en un prompt. Falsifica la puntuación que un agente usa para distinguir un campo de confianza de un texto no confiable — una comilla tipográfica, una comilla escapada, incluso un signo de dólar perdido — de modo que el comentario de GitHub de un atacante se lee como el arreglo del mantenedor y un registro de CI falsificado se lee como una compilación limpia. Burló defensas antiinyección específicas hasta la mitad de las veces, en GPT-5.2, Claude y Gemini. Bromure Agentic Coding normaliza los delimitadores falsificados antes de que el texto se vuelva un plan, cierra las acciones ejecutar-esto y fusionar-esto que salen de la caja, y ejecuta todo en una VM Linux desechable con credenciales señuelo.
Tu agente de codificación decide a qué texto obedecer leyendo la puntuación a su alrededor — las comillas y las llaves que dicen «esta parte es el mantenedor, aquella es el comentario de un desconocido». Un nuevo ataque falsifica esa puntuación. No escribe una instrucción más astuta. Escribe una comilla tipográfica, y el comentario del desconocido empieza a llevar el nombre del mantenedor.
El 6 de julio de 2026, investigadores de la Universidad Nacional de Seúl, la Universidad de Illinois en Urbana-Champaign y Largosoft — dirigidos por Woohyuk Choi y el profesor Byoungyoung Lee — publicaron un artículo de título directo: Agent Data Injection Attacks are Realistic Threats to AI Agents. Describe una clase de ataque, Agent Data Injection (ADI), que se sitúa al lado de la inyección de prompt en lugar de dentro de ella, y que burló defensas antiinyección específicas hasta la mitad de las veces donde la inyección de prompt clásica puntuaba casi en cero. OpenAI, Google y Anthropic confirmaron que funciona. No se reportaron arreglos en la publicación.
La razón por la que le importa a cualquiera que ejecute un agente de codificación es que ataca algo en lo que el agente no puede evitar confiar: la frontera entre los datos que obtuvo y la estructura en que esos datos llegaron.
El delimitador es la frontera de seguridad
El contexto de un agente es un montón de texto de muchas fuentes — tus instrucciones, un archivo, una página web, un comentario que alguien dejó en un issue. Para actuar con sensatez, el modelo tiene que llevar la cuenta de qué pieza es cuál: esto es el nombre del mantenedor, aquello es el cuerpo de un comentario que escribió un desconocido. Lo hace de la única forma que el texto permite — con puntuación. Comillas y llaves, etiquetas, corchetes, saltos de línea. Los delimitadores marcan dónde termina un campo de confianza y dónde empieza el contenido no confiable.
Un parser estricto trata esos delimitadores literalmente: una comilla es una comilla, y un carácter en medio de un comentario es solo un carácter. Un modelo de lenguaje no. Lee la puntuación, en el planteamiento del artículo, por conjetura — infiere la estructura a partir de lo que los caracteres parecen significar. Y ahí está toda la brecha. Un atacante que controla un campo de baja confianza — una reseña de producto, un comentario de issue en GitHub, una línea en un archivo — salpica caracteres con aire de puntuación, y el modelo lee una estructura que nunca existió.
El detalle inquietante es lo poco de oficio que exige. Los investigadores llaman a la técnica inyección probabilística de delimitadores, y descubrieron que la puntuación falsa «ni siquiera tiene que estar bien». Una comilla escapada, una comilla tipográfica, incluso un signo de dólar perdido pasaban por una frontera de campo real y engañaban al modelo. Un parser estricto habría leído cada uno de ellos como texto ordinario.
Qué le hace a un agente de codificación
La versión web-agent de ADI es fácil de imaginar: falsifica el identificador en un elemento de página y un agente que hace tus compras hace clic en «Comprar ahora» donde quería hacer clic en «Leer más». La versión dirigida a desarrolladores es peor, porque el campo de confianza que falsifica es quién dijo que el código era seguro.
En una demostración, un atacante deja un comentario en un issue de GitHub y falsifica la atribución de autoría para que el agente lo lea como proveniente del mantenedor del proyecto. Cuando un desarrollador le pide después al agente que «aplique el arreglo del mantenedor», Claude Code, Codex de OpenAI y Gemini CLI de Google hacen exactamente eso — ejecutan el comando del atacante, porque hasta donde el modelo puede saber, el mantenedor lo pidió. En otra, una pull request maliciosa falsifica el registro de sus propias verificaciones de CI completadas. El agente ve una compilación limpia en su contexto, juzga el código seguro sobre esa evidencia fabricada, y fusiona malware real.
Entre los seis modelos que el equipo probó — GPT-5.2, GPT-5-mini, Claude Opus 4.5 y Sonnet 4.5, Gemini 3 Pro y Flash — los números no son un error de redondeo. Los datos estructurados dieron una tasa de éxito del 31 al 43 %; los datos de página web fueron del 33 % hasta el 100 %. Y contra defensas construidas específicamente para detener la inyección de prompt, ADI todavía pasó hasta la mitad de las veces, donde las mismas defensas detenían en seco la inyección clásica. Dos mitigaciones funcionaron en el laboratorio y ambas costaron algo: etiquetar elementos de página con IDs aleatorios e imposibles de adivinar (como hace el navegador Atlas de ChatGPT) redujo el éxito de cerca del 49 % al 29 %, y un seguimiento estricto de la procedencia de los datos llevó los ataques a cero — a la vez que bajaba la capacidad del agente de terminar tareas normales a cerca de un tercio.
Por qué el filtro habitual no lo detecta
Un filtro antiinyección de prompt está entrenado para notar instrucciones escondidas en los datos — «ignora tus directivas anteriores», «ejecuta este comando», la forma reconocible de un comando disfrazado de contenido. ADI no necesita esa forma. El texto malicioso puede leerse como una nota corriente de mantenedor. Lo que porta el ataque es la puntuación a su alrededor, y un filtro que lee buscando lenguaje sospechoso pasa de largo ante una comilla tipográfica. Por eso la propia defensa funcional del artículo no fue un clasificador más listo, sino un parser más estricto — procedencia que se niega a adivinar dónde termina un campo.
Esta es la misma lección que el resto de la seguridad agéntica no deja de reaprender. Una lista de denegación de comandos pierde ante el shell que reescribe el comando. Una herramienta MCP de confianza devuelve datos que escribió un atacante. Un espacio de trabajo en el que confiabas lanza servidores que no quisiste. ADI es la versión donde lo envenenado no es la instrucción ni siquiera los datos, sino el marco — el delimitador que le dice al agente qué texto creer. No puedes salir de una comilla tipográfica por coincidencia de patrones.
Dónde traza Bromure la línea
Bromure Agentic Coding no intenta hacer del modelo un mejor adivinador de dónde termina un campo. Hace dos cosas que el modelo no puede, y luego se asegura de que cuando ambas fallen, el daño aterrice en algún lugar desechable.
Primero, los delimitadores falsificados se normalizan antes de que el texto se
vuelva un plan. La detección de inyección de prompt en el dispositivo de
Bromure no es solo un modelo local que lee la intención; está emparejada con un
escáner determinista — el mismo que atrapa los trucos de Unicode invisible y de
homóglifos. Las comillas tipográficas se pliegan a comillas rectas, los
caracteres confundibles y de ancho cero se retiran, y un campo cuyos
delimitadores no coinciden con la estructura canónica queda marcado. Ese es el
instinto de parser estricto que los investigadores hallaron eficaz contra ADI,
aplicado como una capa sobre el texto no confiable que el agente obtuvo — la
misma clase de entrada que un CLAUDE.md malicioso o un comentario envenenado —
y todo eso se queda en tu Mac.
Segundo, las dos acciones que ADI de verdad quiere siguen deteniéndose en una frontera. Mira qué intenta disparar el ataque: ejecutar el arreglo del mantenedor y fusionar la pull request. Ambas son acciones que rebasan el sandbox del agente — un comando de shell, un push a un remoto. Cada agente que Bromure ejecuta — Claude Code, Codex, Grok Build — corre dentro de una VM Linux desechable, y los pasos que salen de esa caja son los que Bromure presenta para confirmación. Una atribución falsificada no consigue autoejecutar un comando, y un registro de CI falsificado no consigue autofusionar una rama, porque «el mantenedor lo dijo» es justo el juicio que el paso de confirmación existe para volver a comprobar.
Tercero, si un comando se ejecuta, se ejecuta en una caja que tiras. Supón que un delimitador es lo bastante novedoso para colarse ante el normalizador y lo bastante convincente para pasar la revisión. El comando se ejecuta dentro de la VM. Restablece el perfil a la base y todo lo que dejó — un script, una clave SSH, una tarea programada — desaparece. Nada de lo que hizo sobrevive al cierre de la ventana.
Cuarto, no hay credenciales reales que llevarse. Un «arreglo» que rastrea el
entorno y el disco en busca de tokens encuentra los señuelos de Bromure — claves
AWS sintéticas, un ~/.kube/config desechable, tokens de git y de registro de
mentira (brm_…). Los secretos reales solo se sustituyen en el host, en el
proxy, camino de salida hacia la API auténtica. Todo lo que el comando envía
fuera de la caja es una bolsa de cadenas que no autentican nada, y la conexión
que lo envía aparece en el Registro de Seguridad como tráfico saliente que
puedes ver.
Qué acota esto
Normalización y confirmación son contención, no una cura para un modelo que lee estructura por conjetura. Vale la pena ser exacto sobre qué cambia Bromure y qué no.
El comentario aún se planta
Bromure no impide que un atacante deje un comentario falsificado en GitHub ni que falsifique un registro de CI, y no arregla el hecho de fondo de que un modelo de lenguaje infiere dónde termina un campo. Eso les toca al modelo y a la plataforma resolverlo. Lo que Bromure cambia es lo que pasa después de que el agente lee el texto falsificado: se normaliza, y las acciones que intenta disparar se verifican.
La normalización es una red, no un muro
Plegar comillas tipográficas, retirar confundibles y marcar delimitadores discordantes atrapa los trucos de ADI que los investigadores demostraron y más, pero un delimitador inédito puede formularse para colarse ante un solo escáner. Trátalo como una capa; la caja desechable con claves señuelo y egreso registrado es lo que aguanta cuando el escáner falla.
La confirmación guarda la frontera, no cada edición
El paso de confirmación se gana su lugar en acciones que salen de la caja — ejecutar un comando, hacer push, fusionar. Una instrucción falsificada que solo edita un archivo dentro de la VM la atrapa el aislamiento y los señuelos, no el prompt. Mantén las acciones frontera bajo llave; ahí es donde un «el mantenedor lo dijo» falsificado merece un segundo vistazo.
La sustitución cubre los secretos que configuras
El cambio por señuelo protege las credenciales que pones en un perfil: claves de modelo, tokens de git y de nube, tokens de registro y de clúster, claves SSH. Un token que un script escribe en el disco a mitad de ejecución, o una sesión que abres a mano dentro de la caja, es solo dato. Guarda los secretos en el broker, no en el espacio de trabajo.
La idea de los investigadores no es que seis modelos compartan un bug. Es que la forma en que un agente distingue un campo de confianza de un contenido no confiable — puntuación que lee por conjetura — es la misma en todas partes donde un agente se topa con el mundo exterior, y no se va a arreglar este trimestre. Hoy el delimitador falsificado vive en un comentario de GitHub. Mañana es un campo de Jira, un trailer de commit, una cabecera en una página obtenida. Tu agente va a leer una frontera que dibujó un atacante, y hasta la mitad de las veces la creerá. La pregunta no es si la puntuación lo engaña alguna vez. La pregunta es qué se ejecuta cuando lo hace: tu máquina, tus tokens reales, y un comando que se empujó a sí mismo a main — o una caja Linux desechable que normalizó la comilla primero, retuvo la fusión para un vistazo, y no tenía más que señuelos dentro. Bromure hace que sea la segunda.