
TP-Link Tapo C200 कैमरे (CVE-2021-4045) के लिए कमांड इंजेक्शन एक्सप्लॉइट, जो UART के माध्यम से रूट शेल एक्सेस और रिवर्स-इंजीनियर्ड uhttpd बाइनरी विश्लेषण प्रदान करता है।
CVE-2021-4045
CVE-2021-4045 TP-Link Tapo C200 कैमरे में पाई गई एक कमांड इंजेक्शन भेद्यता है, जो हमलावर को root विशेषाधिकारों के साथ डिवाइस का पूर्ण नियंत्रण लेने की अनुमति देती है। यह भेद्यता फर्मवेयर संस्करण 1.1.16 Build 211209 Rel. 37726N से पहले के सभी संस्करणों को प्रभावित करती है।
🔗 INCIBE की आधिकारिक सूचना: https://www.incibe.es/incibe-cert/alerta-temprana/vulnerabilidades/cve-2021-4045 (वास्तविक लिंक से बदलें)
🔧 अनुशंसित समाधान: फर्मवेयर को 1.1.16 या उससे ऊपर के संस्करण में अपडेट करें।
$ nmap -sV -p- 192.168.1.81
**परिणाम**:```
PORT STATE SERVICE
443/tcp open https
554/tcp open rtsp
2020/tcp open xinupageserver
8800/tcp open sunwebadmin
जैसा कि आप देख सकते हैं, डिवाइस में कुछ दिलचस्प खुले पोर्ट हैं। सबसे पहले मैंने पोर्ट 443 को आज़माया। हालाँकि nmap स्पष्ट रूप से बताता है कि यह https का उपयोग करता है, जब मैंने प्रारंभिक स्कैन किया, तो मैंने इसे अनदेखा कर दिया और काफी समय यह सोचकर बिताया कि पोर्ट 443 http का उपयोग कर रहा है। इस वजह से, मैंने https://192.168.1.81:443 के बजाय केवल http://192.168.1.81:443 को आज़माया, जिससे मुझे केवल 400 प्रतिक्रियाएँ मिलीं। जैसा कि मैंने परिचय में कहा था, यह प्रक्रिया असफलताओं से भरी थी। अन्य पोर्ट्स के बारे में, उन पर चलने वाली सेवाएँ मेरे लिए पूरी तरह से अज्ञात थीं और मुझे उनके बारे में कोई स्पष्ट जानकारी नहीं मिली। उस समय, मेरे पास कोई ज्ञात विकल्प नहीं बचा था, इसलिए गहराई से जाँच करने का समय था।
----[ शेल प्राप्त करना ]-------------------------------
कैमरा खरीदने से पहले, मैंने इंटरनेट पर डिवाइस के बारे में पिछले शोध खोजे और, सौभाग्य से, मुझे यह GitHub रिपॉजिटरी मिली जहाँ लोग रिवर्स इंजीनियरिंग करने के लिए सहयोग कर रहे थे। एक समस्या में बताया गया था कि UART पोर्ट के माध्यम से कंसोल तक पहुँच कैसे प्राप्त करें, जो उस समय मेरे लिए पूरी तरह से अज्ञात था। इसलिए मैंने मूल बातें सीखीं और कनेक्ट करने के लिए एक USB से TTL कनवर्टर खरीदा।
उल्लिखित समस्या की मदद से, मैं एक चाकू और एक पेचकस के साथ डिवाइस खोलने और जल्दी से UART का पता लगाने में सक्षम था। कुछ प्रयासों और बहुत धैर्य के बाद, अंततः मैंने पैड पर कुछ तारों को सोल्डर करने में सफलता प्राप्त की।
फिर, यह जाँचने का समय आया कि क्या सोल्डरिंग डेटा ट्रांसमिशन के लिए पर्याप्त अच्छी थी। मैंने तारों को USB एडाप्टर से जोड़ा, यह ध्यान में रखते हुए कि UART का Rx एडाप्टर के Tx से जाता है और इसके विपरीत, और एडाप्टर को अपने कंप्यूटर से जोड़ा। फिर से, उल्लिखित समस्या के लिए धन्यवाद, मुझे पता था कि सीरियल कनेक्शन के लिए बॉड दर 57600 थी, इसलिए मैंने निष्पादित किया:
$ sudo screen /dev/tty.usbserial-0001 57600
जहाँ '/dev/tty.usbserial-0001' वह USB पोर्ट है जिससे एडाप्टर जुड़ा है और जो डिवाइस को बिजली प्रदान करता है। मुझे तुरंत डेटा प्राप्त होने लगा, बढ़िया।
हालाँकि, मुझे अभी भी कंसोल तक पहुँच नहीं मिली थी। मैं जो प्राप्त कर रहा था वह केवल डिवाइस का बूट अनुक्रम था, जो वास्तव में U-Boot बूटलोडर था। यह कुछ इस तरह दिखता था:
U-Boot 2014.01-v1.2 (Jul 16 2021 - 18:41:10)
Board: IPCAM RTS3903 CPU: 500M :rx5281 prid=0xdc02 force spi nor mode DRAM: 64 MiB @ 1066 MHz Skipping flash_init Flash: 0 Bytes flash status is 0, 0, 0 SF: Detected XM25QH64A with page size 256 Bytes, erase size 64 KiB, total 8 MiB Using default environment
Autobooting in 1 seconds copying flash to 0x81500000 flash status is 0, 0, 0 SF: Detected XM25QH64A with page size 256 Bytes, erase size 64 KiB, total 8 MiB SF: 8388608 bytes @ 0x0 Read: OK
[...]
एंटर दबाने पर, हमें एक उपयोगकर्ता नाम और पासवर्ड दर्ज करने के लिए कहा जाता है। उस GitHub समस्या के लिए धन्यवाद, हम क्रेडेंशियल्स जानते हैं, इसलिए हम उपयोगकर्ता 'root' और पासवर्ड 'slprealtek' के साथ सफलतापूर्वक लॉग इन कर सकते हैं और अंततः कंसोल तक पहुँच प्राप्त कर सकते हैं।
एक बार जब मैंने जाँच लिया कि कनेक्शन काम कर रहा है, तो मुझे सोल्डरिंग को मजबूत करने की आवश्यकता थी, क्योंकि आवरण को जोड़ने की प्रक्रिया के दौरान यह दो बार टूट चुका था। मैंने सभी तारों को सुरक्षित करने के लिए हॉट ग्लू लगाया और डिवाइस को बंद कर दिया, सभी मोटरों को डिस्कनेक्ट कर दिया। अब, मेरी परीक्षण इकाई तैयार थी।
----[ डिवाइस की खोज ]--------------------------
अब जब हमारे पास एक आवरण है, तो आइए डिवाइस का अन्वेषण करें:
root@SLP:~# uname -a Linux SLP 3.10.27 #1 PREEMPT Wed Nov 11 20:42:05 CST 2020 rlx GNU/Linux
root@SLP:~# cat /etc/openwrt_version 12.09-rc1
जैसा कि हम देख सकते हैं, यह एक OpenWRT मशीन है जो Linux 3.10.27 चला रही है। अब हम सक्रिय प्रक्रियाओं और खुले पोर्ट्स की जाँच करेंगे: