
सुरक्षित रूप से पता लगाएं कि क्या कोई UniFi Network Application controller CVE-2026-22557 के लिए संवेदनशील है।
सुरक्षित रूप से पता लगाएं कि क्या कोई UniFi Network Application नियंत्रक CVE-2026-22557 के लिए असुरक्षित है, बिना किसी व्यवधान के। Bishop Fox ब्लॉग पर पूरा लेख देखें।
CVE-2026-22557 UniFi Network Application के अतिथि कैप्टिव पोर्टल में एक अनप्रमाणित पथ-ट्रैवर्सल भेद्यता है जो दूरस्थ हमलावरों को नियंत्रक प्रक्रिया उपयोगकर्ता के रूप में मनमानी फ़ाइलें पढ़ने की अनुमति देती है (CVSS 10.0)। यह भेद्यता UniFi Network Application 10.1.85 और उससे पहले के 10.1.x शाखा, और 10.2.x और 9.0.x शाखाओं पर संबंधित पुराने रिलीज़ को प्रभावित करती है। Ubiquiti ने 10.1.89, 10.2.97, और 9.0.118 में फिक्स जारी किए (SAB-062)।
अतिथि पोर्टल का फेलियर-पेज रेंडरर page_error अनुरोध पैरामीटर को पढ़ता है और इसे बिना किसी सत्यापन के पोर्टल संसाधन लोडर पर सापेक्ष पथ के रूप में उपयोग करता है। जब पूछताछ की गई साइट पर portal_customized: true सेट किया जाता है (कोई भी ब्रांडेड कैप्टिव पोर्टल, जैसे होटल, रिटेल, या कैफे तैनाती, इस कॉन्फ़िगरेशन के साथ समाप्त होती है), तो लोडर उस पथ को डिस्क पर पोर्टल निर्देशिका के विरुद्ध हल करता है, और पथ उससे बच सकता है।
यह उपकरण विनाशकारी भेद्यता परीक्षण नहीं करता है:
/status से पढ़ना और SAB-062 फिक्स लाइनों के विरुद्ध तुलना करना/guest/<site>/wechat/sign पर page_error पैरामीटर को ../ गहराई 1-8 पर एक दोहरी-शाखा फ़ाइलनाम के विरुद्ध जांचना, यह निर्धारित करने के लिए कि ट्रैवर्सल बिल्कुल चालू होता है या नहींfirmware.json) के विरुद्ध करना यह निर्धारित करने के लिए कि कस्टमाइज़्ड-पोर्टल फाइलसिस्टम शाखा सक्रिय है या नहींउपकरण केवल रनटाइम कैटलॉग फ़ाइल को एक शाखा-सक्रिय ओरेकल के रूप में अनुरोध करता है। यह क्रेडेंशियल, TLS सामग्री, डेटाबेस स्थिति, या बैकअप नहीं पढ़ता है, और किसी भी फ़ाइल सामग्री को stdout या डिस्क पर नहीं लिखता है। केवल निर्णय मुद्रित होता है।
portal_customized: true है, वे कैलिब्रेटेड गहराई पर कैटलॉग फ़ाइल लौटाते हैं, जो VULNERABLE की पुष्टि करता है।portal_customized: false है, वे कैलिब्रेशन चरण में ट्रैवर्सल को ट्रिगर करते हैं लेकिन पुष्टिकरण चरण में डिस्क सामग्री वापस नहीं करते → PARTIALLY EXPOSED। एप्लिकेशन बाइनरी अभी भी असुरक्षित है; पैचिंग आवश्यक है भले ही यह साइट शोषण योग्य स्थिति में न हो।NOT VULNERABLE।NOT EXPOSED देते हैं।git clone https://github.com/BishopFox/CVE-2026-22557-check
cd CVE-2026-22557-check
Python 3.9+ आवश्यक है। उपकरण केवल Python मानक लाइब्रेरी का उपयोग करता है, इसलिए pip install चरण की आवश्यकता नहीं है।
<TARGET> पर एक UniFi Network Application नियंत्रक का परीक्षण करें। उपकरण को उस URL पर इंगित करें जो नियंत्रक के वेब UI तक पहुंचता है; असुरक्षित हैंडलर प्रशासन पोर्ट (डिफ़ॉल्ट 8443/TCP) के साथ-साथ समर्पित अतिथि-पोर्टल पोर्ट (8843, 8880) पर प्रेषित होता है।
python3 cve_2026_22557_check.py <BASE_URL> [--site NAME]
डिफ़ॉल्ट साइट स्लग default है। कई साइटों के साथ कॉन्फ़िगर किए गए UniFi तैनाती को प्रत्येक के लिए --site <name> के साथ उपकरण को फिर से चलाना चाहिए। एक नियंत्रक शोषण योग्य है जैसे ही उसकी कोई भी एक साइट में portal_customized: true हो।
नीचे दिए गए उदाहरण प्रति-होस्ट एक-पंक्ति परिणाम के लिए --brief का उपयोग करते हैं। पूर्ण बैनर, चरण-दर-चरण प्रगति, और अनुशंसित सुधार कार्रवाइयों सहित परिणाम ब्लॉक प्राप्त करने के लिए --brief के बिना चलाएं।
नियंत्रक एक असुरक्षित बिल्ड पर है और कस्टमाइज़्ड-पोर्टल पूर्व शर्त पूछताछ की गई साइट के लिए सक्रिय है, इसलिए अनप्रमाणित पढ़ने का पथ प्राप्त किया जा सकता है।
$ python3 cve_2026_22557_check.py https://192.168.1.100:8443 --brief
[VULNERABLE] https://192.168.1.100:8443 site=default
नियंत्रक एक असुरक्षित बिल्ड पर है, लेकिन पूछताछ की गई साइट में portal_customized: true सक्षम नहीं है, इसलिए इस साइट के लिए डिस्क-रीड पूर्व शर्त पूरी नहीं हुई है। एप्लिकेशन बाइनरी को अभी भी पैच किए जाने की आवश्यकता है; उसी नियंत्रक पर एक और साइट अभी भी शोषण योग्य स्थिति में हो सकती है।
$ python3 cve_2026_22557_check.py https://192.168.1.100:8443 --brief
[PARTIAL] https://192.168.1.100:8443 site=default
नियंत्रक एक निश्चित बिल्ड (10.1.89, 10.2.97, 9.0.118, या बाद में) पर है, इसलिए ट्रैवर्सल किसी भी पूछताछ की गई गहराई पर चालू नहीं होता है।
$ python3 cve_2026_22557_check.py https://192.168.1.200:8443 --brief
[NOT VULNERABLE] https://192.168.1.200:8443 site=default
--site NAME जांच करने के लिए UniFi साइट स्लग (डिफ़ॉल्ट: "default")
--max-depth N प्रयास करने के लिए अधिकतम ../ ट्रैवर्सल गहराई (डिफ़ॉल्ट: 8)
--no-tls-recon TLS प्रमाणपत्र subject/SAN प्रदर्शन छोड़ें
--no-color ANSI रंग आउटपुट अक्षम करें (सम्मानित भी: NO_COLOR env var)
--timeout N प्रति-अनुरोध टाइमआउट सेकंड में (डिफ़ॉल्ट: 20)
--brief एक-पंक्ति परिणाम प्रिंट करें, कोई बैनर या चरण नहीं
बाहर निकलने के कोड: 0 VULNERABLE, 1 आंशिक रूप से उजागर / असुरक्षित नहीं / उजागर नहीं, 2 परिवहन त्रुटि।
उपकरण केवल एक VULNERABLE निर्णय वापस कर सकता है यदि निम्नलिखित शर्तें पूरी हों:
/guest/* हैंडलर प्रशासन पोर्ट (8443) के साथ-साथ समर्पित अतिथि-पोर्टल पोर्ट (8843, 8880) पर प्रेषित होता है; उपकरण केवल उसे दिए गए URL की जांच करता है।guest_access सेटिंग में portal_customized: true है, जो डिस्क-रीड कोड पथ के लिए पूर्व शर्त है। कई साइटों वाला नियंत्रक शोषण योग्य है यदि उसकी कोई भी साइट में यह सक्षम है।यदि कोई भी शर्त पूरी नहीं होती है, तो उपकरण अधिक रूढ़िवादी निर्णय पर आ जाता है। एक PARTIALLY EXPOSED परिणाम का अर्थ अभी भी है कि एप्लिकेशन असुरक्षित है और इसे पैच किया जाना चाहिए; पूछताछ की गई साइट बस डिस्क-रीड पथ को उजागर नहीं करती है।
असुरक्षित अनुरोध पैटर्न है:
GET /guest/s/<site>/wechat/sign?page_error=<value>
वैध क्लाइंट /guest/s/<site>/wechat/sign तक केवल POST के माध्यम से पहुंचते हैं (जिसे डिस्पैचर फेलियर-पेज रेंडरर को उठाए बिना स्वीकार करता है)। इस एंडपॉइंट पर कोई भी GET जिसमें page_error= क्वेरी पैरामीटर हो, विशेष रूप से ../, %2e%2e, या अग्रणी / वाला, अनियमित है और इसे शोषण प्रयास के रूप में माना जाना चाहिए। Tomcat का मानक एक्सेस लॉग क्वेरी स्ट्रिंग सहित पूर्ण अनुरोध पंक्ति को कैप्चर करता है।
यह कोड MIT लाइसेंस के तहत वितरित किया जाता है।