La inyección de prompts en Codex casi termina dentro del paquete npm de OpenAI: un informe público en GitHub, abierto por cualquier persona con una cuenta, bastaba para arrancar una cadena que apuntaba a la publicación oficial de @openai/codex, el paquete que millones de desarrolladores descargan cada mes. La firma de seguridad Depi publicó la cadena completa el 11 de noviembre de 2026, tras reportarla a OpenAI por su programa de recompensas. OpenAI corrigió el fallo y pagó una recompensa inicial de US$1.000. Ninguna versión maliciosa llegó a npm.

El punto de partida no fue un error de memoria ni una contraseña robada. Fue texto. El flujo Issue Labeler del repositorio openai/codex tomaba el título y el cuerpo de cada informe nuevo y los pegaba directo en la instrucción que recibía el agente de Codex, encargado de sugerir etiquetas. Ese flujo corría con la opción allow-users fijada en «*»: cualquier cuenta externa podía dispararlo con solo abrir un informe. El agente leía el texto del visitante en el mismo plano que las órdenes del equipo, y ahí se abría la puerta.

Depi demostró que un informe armado con instrucciones escondidas lograba que el agente ejecutara comandos dentro de su caja de arena, el espacio restringido donde trabaja. La caja limitaba bastante: sin red, sin privilegios de administrador, con escritura solo en el espacio de trabajo y en la carpeta temporal /tmp. El hueco estaba justo en esa carpeta. Los procesos que GitHub Actions usa para correr cada tarea, Runner.Listener y Runner.Worker, dejan en /tmp unos canales de depuración de .NET, el entorno de ejecución de Microsoft. Esos canales se abren como archivos comunes, sin autenticación, y permiten leer la memoria del proceso.

De un informe público a los tokens del corredor



La memoria de Runner.Worker guardaba justo lo que la caja de arena había retirado del entorno del agente: el token de GitHub y el token de ejecución de Actions. Depi contó que, sin red disponible, los tokens salieron impresos en el registro de la tarea, partidos en trozos largos para esquivar el enmascarado automático de GitHub, que tapa las cadenas cortas con formato de secreto. Con esas dos credenciales en la mano, la cadena cambiaba de piso.

El paso siguiente fue la memoria caché de compilación. Otro flujo del mismo repositorio, rust-ci.yml, con permisos de escritura, restauraba una caché compartida de Actions. Las cachés se extraen sin una verificación de integridad que ate el contenido a quien lo creó, y su clave no dependía de ningún secreto. Un atacante con el token robado podía sembrar una entrada alterada y esperar a que el flujo con más permisos la restaurara y ejecutara su contenido. Depi situó esa técnica en la línea de la investigación de envenenamiento de caché publicada por Adnan Khan.

La trampa final apuntaba al momento de publicar. Depi plantó un flujo con permiso id-token: write que se disparaba al borrar una publicación: si un mantenedor eliminaba una versión falsa, ese gesto entregaba un token OIDC, la credencial breve que npm acepta dentro de su esquema de publicación confiable. Con ese token, el atacante podía publicar una versión alterada de @openai/codex como si fuera la oficial. El recorrido completo queda reunido en el archivo de piezas sobre OpenAI, donde esta cadena se suma a otros incidentes de agentes y credenciales de la misma casa.

La corrección de OpenAI y la tarea para cada equipo



La inyección de prompts en Codex no quedó en una etiqueta equivocada: la cadena apuntaba al paquete npm de OpenAI. OpenAI sustituyó el agente etiquetador por una llamada a su API de respuestas con las herramientas desactivadas y un esquema estricto de salida en JSON, el formato de datos estructurados: el sistema nuevo propone etiquetas sin ejecutar comandos. SecurityWeek, en su resumen semanal publicado el 13 de noviembre, confirmó los mismos eslabones que Depi detalla: la inyección en el flujo de Actions, la lectura de tokens desde la memoria del corredor por los canales de depuración y el envenenamiento de la caché con permisos de escritura. El informe de Depi sigue en revisión dentro del programa de recompensas, que lista hasta US$100.000 para hallazgos críticos.

El caso deja una revisión concreta para cualquier equipo que conecte agentes a GitHub Actions. Un flujo que lee texto de informes, comentarios o solicitudes de cambios debe correr sin herramientas, sin secretos cercanos y con permisos de solo lectura por defecto. Las cachés que restaura un flujo con permisos de publicación no pueden venir de tareas abiertas al público, y la publicación en npm pide un entorno protegido con revisores obligatorios, atado a un único flujo.

Para quien instala Codex en su máquina, el dato práctico es corto: no hay versión que retirar ni parche que aplicar del lado del usuario, porque la falla vivía en la infraestructura del repositorio y OpenAI la cerró antes de la divulgación. El riesgo real era la próxima actualización, esa que muchos equipos instalan en automático el mismo día en que sale.

Depi cierra su informe con una advertencia que el expediente respalda: un agente que lee texto público dentro de una canalización con credenciales cerca convierte cada informe en una posible orden. La recompensa inicial quedó en US$1.000 y el expediente sigue abierto a revisión, con la cifra final todavía sin publicar.

Fuente: Depi