
CVE-2018-14847 के लिए विश्लेषण और PoC, MikroTik RouterOS Winbox सूचना प्रकटीकरण भेद्यता जो क्रेडेंशियल डेटाबेस तक अप्रमाणित पढ़ने की पहुंच की अनुमति देती है।
MikroTik के Winbox प्रोटोकॉल में बिना प्रमाणीकरण का पथ ट्रैवर्सल, जो /flash/rw/store/user.dat से व्यवस्थापक क्रेडेंशियल्स लीक करता है
CVE-2018-14847 MikroTik RouterOS में एक पथ ट्रैवर्सल कमजोरी है जो Winbox प्रबंधन प्रोटोकॉल (TCP पोर्ट 8291) को प्रभावित करती है। एक बिना प्रमाणीकरण का दूरस्थ हमलावर राउटर के फाइलसिस्टम से मनमानी फाइलें पढ़ सकता है, जिसमें उपयोगकर्ता क्रेडेंशियल डेटाबेस /flash/rw/store/user.dat शामिल है, जो एक कमजोर स्थैतिक XOR कुंजी से एन्क्रिप्टेड पासवर्ड संग्रहीत करता है।
यह कमजोरी मूल रूप से जैकब बैन्स (Tenable) द्वारा जुलाई 2018 में By the Way शोषण के माध्यम से प्रकट की गई थी। इस रिपॉजिटरी में पूर्ण प्रोटोकॉल दस्तावेज़ीकरण के साथ एक स्टैंडअलोन Python3 पुनः कार्यान्वयन शामिल है।
| चैनल | संस्करण |
|---|
| Longterm | 6.30.1 - 6.40.7 |
| Stable | 6.29 - 6.42 |
| Beta | 6.29rc1 - 6.43rc3 |
MikroTik ने अप्रैल 2018 में इस कमजोरी को ठीक किया। निश्चित संस्करणों से पुराने RouterOS चलाने वाले उपकरण असुरक्षित बने हुए हैं।
Winbox TCP पोर्ट 8291 पर चलने वाला MikroTik का मालिकाना बाइनरी प्रबंधन प्रोटोकॉल है। फ्रेम इस प्रकार संरचित होते हैं:
[total_len - 2][0x01][0x00][total_len - 4]["M2"][fields...]
4-बाइट हेडर कुल फ्रेम आकार को एन्कोड करता है। यह एक मानक छोटे-अंत u16 नहीं है - प्रत्येक बाइट स्वतंत्र रूप से total_length - 2 और total_length - 4 को एन्कोड करता है।
प्रत्येक फ्रेम के अंदर फ़ील्ड एन्कोडिंग:
| प्रकार बाइट | अर्थ | मान |
|---|---|---|
| 0xff | विस्तारित फ़ील्ड मार्कर | इसके बाद field_id और मान |
| 0x09 | u8 पूर्णांक | 1 बाइट |
| 0x21 | स्ट्रिंग | 1-बाइट लंबाई उपसर्ग + डेटा |
| 0x88 | उत्तर-अपेक्षित मार्कर | कोई मान नहीं |
| 0xfe | विस्तारित फ़ील्ड आईडी | 3-बाइट आईडी + प्रकार + मान |
फाइलसिस्टम हैंडलर endpoint (sys=5, handler=0) पर रहता है और तीन प्रासंगिक कमांड प्रदर्शित करता है:
Winbox फाइलसिस्टम हैंडलर open-file कमांड को दिए गए पथ को साफ़ नहीं करता है। '/////./../' अनुक्रमों को एम्बेड करके, एक हमलावर सैंडबॉक्स सीमा से बच निकलता है और रूट फाइलसिस्टम तक पहुँचता है:
/////./..//////./..//////./../flash/rw/store/user.dat
प्रत्येक '/////./../' खंड (10 बाइट्स) एक निर्देशिका स्तर ऊपर जाता है। तीन खंड रूट तक पहुँचते हैं, जिसके बाद flash/rw/store/user.dat RouterOS उपयोगकर्ता क्रेडेंशियल डेटाबेस है। अनुरोध के लिए किसी प्रमाणीकरण की आवश्यकता नहीं है।
शोषण दो फ्रेम भेजता है:
user.dat nv::message रिकॉर्ड का एक क्रम है। प्रत्येक रिकॉर्ड से पहले 2-बाइट LE लंबाई फ़ील्ड होता है और यह जादुई बाइट M2 से शुरू होता है। प्रत्येक रिकॉर्ड के अंदर फ़ील्ड 3-बाइट LE फ़ील्ड आईडी का उपयोग करते हैं:
| फ़ील्ड आईडी | प्रकार | अर्थ |
|---|
| 0x01 | string | उपयोगकर्ता नाम |
| 0x02 | u8 | समूह - 3 = पूर्ण व्यवस्थापक पहुंच |
| 0x11 | string | एन्क्रिप्टेड पासवर्ड (सेट न होने पर खाली) |
पासवर्ड एक स्थैतिक XOR कुंजी से एन्क्रिप्ट किए जाते हैं जो RouterOS में संकलित एक हार्डकोडेड सॉल्ट से प्राप्त होती है:
key = MD5(username + "283i4jfkai3389")
password = XOR(encrypted_pass[i], key[i % len(key)]) until null byte
इसका मतलब है कि किसी भी प्रभावित उपकरण से निकाला गया कोई भी user.dat बल प्रयोग के बिना ऑफलाइन डिक्रिप्ट किया जा सकता है।
व्यवस्थापक पासवर्ड प्राप्त करने के बाद, हमलावर Winbox के माध्यम से प्रमाणित कर सकता है और create-file कमांड का उपयोग करके दो फाइलें लिख सकता है जो छिपे डेवलपर लॉगिन को सक्रिय करती हैं:
/pckg/option options पैकेज सक्रिय करता है
/flash/nova/etc/devel-login devel उपयोगकर्ता को सक्षम करता है
एक बार ये फ़ाइलें मौजूद होने पर, राउटर व्यवस्थापक के पासवर्ड का उपयोग करके devel उपयोगकर्ता के तहत Telnet और SSH के माध्यम से BusyBox रूट शेल प्रदर्शित करता है।
कुछ RouterOS संस्करणों पर SSH को काम करने के लिए पहले Telnet कनेक्ट होना चाहिए।
Exploit_CVE_2018_14847.py एक स्व-निहित Python3 शोषण है जिसमें शून्य बाहरी निर्भरता है। यह Winbox बाइनरी प्रोटोकॉल को स्क्रैच से लागू करता है और निम्नलिखित करता है:
# Default port 8291
python3 Exploit_CVE_2018_14847.py 192.168.1.10
# Custom port
python3 Exploit_CVE_2018_14847.py 192.168.1.10 8291
पोस्ट-शोषण - डेवलपर बैकडोर शेल:
# Telnet (पहले कनेक्ट करें)
telnet -l devel 192.168.1.10
# SSH (Telnet सत्र के बाद)
ssh -oHostKeyAlgorithms=+ssh-dss [email protected]