
TP-Link Deco XE75 Pro V3 डिबग चैनल (tmpsvr opcodes 0xC456/0xF0) में रूट फ़ाइल पढ़ने/लिखने की खामी के लिए डिस्क्लोज़र और PoC, CVSS विश्लेषण और हैंडलर डीकंपाइलेशन के साथ।
साथी VLAN प्रोजेक्ट: सटीक XE75 Pro V3 फ़र्मवेयर/प्रोफ़ाइल के लिए प्रयोगात्मक fixed-VLAN-30 स्रोत alpha। इसके लिए ऑपरेटर द्वारा आपूर्ति की गई स्टॉक फ़ाइलों की आवश्यकता होती है और इसमें कोई सामान्य इंस्टॉलर या फ़्लैश करने योग्य इमेज नहीं है। Guest VLAN 591 अभी भी अनसुलझा है; अंतिम तीन-यूनिट कोल्ड-बूट, UI और क्लाइंट-आइसोलेशन स्वीकृति अधूरी है। देखें वर्तमान स्थिति।
अनुसंधान प्रकटीकरण, TP-Link Deco XE75 Pro V3, फ़र्मवेयर 1.5.0 Build
20260603 Rel.15804। [email protected] के लिए तैयार और हमारे 802.1Q IoT VLAN कार्यान्वयन (deco-iot-vlan) के साथ सार्वजनिक रिलीज़।
Deco का owner-authenticated debug SSH चैनल (TCP 20001 पर Dropbear,
केवल direct-tcpip फ़ॉरवर्डिंग, पासवर्ड प्रमाणीकरण) 127.0.0.1:20002 पर एक आंतरिक
tmpsvr सेवा तक पहुँचता है। इसके Lua हैंडलरों में से एक,
inner_file_push (opcode 0xC456), params.file को "w" मोड में खोलता है और
params.content को यथावत root के रूप में, बिना किसी पथ allowlist, बिना आकार
सीमा, और बिना विशेषाधिकार ड्रॉप के लिखता है। एक सहोदर opcode (0xF0) एक
मिलान करने वाला root फ़ाइल पठन प्रदान करता है। साथ में: पूरे
root फ़ाइलसिस्टम का प्रमाणीकृत पठन + लेखन, जो एक राउटर पर पूरा डिवाइस है।
SSH :20001 (username = SHA1(owner_email), password = TP-Link account password)
-> direct-tcpip -> 127.0.0.1:20002 (TMPv2)
-> 0xC456 inner_file_push : io.open(file,"w"); write(content); close() [root]
-> 0x00F0 root file read : byte-exact file read [root]
/etc/config एक लाइव राइटेबल ramfs है → कोई कुंजी बदलें, राउटर उसे मान लेता है।/www को uhttpd द्वारा HTTPS पर सर्व किया जाता है → पुश की गई फ़ाइलें तुरंत पहुँच योग्य हो जाती हैं।/tp_data/user_data स्थायी ubifs फ़्लैश है → रीबूट के बाद भी बनी रहती है।GET /cgi-bin/luci के माध्यम से ट्रिगर होता है → रूट Lua निष्पादन → io.popen → मनमाना रूट
बाइनरी निष्पादन।सभी चार चरणों को निष्पादित किया गया और मालिक की अपनी मुख्य यूनिट पर वापस पूर्ववत किया गया।
tmpsvr अभी तक अप्रभावित क्यों हैUCR SecLab टीम ने :20001 -> 127.0.0.1:20002 (tmpsvr) डीबग चैनल को दो साल पहले CCS 2024 — "Untangling the Knot: Breaking Access Control in Home Wireless Mesh Networks" (और Black Hat USA 2024 — "Fallen Tower of Babel") में सार्वजनिक रूप से प्रलेखित किया था। पुराने Deco मॉडलों (X55, FW 1.2.2) पर उनका प्रवेश बिंदु 512-बिट RSA होस्टकीज़ का फैक्टराइज़ेशन और अमान्यीकृत tmpsvr हैंडलरों का दुरुपयोग था।
इस सटीक फ़र्मवेयर पर देखे गए अंतर और शेष हैंडलर:
ssh-rsa होस्टकी का आकार 512-बिट से बढ़ाकर 2048-बिट कर दिया (सभी तीन मेश यूनिटों में एक साझा देखी गई कुंजी, SHA256:9feb3ac4...932a36, साथ ही प्रति-यूनिट ecdsa-sha2-nistp521), जिससे 2024 के टॉक का 512-बिट फैक्टराइज़ेशन पथ बंद हो गया।1.5.0 में निम्नलिखित रूट-स्तरीय हैंडलर मौजूद हैं:
:20001 पर पासवर्ड प्रमाणीकरण (svr_auth_uci) SHA1(owner_email) + साझा TP-Link ID पासवर्ड का उपयोग करते हुए सक्रिय बना हुआ है।0xC456 (inner_file_push) अभी भी किसी भी कॉलर-प्रदत्त पथ को "w" मोड में root के रूप में बिना किसी पथ सत्यापन के खोलता है।0x00F0 अभी भी फ़ाइलसिस्टम पर किसी भी फ़ाइल को root के रूप में पढ़ता है।0xC505 (tty2tcp/start) — 2024 के पेपर में चिह्नित वही अनकोटेड /bin/sh -c कमांड-इंजेक्शन हैंडलर — जून 2026 के फ़र्मवेयर (1.5.0) में पूरी तरह से अप्रभावित बना हुआ है।luci/controller/admin/mobile_app/iot_device
मॉड्यूल, inner_file_push) में है।केवल LAN पहुँच क्षमता प्रदर्शित की गई है। देखे गए केवल-LAN प्रोफ़ाइल के लिए हम AV:A वेरिएंट का उपयोग करते हैं: v3.1 6.8 / v4.0 8.5। नीचे दिए गए AV:N स्कोर प्रदर्शित नेटवर्क पथ पर सशर्त हैं; क्लाउड पहुँच असत्यापित है।
यह पोस्ट-ऑथेंटिकेशन, मालिक-विशेषाधिकार से रूट तक का एस्केलेशन है — अनऑथ RCE नहीं — नीचे दिए गए देखे-गए-प्रोफ़ाइल स्कोर 6.8 (v3.1) और 8.5 (v4.0) हैं। पूर्ण तर्क और
अस्वीकृत बढ़ोतरी docs/cvss-analysis.md में हैं।
CVSS v3.1 — केवल-LAN आकलन 6.8 (मध्यम); सशर्त रिमोट वेरिएंट 7.2 (उच्च):
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H = 7.2 (High)
CVSS:3.1/AV:A/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H = 6.8 (Medium) # if LAN-only
निर्णायक कॉल: PR:H (मालिक / TP-Link-ID खाता डिवाइस का
प्रशासनिक प्रिंसिपल है) और S:U (हैंडलर पहले से ही root के रूप में चलता है — कोई
प्राधिकरण सीमा पार नहीं होती)। एक पूर्व ड्राफ़्ट ने PR:L + S:C के माध्यम से 9.9 स्कोर किया था;
दोनों को अस्वीकार कर दिया गया है।
CVSS v4.0 — केवल-LAN मूल्यांकन 8.5 (High); सशर्त रिमोट वेरिएंट 8.6 (High):
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N = 8.6 (High)
CVSS:4.0/AV:A/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N = 8.5 (High) # if LAN-only
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L = 9.3 (Critical) # with Subsequent-System LAN/mesh impact
वास्तविक दुनिया का जोखिम — एक चोरी हुआ/पुनः उपयोग किया गया TP-Link-ID पासवर्ड जो पूरे mesh में persistent root में बदल जाता है, साथ ही client-traffic MITM — यह narrative (और v4.0 के SC:H/SI:H/SA:L Subsequent-System metrics) में आता है, किसी बढ़ा-चढ़ाकर पेश किए गए v3.1 base vector में नहीं।
poc/deco_filepush_poc.py — self-contained (stdlib + paramiko)। Credentials केवल DECO_EMAIL / DECO_PASSWORD env vars के माध्यम से। Live modes के लिए DECO_HOSTKEY आवश्यक है, जिसे स्वतंत्र रूप से सत्यापित किया जाता है: raw base64, एक public-key line, या एक ssh-keyscan key line (comments समर्थित)। अकेला scan डिवाइस को authenticate नहीं करता। HTTPS check served bytes की तुलना करता है लेकिन उसके certificate को सत्यापित नहीं करता। ठीक एक mode आवश्यक है; verification विफल होने पर nonzero के साथ exit होता है।
python3 poc/deco_filepush_poc.py --selftest # offline framing sanity
[email protected] DECO_PASSWORD=*** DECO_HOSTKEY="$TRUSTED_DECO_HOSTKEY" \
python3 poc/deco_filepush_poc.py --run # write marker + readback + HTTPS check
[email protected] DECO_PASSWORD=*** DECO_HOSTKEY="$TRUSTED_DECO_HOSTKEY" \
python3 poc/deco_filepush_poc.py --cleanup <nonce> # overwrite marker with empty content
PoC /www/log_export (ramfs; रीबूट पर भी साफ़ हो जाता है) में एक एकल अक्रिय मार्कर लिखता है, फिर सफलता की रिपोर्ट करने से पहले डिवाइस के अपने रूट-रीड ऑपकोड के माध्यम से बाइट-सटीक रीडबैक और अपरिवर्तित HTTPS सर्विंग की आवश्यकता होती है।
ssh-keyscan -p 20001 <deco> → होस्ट कुंजी पिन करें (2048-बिट RSA पूरे मेश में साझा + प्रति-यूनिट nistp521)।SHA1(owner_email) / TP-Link खाता पासवर्ड के साथ SSH करें, 127.0.0.1:20002 के लिए direct-tcpip का अनुरोध करें।01010100 → 01010200 → 01010200), फिर ऑपकोड 1 टोकन अनुरोध।0xC456, {"params":{"file":"/www/log_export/deco-write-<nonce>.html", "content":"..."}} → {"error_code":0,...}।0xF0, {"params":{"file":"..."}} → बाइट-सटीक रीडबैक।GET https://<deco>/log_export/deco-write-<nonce>.html → 200, सटीक बाइट्स।