
यह सुरक्षित रूप से पता लगाएं कि क्या UniFi OS Server CVE-2026-34908 के लिए असुरक्षित है।
UniFi OS Server ≤ 5.0.6 में बिना प्रमाणीकरण के रिमोट कोड निष्पादन श्रृंखला के लिए एक सुरक्षित डिटेक्टर, Ubiquiti सुरक्षा सलाह बुलेटिन 064 में प्रकट किया गया:
| CVE | श्रेणी | श्रृंखला में भूमिका |
|---|---|---|
| CVE-2026-34908 / CVE-2026-34909 | अनुचित पहुंच नियंत्रण / पथ ट्रैवर्सल | प्रमाणीकरण-गेटवे बाईपास (पैर जमाने का बिंदु) |
| CVE-2026-34910 | अनुचित इनपुट सत्यापन → कमांड इंजेक्शन | बाईपास के माध्यम से बिना प्रमाणीकरण के RCE तक पहुँचा गया |
UniFi OS Server 5.0.8 में ठीक किया गया।
हाँ। डिटेक्टर उत्पादन और मूल्यांकन उपयोग के लिए डिज़ाइन किया गया है:
GET है।VULNERABLE निर्णय के लिए आवश्यक है कि प्रमाणीकरण-बाईपास कमजोर हैंडलर तक पहुँचे और एक आधारभूत अनुरोध (समान एंडपॉइंट, बिना बाईपास) को सही ढंग से 401 के साथ अस्वीकार किया गया हो।UniFi OS अपनी सेवाओं को nginx के साथ सामने रखता है, जो एक उप-अनुरोध के माध्यम से प्रमाणीकरण लागू करता है। वह प्रमाणीकरण जाँच किसी भी अनुरोध को जिसका कच्चा URI /api/auth/validate-sso/ से शुरू होता है, सार्वजनिक मानती है, लेकिन nginx सामान्यीकृत URI का उपयोग करके बैकएंड पर रूट करता है (यह %2f→/ को प्रतिशत-डिकोड करता है और ../ को संकुचित करता है)। एक अनुरोध जैसे:
GET /api/auth/validate-sso/..%2f..%2f..%2fproxy/users/api/v2/ucs/update/latest_package
इसलिए इसे सार्वजनिक (कच्चा उपसर्ग) माना जाता है, फिर भी प्रमाणित आंतरिक पैकेज-अपडेट एंडपॉइंट (सामान्यीकृत पथ) पर रूट किया जाता है। बिना pkg_name के, वह एंडपॉइंट query param pkg_name required का उत्तर देता है — यह साबित करता है कि बाईपास काम करता है और कमजोर हैंडलर तक पहुँचा जा सकता है।
| प्रोब प्रतिक्रिया | निर्णय |
|---|---|
200 + हैंडलर त्रुटि मार्कर | VULNERABLE |
400 (nginx विचलन को अस्वीकार करता है) | PATCHED (5.0.8+) |
401, UniFi OS फिंगरप्रिंट मौजूद | INCONCLUSIVE (प्रमाणीकरण लागू / बाईपास अवरुद्ध) |
401, कोई UniFi OS फिंगरप्रिंट नहीं | UNAFFECTED (UniFi OS सर्वर नहीं) |
| कुछ और, कोई UniFi OS फिंगरप्रिंट नहीं | UNAFFECTED (UniFi OS सर्वर नहीं) |
| कुछ और, UniFi OS फिंगरप्रिंट मौजूद | INCONCLUSIVE (अप्रत्याशित प्रतिक्रिया) |
डिटेक्टर बाईपास के बिना समान एंडपॉइंट पर एक आधारभूत अनुरोध भी भेजता है और किसी होस्ट को कमजोर घोषित करने से पहले उसे 401 लौटाने की आवश्यकता होती है। जाँच सीधे कमजोर व्यवहार का परीक्षण करती है — VULNERABLE निर्णय का अर्थ है कि बाईपास वास्तव में सिंक तक पहुँच गया।
जब भी प्रोब सकारात्मक रूप से VULNERABLE या PATCHED की पुष्टि नहीं करता, डिटेक्टर रूट पेज प्राप्त करता है और UniFi OS प्रबंधन-पोर्टल फिंगरप्रिंट ( <title>UniFi OS</title>, window.UNIFI_OS_MANIFEST,id="portal-root", id="site-manager_portal-container") की तलाश करता है। यह 401 पर भी लागू होता है: एक UniFi OS होस्ट जो बाईपास पर प्रमाणीकरण लागू करता है वह INCONCLUSIVE है, लेकिन एक गैर-UniFi प्रॉक्सी जो बस सब कुछ 401 करता है, उसमें कोई फिंगरप्रिंट नहीं होता और इसे UNAFFECTED रिपोर्ट किया जाता है। इसलिए प्रत्येक "कमजोर नहीं" परिणाम फिंगरप्रिंट पर आधारित होता है: मार्कर मौजूद → INCONCLUSIVE; मार्कर अनुपस्थित → UNAFFECTED (CVE लागू नहीं होता)।
# single host (default port 11443)
./cve_2026_34908_check.py 192.168.1.10
# explicit port / URL forms
./cve_2026_34908_check.py host-a:11443 https://host-b
# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_34908_check.py -f targets.txt --brief
# machine-readable output for pipelines
./cve_2026_34908_check.py -f targets.txt --json > results.json
| फ़्लैग | विवरण |
|---|---|
targets | एक या अधिक host, host:port, या https://host:port |
-f, --targets-file FILE | एक फ़ाइल से लक्ष्य पढ़ें (प्रति पंक्ति एक; # टिप्पणियाँ) |
--brief | प्रति लक्ष्य एक संरेखित पंक्ति — कई होस्ट स्कैन करने के लिए आदर्श |
--json | संरचित JSON परिणाम उत्पन्न करें |
--timeout SECS | प्रति-अनुरोध समयबाह्य (डिफ़ॉल्ट: 10) |
--no-color | रंगीन आउटपुट अक्षम करें (NO_COLOR और गैर-TTY का भी सम्मान करता है) |
एक कमजोर कंसोल (विस्तृत, डिफ़ॉल्ट)। दूसरी पंक्ति निर्णय का विवरण है; [!] मार्कर और VULNERABLE TTY पर लाल रंग में दिखाई देते हैं:
$ ./cve_2026_34908_check.py 192.168.1.10
[!] 192.168.1.10:11443: VULNERABLE
auth bypass reached the vulnerable handler (no command executed); baseline correctly 401
एक पैच किया गया कंसोल (5.0.8+):
$ ./cve_2026_34908_check.py 192.168.1.11
[+] 192.168.1.11:11443: PATCHED
nginx rejected the normalized-path divergence (HTTP 400) — 5.0.8+ behavior
एक पुष्टि किया गया UniFi OS होस्ट जिसे प्रोब वर्गीकृत नहीं कर सका → INCONCLUSIVE। विवरण पंक्ति दो मामलों (प्रमाणीकरण लागू बनाम अप्रत्याशित प्रतिक्रिया) के बीच अंतर करती है:
$ ./cve_2026_34908_check.py 192.168.1.12 192.168.1.13
[?] 192.168.1.12:11443: INCONCLUSIVE
bypass blocked / auth enforced (HTTP 401) on a confirmed UniFi OS host — not confirmed vulnerable
[?] 192.168.1.13:11443: INCONCLUSIVE
UniFi OS detected, but probe returned an unexpected response: HTTP 302 text/html
एक होस्ट जो बिल्कुल UniFi OS नहीं है → UNAFFECTED (सलाह लागू नहीं होती):
$ ./cve_2026_34908_check.py 203.0.113.9:443
[-] 203.0.113.9:443: UNAFFECTED
no UniFi OS web fingerprint on / (probe HTTP 404) — target is not a UniFi OS Server
एक सूची स्कैन करें, प्रति होस्ट एक संरेखित पंक्ति (--brief)। यदि कोई होस्ट VULNERABLE है तो निकास स्थिति 1 है, अन्यथा 0 — स्क्रिप्ट में उपयोगी:
$ ./cve_2026_34908_check.py -f targets.txt --brief; echo "exit: $?"
VULNERABLE 192.168.1.10:11443
PATCHED 192.168.1.11:11443
INCONCLUSIVE 192.168.1.12:11443
UNAFFECTED 203.0.113.9:443
ERROR 10.0.0.1:11443 timeout
exit: 1
पाइपलाइनों के लिए मशीन-पठनीय आउटपुट (--json)। प्रत्येक परिणाम में verdict और उसके पीछे bypass.state/bypass.detail होता है; ERROR परिणामों में bypass के बजाय error फ़ील्ड होता है:
$ ./cve_2026_34908_check.py 192.168.1.10 192.168.1.11 10.0.0.1 --json
[
{
"target": "192.168.1.10:11443",
"bypass": {
"state": "vulnerable",
"detail": "auth bypass reached the vulnerable handler (no command executed); baseline correctly 401"
},
"verdict": "VULNERABLE"
},
{
"target": "192.168.1.11:11443",
"bypass": {
"state": "patched",
"detail": "nginx rejected the normalized-path divergence (HTTP 400) — 5.0.8+ behavior"
},
"verdict": "PATCHED"
},
{
"target": "10.0.0.1:11443",
"verdict": "ERROR",
"error": "timeout"
}
]
| निर्णय | अर्थ |
|---|---|
VULNERABLE | प्रमाणीकरण बाईपास बिना प्रमाणीकरण के कमजोर हैंडलर तक पहुँच गया। 5.0.8+ पर पैच करें। |
PATCHED | nginx ने सामान्यीकृत-पथ विचलन को अस्वीकार किया (5.0.8+ व्यवहार)। |
UNAFFECTED | रूट पेज पर कोई UniFi OS पोर्टल फिंगरप्रिंट नहीं — लक्ष्य UniFi OS सर्वर नहीं है, इसलिए सलाह लागू नहीं होती। उन होस्ट्स को शामिल करता है जो फिंगरप्रिंट के बिना 401 लौटाते हैं (जैसे, एक असंबंधित प्रॉक्सी जो सब कुछ अस्वीकार करता है)। |
INCONCLUSIVE | पुष्टि किया गया UniFi OS होस्ट जिसे वर्गीकृत नहीं किया जा सका — मैन्युअल रूप से संस्करण सत्यापित करें। निर्णय की विवरण पंक्ति बताती है कि कौन सा मामला है: (a) बाईपास अवरुद्ध था / प्रमाणीकरण लागू (401), या (b) प्रोब ने अप्रत्याशित प्रतिक्रिया लौटाई। |
ERROR | कनेक्शन/समयबाह्य/TLS विफलता। |