← Artículos

El issue de GitHub que voltea tu agente de código

· 7 min de lectura

En Black Hat, Novee Security mostró que Claude Code, Gemini CLI y Codex pueden volverse contra su propio repositorio cuando procesan un issue o un pull request de alguien de afuera. En Gemini CLI el fallo llegó a CVSS 10.0, el máximo posible; en Claude Code, una API key se filtró carácter por carácter usando el contador público de descargas de Hugging Face. Las dos ya están corregidas; la de Codex sigue sin versión parchada.

Mi fábrica de contenido corre sola desde las cuatro de la mañana: un watcher de macOS vigila una carpeta y, si encuentra un guion nuevo, dispara a Claude Code sin que yo toque nada. Por eso esta noticia no la leí como una curiosidad de seguridad — la leí preguntándome qué tan parecido es mi propio sistema al que rompieron en Black Hat.

Qué mostró Novee Security

El 5 de agosto, el equipo de investigación Novee Security presentó en Black Hat USA cadenas de fallos en los tres agentes de código más usados hoy: Claude Code, Gemini CLI y Codex de OpenAI. Los tres se probaron en la configuración que cada empresa entrega por defecto, sin trucos ni ajustes exóticos. El resultado: en los repositorios propios de Anthropic y de Google, una cuenta sin ningún privilegio sobre el repositorio bastaba para ejecutar código en los runners de integración continua. En el repositorio de OpenAI, esa misma cuenta sin privilegios bastaba para secuestrar la siguiente pasada del agente.

Este sistema es el que enseño dentro de la comunidad MÁQUINA IA: las estaciones, los gates y el código que lo sostiene.

Las tres fallas, con número

Gemini CLI se llevó la peor calificación: CVE-2026-12537, con un puntaje CVSS v4 de 10.0, el máximo de la escala. Es una inyección de comandos del sistema operativo en el lanzador de contenedores, alcanzable con un archivo `.gemini/.env` manipulado, que deja a un atacante sin privilegios ejecutar código en el host de una plataforma de CI antes de que arranque el sandbox. En Claude Code, CVE-2026-54316 convirtió el contador público de descargas de Hugging Face en un canal de fuga: una API key salió filtrada carácter por carácter. Afectaba a todas las versiones entre la 0.2.54 y la 2.1.163. Anthropic aclara que explotarlo exigía primero meter contenido no confiable dentro del contexto de Claude Code — no es una puerta abierta de fábrica sin condición. El hallazgo en Codex no tiene CVE ni versión corregida. Novee encontró que el repositorio openai/codex corría dos pasadas del agente dentro de un mismo job, compartiendo un solo checkout: la primera pasada podía escribir AGENTS.md, el archivo que la segunda pasada carga como sus propias instrucciones.

El patrón detrás de las tres

Las tres fallas comparten el mismo defecto de diseño, no un bug suelto: una parte del sistema marca un valor como seguro, y otra parte lo ejecuta después con más autoridad de la que ese valor se ganó. Novee lo llama el "harness" — el código que está entre el modelo y el mundo real, decidiendo qué se ejecuta de verdad. Un detalle técnico que quedó sin arreglar: el validador de comandos de Claude Code quita el texto entre comillas simples antes de correr sus 23 verificaciones, que es el comportamiento correcto para bash — pero eso deja pasar sin tocar un payload metido en el valor de una bandera como git push --receive-pack. Esa cadena específica no tiene CVE ni versión corregida publicada todavía. En Gemini CLI, la lista de herramientas permitidas se leía solo al registrar la herramienta, no en tiempo real, así que bajo el modo --yolo cualquier comando que pidiera el modelo se aprobaba solo.

Qué ya está arreglado y qué no

Gemini CLI quedó corregido en la versión 0.39.1 y en run-gemini-cli 0.1.22. Claude Code quedó corregido en la 2.1.163. Anthropic califica su propia falla como Moderada, con CVSS v4 de 6.0; el NVD, en cambio, la puntuó en 9.1 bajo CVSS v3.1 — son dos escalas distintas y no se comparan directo, pero la diferencia muestra que ni los propios afectados se ponen de acuerdo en qué tan grave fue. El caso de Codex se resolvió a nivel de flujo de trabajo, no de producto: OpenAI separó las dos pasadas en jobs distintos y corre Codex con privilegios reducidos y sandbox de solo lectura. Su guía ahora trata los archivos de instrucciones del repositorio como parte de la superficie no confiable. No hay una versión de Codex que se comporte distinto sola. El dato honesto: al 7 de agosto, CISA listaba explotación "ninguna" en los dos CVE y ninguno aparecía en su catálogo de vulnerabilidades explotadas activamente. Sí existe, desde el 18 de junio, un repositorio público que se describe como laboratorio de reproducción de la falla de Claude Code — es una prueba de concepto documentada, no evidencia de un ataque real en curso.

Lo que revisé en mi propia fábrica

Mi watcher reacciona a un archivo que YO dejo caer en una carpeta, no a un desconocido que abre un issue en un repositorio público — así que la cadena exacta de Black Hat no aplica tal cual a mi caso. Pero el patrón de fondo sí lo tengo: varias pasadas de agentes comparten directorios donde una escribe y la siguiente lee, exactamente la forma del fallo de Codex. La lección no es "esto no me toca", es "reviso qué directorio comparten mis pasadas y quién escribió ahí antes de confiar en lo que hay adentro".

Qué revisar hoy si administras uno de estos agentes

Actualiza Gemini CLI a 0.39.1 (o run-gemini-cli a 0.1.22) y Claude Code a 2.1.163. Audita cualquier workflow que se dispare con un issue o un pull request de gente de afuera del equipo. Quítale el token de escritura a esos jobs específicos. Deja de compartir un mismo checkout escribible entre dos pasadas del mismo agente. Y trata cualquier archivo de instrucciones dentro del repositorio — AGENTS.md, CLAUDE.md, .claude/skills — como entrada no confiable si el repositorio acepta contribuciones externas.

Preguntas frecuentes

¿Ya hay ataques reales usando estas fallas?
No hay evidencia pública de eso hasta el momento. CISA registró el nivel de explotación como "ninguna" en los dos CVE al 7 de agosto de 2026 y ninguno de los dos aparece en su catálogo de vulnerabilidades explotadas activamente. Sí existe un repositorio público, activo desde el 18 de junio, que reproduce la falla de Claude Code como prueba de concepto documentada — distinto de un ataque confirmado contra un objetivo real.
¿Qué es el harness del que habla el reporte de Novee?
Es el código que se sienta entre el modelo de lenguaje y el mundo real: el que decide qué comando se ejecuta, qué archivo se lee o se escribe, y con qué permisos. Las tres fallas de Black Hat no fueron errores del modelo engañado por un prompt: fueron errores del harness, donde una parte del sistema marcó como seguro un valor que en realidad venía de alguien sin autorización, y otra parte lo ejecutó con más privilegios de los que merecía.
¿Esto afecta el uso normal de Claude Code sin GitHub Actions?
El vector que mostró Novee depende de que el agente procese contenido escrito por alguien externo dentro de un flujo automatizado, como un issue o un pull request en integración continua. Si usas Claude Code de forma interactiva, en tu propia máquina, sobre repositorios que solo tú y tu equipo escriben, la superficie de ataque específica de este reporte no aplica de la misma forma — pero el principio general, no confiar en instrucciones que vienen de un archivo que no escribiste tú, sigue aplicando.
¿Qué debo corregir primero si mantengo un repositorio con estos agentes conectados?
Empieza por actualizar: Gemini CLI a 0.39.1 o run-gemini-cli a 0.1.22, y Claude Code a la versión 2.1.163 o posterior. Después audita cada workflow que un usuario externo pueda disparar con un issue o un pull request, y quítale a esos jobs específicos cualquier token con permiso de escritura. El caso de Codex, sin parche de producto todavía, se mitiga separando las pasadas del agente en jobs distintos que no compartan un mismo checkout escribible.

Fuentes