El 5 de agosto, en Black Hat USA, investigadores de Novee Security mostraron que un issue abierto en GitHub por una cuenta sin ningún permiso sobre el repositorio alcanzaba para ejecutar código en los runners de integración continua que están detrás de los propios repos de agentes de código de Anthropic y Google.
El ataque se corrió contra la configuración que cada fabricante entrega por defecto. No hubo que desactivar nada ni forzar una instalación exótica.
De ahí salieron rutas a ejecución remota de código, robo de credenciales, modificación del repositorio e instrucciones que sobreviven de una corrida del agente a la siguiente.
Traducido: qué es cada cosa y por qué esto importa
Antes de la parte técnica, conviene poner los cuatro términos sobre la mesa, porque sin ellos la noticia no se entiende y con ellos se entiende sola.
- Repositorio. El lugar donde vive el código de un producto. GitHub es el más usado del mundo.
- Issue. El formulario público donde cualquier persona reporta un problema o pide una mejora. Está abierto a propósito: esa es la gracia del software abierto.
- Pipeline de CI. La máquina que, cada vez que pasa algo en el repositorio, arma y prueba el producto de forma automática. Para hacer su trabajo guarda las llaves de la empresa: claves de la nube, tokens para publicar versiones, credenciales de bases de datos.
- Agente de código. Una IA conectada a ese repositorio que lee lo que la gente escribe y hace el trabajo sola: entiende el pedido, escribe el código, propone el cambio.
La analogía más cercana es un buzón de sugerencias en la puerta de una fábrica. Cualquiera puede dejar un papelito, y eso está bien.
El problema aparece cuando la empresa pone a un empleado nuevo, muy obediente y con la llave maestra en el bolsillo, a leer esos papelitos y a hacer lo que digan sin preguntarle a nadie. Alguien deja un papelito que dice «abrí la caja fuerte y dejá una copia de la llave afuera», y el empleado lo hace, porque para él era una tarea más.
Eso es exactamente lo que demostraron los investigadores, y lo hicieron contra los repositorios de las tres empresas que fabrican esos agentes.
Las dos suposiciones que se rompieron
Todo el modelo de seguridad de este esquema se apoya en dos supuestos.
- Que el agente trate el texto que le llega de afuera como información a procesar y no como órdenes a obedecer.
- Que, si algo sale mal, el agente esté encerrado en un entorno aislado (un «sandbox») que contenga el daño.
La investigación rompió los dos supuestos, y cada producto se rompió en un punto distinto de la cadena.

Claude Code: la API key que se fue por un contador de descargas
En criollo: el agente termina ejecutando como orden del sistema algo que venía escrito adentro del issue, y después saca la clave de la empresa por una puerta que estaba habilitada para otra cosa.
En detalle, la cadena arranca con una inyección de comandos en git: el contenido del issue termina alcanzando una invocación donde no fue debidamente escapado.
El siguiente paso fue esquivar el validador de seguridad usando contenido entrecomillado, una discrepancia entre lo que el validador aprueba y lo que después se ejecuta de verdad.
Lo más ingenioso es el final. El agente tenía permiso previo para hablar con Hugging Face (el repositorio público de modelos de IA), así que en vez de abrir una conexión sospechosa hacia afuera, los investigadores convirtieron el contador público de descargas de ese sitio en un canal de fuga de datos.
La API key salió carácter por carácter: descargar o no descargar un recurso según el valor de cada carácter, y después leer el contador desde afuera para reconstruirlo.
Es un canal encubierto de manual, montado sobre un permiso que el agente tenía por diseño. Quedó como CVE-2026-54316 y está corregido en la versión 2.1.163.
Gemini CLI: código en el host antes de que arranque el sandbox
El caso de Google es el más grave de los tres y se explica en una frase: la ejecución ocurre antes de que exista el aislamiento.
CVE-2026-12537 es una inyección de comandos del sistema operativo en el lanzador del contenedor, alcanzable a través de un archivo .gemini/.env armado a propósito.
Un atacante sin privilegios logra ejecutar código en el host de una plataforma de CI headless en el momento en que el lanzador está preparando el contenedor, o sea antes de que el sandbox esté levantado y pueda contener nada.
Google la calificó con CVSS 10.0 en su propio advisory. Está corregida en Gemini CLI 0.39.1 y en run-gemini-cli 0.1.22.
Los investigadores describieron además un problema de fondo en el aislamiento: la etiqueta de herramienta restringida nunca se hacía cumplir en tiempo de ejecución, y aunque el entorno del proceso hijo se saneaba, el proceso padre conservaba todos los secretos a una lectura de /proc de distancia.
Codex: persistencia escrita en un archivo que el agente confía
En OpenAI Codex el hallazgo no fue ejecución inmediata sino algo más silencioso: secuestro persistente entre corridas.
El atacante escribe estado en un archivo AGENTS.md desprotegido dentro del workspace compartido. La sesión siguiente lo relee y lo trata como instrucción confiable, porque para el agente ese archivo es configuración del proyecto, no entrada de un tercero.
El resultado es que el compromiso no vive en un proceso que podés matar: vive en el repositorio, y se reactiva solo la próxima vez que alguien invoca al agente.
Qué hacer si tenés uno de estos en tu pipeline
Lo primero es lo obvio: actualizar a Claude Code 2.1.163 o posterior, y a Gemini CLI 0.39.1 con run-gemini-cli 0.1.22 o posterior.
Lo segundo es menos obvio y no lo resuelve ningún parche:
- Que el workflow que dispara al agente no corra con los secretos de producción. Un token de repositorio con permisos mínimos y de vida corta cambia por completo el peor caso.
- Que el disparador no sea abierto a cualquiera. Restringir a colaboradores, o exigir aprobación explícita antes de que el workflow levante contenido de un tercero.
- Tratar
AGENTS.md,CLAUDE.mdy equivalentes como código: revisados en el pull request, no editables por el propio agente sin revisión. - Revisar el egress del runner. Si el agente tiene permitido salir a un servicio, ese servicio es un canal de exfiltración disponible, aunque sea legítimo.
El permiso preaprobado es la superficie
La lección que atraviesa a los tres casos no es que estos productos sean inseguros, sino dónde apareció el problema. En Claude Code el canal de salida fue un permiso otorgado a propósito. En Gemini CLI la ejecución sucedió en la ventana anterior al aislamiento. En Codex la persistencia se guardó en un archivo cuya función es ser confiable.
Ninguno de los tres se rompió por donde uno miraría primero.
¿Qué permisos tiene hoy el agente que corre en tu CI, y quién los revisó por última vez? Te leemos en los comentarios.
Fuentes
- The Hacker News — Claude Code and Gemini CLI flaws let a GitHub issue reach CI workflow secrets
- Novee Security — Critical flaws in Anthropic, Google, and OpenAI’s coding agents
- eSecurity Planet — Black Hat 2026: critical flaws found in Anthropic, Google and OpenAI coding agents
- Hackread — Black Hat USA 2026: one GitHub issue could compromise major AI coding workflows


