

यह रिपॉज़िटरी CVE-2019-17147 के व्यापक रिवर्स इंजीनियरिंग और शोषण का दस्तावेज़ीकरण करती है, जो TP-Link TL-WR841N राउटर (MIPSEL आर्किटेक्चर) में एक गंभीर रिमोट कोड एक्ज़ीक्यूशन (RCE) भेद्यता है। यह भेद्यता httpd वेब सर्वर डेमॉन में स्थित है, जहाँ अनुचित इनपुट सत्यापन एक कस्टम cstr_strncpy फ़ंक्शन के माध्यम से स्टैक बफ़र ओवरफ़्लो की अनुमति देता है, जिससे बिना प्रमाणीकरण के मनमाना कोड निष्पादन संभव होता है।
| भेद्यता | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (उच्च) |
| वेक्टर | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| प्रकार | स्टैक-आधारित बफ़र ओवरफ़्लो |
| घटक | /usr/bin/httpd |
विश्लेषण वातावरण निम्नलिखित घटकों का उपयोग करके स्थापित किया गया था:
flashrom (मेमोरी डंपिंग), binwalk (फ़र्मवेयर निष्कर्षण), IDA Pro (स्थैतिक विश्लेषण), GDB-Multiarch (रिमोट डिबगिंग), QEMU (MIPSEL इम्यूलेशन)।TL-WR841N(US)_V14_180319।भेद्यता की पहचान /usr/bin/httpd बाइनरी में की गई थी। IDA Pro के माध्यम से स्थैतिक विश्लेषण ने एक कस्टम स्ट्रिंग कॉपी फ़ंक्शन, cstr_strncpy का खुलासा किया, जिसका उपयोग HTTP हेडर पार्सिंग (विशेष रूप से Host हेडर) के दौरान किया जाता है।

फ़ंक्शन cstr_strncpy एक copy_len पैरामीटर स्वीकार करता है जो गंतव्य बफ़र आकार के बजाय स्रोत स्ट्रिंग लंबाई से प्राप्त होता है। यह अत्यधिक लंबा हेडर प्रदान किए जाने पर एक क्लासिक स्टैक बफ़र ओवरफ़्लो की अनुमति देता है। इसके अलावा, http_parser_argStrToList फ़ंक्शन, जो एक लिंक्ड लिस्ट संरचना में हेरफेर करता है, इस ओवरफ़्लो से प्रभावित होता है, जिससे next और prev पॉइंटर्स पर नियंत्रण मिल जाता है।
gdbserver के साथ रनटाइम डिबगिंग ने क्रैश और निष्पादन प्रवाह पर नियंत्रण की पुष्टि की। मेमोरी मैप (vmmap) विश्लेषण ने हार्डनिंग की गंभीर कमी का खुलासा किया:

यह कॉन्फ़िगरेशन हीप पर रखे गए शेलकोड के सीधे निष्पादन की अनुमति देता है, जिससे जटिल ROP चेन की आवश्यकता समाप्त हो जाती है।
शोषण श्रृंखला RCE प्राप्त करने के लिए दूषित लिंक्ड लिस्ट पॉइंटर्स से प्राप्त Write-What-Where प्रिमिटिव का उपयोग करती है।
strcpy में नल-बाइट प्रतिबंधों को बायपास करने के लिए, पेलोड को कई अनुरोधों में भेजा जाता है:
atol फ़ंक्शन की प्रविष्टि को शेलकोड के पते से अधिलेखित किया जाता है।atol (एक Content-Length हेडर के माध्यम से) को कॉल करने के लिए बाध्य करता है, जिससे निष्पादन इंजेक्टेड शेलकोड की ओर पुनर्निर्देशित हो जाता है।
अंतिम Python स्क्रिप्ट हमले को सफलतापूर्वक स्वचालित करती है, पोर्ट 31337 पर रूट शेल स्पॉन करती है।

यह भेद्यता बफ़र प्रबंधन में असुरक्षित कोडिंग प्रथाओं से उत्पन्न होती है।
cstr_strncpy के उपयोग को सुरक्षित विकल्पों से बदलें जो गंतव्य बफ़र सीमाओं को सख्ती से लागू करते हैं (जैसे, sizeof(dest) पर आधारित स्पष्ट बाउंड्स जाँच के साथ strncpy)।पूरी प्रक्रिया के विस्तृत चरण-दर-चरण वॉकथ्रू के लिए, जिसमें कोड विश्लेषण और पर्यावरण सेटअप शामिल है, कृपया इस रिपॉज़िटरी में शामिल पूर्ण गाइड देखें:
यह प्रोजेक्ट केवल शैक्षिक और शोध उद्देश्यों के लिए है। प्रदान की गई जानकारी IoT उपकरणों की सुरक्षा में सुधार लाने के लिए है। लेखक इसमें निहित जानकारी या कोड के किसी भी दुरुपयोग के लिए ज़िम्मेदार नहीं हैं।
मूल शोध और विश्लेषण पर आधारित।