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

Escalada de privilegios de contexto: texto hostil promovido en 12 agentes de código

Un artículo del 1 de septiembre de 2026 muestra que contenido poco fiable puede promoverse a roles de mensaje más privilegiados y ámbitos más persistentes en 12 harnesses de agentes, incluidos Claude Code y Codex.

2026-09-02 // 8 min affects: claude-code, codex, gemini-cli, qwen-code, kimi-cli, aider, opencode, cline, goose, pi-mono, openclaw, hermes-agent

¿De qué se trata?

Un agente de IA es un modelo más un harness: el código que decide qué entra en la ventana de contexto, desde qué archivos y con qué etiqueta de privilegio. Los proveedores definen una jerarquía de roles para esas etiquetas (OpenAI usa system, developer, user, assistant, tool, de mayor a menor confianza) y entrenan a los modelos para priorizar los roles altos cuando las instrucciones entran en conflicto. Esa jerarquía es la principal defensa estructural de la industria frente a la inyección indirecta de prompts.

El 1 de septiembre de 2026, Zichuan Li, Jian Cui, Ashley Chen, Xiaojing Liao y Luyi Xing (University of Illinois Urbana-Champaign) publicaron What’s in Your Agent’s Context? Context Privilege Escalation Attacks against AI Agent Harness (arXiv:2609.01222). Es, según los autores, el primer análisis sistemático de cómo los harnesses reales ensamblan el contexto.

El hallazgo: la jerarquía se sostiene dentro del modelo, pero el harness se filtra por los bordes. Texto del atacante que entró como salida de herramienta de bajo privilegio puede ser reetiquetado hacia arriba o vuelto persistente, sin que el atacante toque nunca la máquina. Los autores distinguen dos clases:

  • M-CPE (message-role context privilege escalation): contenido de una fuente poco privilegiada acaba transportado en un rol de mensaje más privilegiado.
  • X-CPE (cross-scope context privilege escalation): el contenido persiste más allá del contexto en el que se introdujo, sobrevive a los reinicios del agente y sigue al usuario a otros proyectos.

Los autores ejecutaron ataques de extremo a extremo contra 12 harnesses de alto perfil, entre ellos Claude Code, Codex, Gemini CLI, Cline, OpenCode, Goose, Aider, Qwen Code, Kimi CLI, Pi-mono, OpenClaw y Hermes Agent.

Cómo funciona

El artículo cataloga 16 vectores de ataque en tres categorías, todos reducibles al mismo movimiento: lograr que el harness copie su texto en una posición en la que confía más.

Diversidad de fuentes de contexto. Los harnesses cargan mucho más que el archivo de memoria documentado. Claude Code busca CLAUDE.md en los directorios que toca en tiempo de ejecución, de modo que un archivo comprimido no fiable que solo se extrajo, nunca se ejecutó, puede dejar un archivo de memoria que el agente lee después con un rol superior. Gemini CLI realiza además una búsqueda en anchura descendente desde su directorio de lanzamiento: un archivo colocado en lo profundo del árbol de una pull request descargada se carga con independencia de que la PR se apruebe. Varios agentes ensamblan también información de entorno: Claude Code ejecuta git log --oneline -n 5 al arrancar y coloca la salida en contexto de nivel de sistema, lo que convierte un mensaje de commit en un canal de instrucciones.

Marcado del contexto. Casi todos los harnesses separan los segmentos de contexto con etiquetas de estilo XML: <available_skills>, <skill>, <description>, <system-reminder>. Son texto plano, no tokens especiales. Un contenido que incluya la etiqueta de cierre correspondiente escapa de su propio contenedor, y el texto siguiente se lee como si perteneciera al bloque envolvente, de mayor confianza. Algunos harnesses van más lejos e interpretan etiquetas de la salida del modelo para disparar llamadas a herramientas: un contenido simplemente repetido se convierte en acción.

Lógica de ensamblado. Las reglas de orden de carga son explotables por sí solas. Codex prefiere AGENTS.override.md sobre AGENTS.md cuando existen ambos, así que una pull request que añade un archivo de override a un repositorio que ejecuta Codex en CI sustituye las instrucciones de revisión del mantenedor por las del contribuidor. Las importaciones recursivas @ruta en archivos de memoria permiten que una sola línea inyectada arrastre un árbol arbitrario de contenido adicional.

# Forma de la escalada — sin payload funcional
[ r4 salida de herramienta ]  página web / archivo / mensaje de commit del atacante

        │  el harness copia, descubre o reetiqueta

[ r0-r2 ]  archivo de memoria · descripción de skill · configuración · bloque de entorno

        │  el ámbito se amplía: sesión ──> proyecto ──> usuario

   recargado en cada arranque, en todas las sesiones futuras

Para medirlo a escala, los autores construyeron CoRA (Context Risk Analyzer), una tubería asistida por LLM que identifica estáticamente las fuentes de contexto y sus roles a partir del código del harness, las valida ejecutando el harness real y después genera automáticamente pruebas de concepto a partir de la taxonomía de vectores. En los 12 harnesses, CoRA reportó 282 fuentes de contexto vulnerables. Las pruebas de concepto tuvieron éxito con GPT-5.5, GPT-5.4-mini y DeepSeek-V4-Flash. Las consecuencias demostradas van desde la invocación manipulada de herramientas y skills hasta la denegación de servicio, el compromiso total del agente y la ejecución remota de código; la demostración publicada sobre Claude Code encadena el descubrimiento de skills en tiempo de ejecución con sintaxis de comando en línea dentro de una plantilla de sitio web descargada.

Por qué importa

La mayoría de las recomendaciones de endurecimiento de agentes asume que la frontera entre contenido fiable y no fiable se traza una vez, en la ingesta. El CPE dice lo contrario: esa frontera se redibuja continuamente, mediante código del harness que el usuario no ve y que el proveedor rara vez documenta. Puede revisar cada salida de herramienta y perder igualmente, porque el paso peligroso ocurre después de la revisión, cuando el harness decide que ese archivo, en ese directorio, merece una etiqueta más alta.

Conviene separar tres consecuencias.

La revisión de código es un objetivo directo. Los escenarios de pull request no son un envoltorio teórico: un repositorio que usa un agente en CI para revisar contribuciones acepta por diseño archivos, nombres de directorio y mensajes de commit escritos por el atacante. Las instrucciones llegan al contexto sea cual sea el veredicto de la revisión.

La persistencia cambia el perfil de riesgo. Una inyección indirecta ordinaria muere con la sesión. X-CPE escribe en archivos que se recargan en cada arranque, lo que convierte una inyección puntual en un punto de apoyo que sigue al desarrollador hacia proyectos sin relación.

La opacidad es la causa raíz. Los usuarios no pueden enumerar qué carga su agente, desde dónde ni con qué rol, porque esa lógica es propietaria y no está documentada. Esa es la crítica central de los autores, y es un problema de diseño más que una lista de bugs.

Defensas

Actualice sus agentes. Codex y Gemini CLI han publicado versiones que mitigan parte del problema. Compare la versión de su harness con la tabla del artículo antes de darse por cubierto.

Trate como no fiable cualquier archivo dentro de contenido no fiable, incluidos los archivos de memoria y de skills. Un CLAUDE.md, SKILL.md, AGENTS.md o .cursor/rules que llega en un archivo descargado, una dependencia o una rama de pull request es entrada del atacante con nombre de archivo de configuración.

No ejecute agentes desde directorios que contengan árboles de terceros sin revisar. Para flujos de revisión en CI, lance el agente fuera del checkout, o elimine de la rama los archivos de configuración que el agente reconoce antes de arrancarlo. Vigile en particular las variantes con nombre «override» de sus archivos de instrucciones.

Haga cumplir con código, no con prompts. La documentación del proveedor es explícita: los archivos de memoria son contexto, no configuración aplicada. Anthropic indica que para bloquear una acción con independencia de lo que decida el modelo hace falta un hook PreToolUse. Las listas de denegación, los hooks y los sandboxes se sostienen donde las etiquetas de rol ceden.

Acote importaciones y rutas de carga. Desactive o someta a aprobación las importaciones recursivas @ruta, y excluya los archivos de memoria que usted no escribió: Claude Code expone claudeMdExcludes precisamente para eso y pide confirmación antes de cargar importaciones externas desde un archivo de proyecto.

Audite lo que realmente se cargó, en cada sesión. En Claude Code, /context lista los archivos de memoria en juego, y el hook InstructionsLoaded registra qué archivos de instrucciones se cargaron y por qué. Si no puede enumerar las fuentes de contexto de su agente, no puede razonar sobre sus privilegios.

Neutralice el marcado en el contenido encapsulado. Si su harness envuelve texto de terceros en etiquetas, escape o elimine esas secuencias del contenido antes del ensamblado. Unos delimitadores que el atacante puede teclear no son delimitadores.

Mantenga los metadatos de entorno fuera de los roles de alta confianza. Mensajes de commit, nombres de rama, de directorio y de archivo son controlables por el atacante en un repositorio colaborativo. Su lugar es el rol más bajo disponible, no el bloque de sistema.

Status

ElementoReferenciaFechaNotas
Artículo principalarXiv:2609.01222, Li, Cui, Chen, Liao, Xing (UIUC)2026-09-01Dos clases de ataque (M-CPE, X-CPE); 16 vectores; 282 fuentes de contexto vulnerables
Harnesses analizadosCodex, Claude Code, Gemini CLI, Qwen Code, Kimi CLI, Aider, OpenCode, Cline, Goose, Pi-mono, OpenClaw, Hermes Agent2026-09-01Los 12 son objeto de pruebas de concepto de extremo a extremo
Modelos usados en las PoCGPT-5.5, GPT-5.4-mini, DeepSeek-V4-Flash2026-09-01Ataques a nivel de harness, no específicos de un modelo
HerramientaCoRA (Context Risk Analyzer)2026-09-01Los autores anuncian la publicación del código junto al artículo
Demostraciones públicasSitio del proyecto, zichuan.li/LLMAgentCPE2026-09-01Incluye un recorrido de descubrimiento de skill a RCE en Claude Code
Divulgación responsableNotificada a los 12 proveedores/mantenedoresCodex y Gemini CLI han publicado versiones correctoras; trabajo en curso con el resto
Guía del proveedorDocumentación de memoria de Claude Code (Anthropic)VigenteLos archivos de memoria son contexto, no aplicación; claudeMdExcludes, aprobación de importaciones externas, hooks PreToolUse
Marcos relacionadosOWASP LLM Top 10 (LLM01 inyección de prompts), OWASP Agentic Security Initiative2026Categorías de privilegios y uso indebido de herramientas

No se documenta explotación en el mundo real. La discusión de mitigaciones de los autores favorece reducir el número de fuentes de contexto, filtrar los intentos de escalada y hacer transparente el ensamblado de contexto para los usuarios, algo que hoy ningún proveedor ofrece por completo.

Sources