FlawOpen

flawopen.com/Teardowns/cve-2026-76504-cisco-sdwan-api-authentication-bypass

● CVE-2026-76504 · CVSS 9.8[1] · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-76504: Cisco SD-WAN Manager में प्रमाणीकरण बाइपास

CVE-2026-76504 से बिना प्रमाणीकरण वाला दूरस्थ हमलावर Cisco Catalyst SD-WAN Manager के API प्रमाणीकरण नियम को बाइपास करके व्यवस्थापक अधिकारों से API तक पहुँच सकता है। Cisco ने सक्रिय शोषण की पुष्टि की है; अपनी शाखा के सुधारे गए संस्करण पर अपग्रेड करें और सिस्टम को सुरक्षित मानने से पहले Manager की जाँच करें।[1], [5]

CVSS वेक्टरCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[1]
💡 आसान भाषा में (ELI5)

एक ऐसे सुरक्षित दरवाज़े की कल्पना करें जिसकी जाँच केवल पते की एक लिखावट पहचानती है। हमलावर URI encoding से लिखावट बदलता है; सिस्टम का एक हिस्सा उसे वही दरवाज़ा मानता है, जबकि सुरक्षा नियम ऐसा नहीं करता। Cisco के अनुसार इस अंतर से अनुरोध प्रमाणीकरण को छोड़कर व्यवस्थापक के रूप में API तक पहुँच सकता था। सुधार में पते को एकसमान ढंग से संभालना और वही पहुँच नियम लागू करना चाहिए; ऑपरेटरों के लिए Cisco का समर्थित उपाय सॉफ़्टवेयर अपग्रेड है।[1]

इस पेज के मुख्य शब्द

URI encoding
URL path के अक्षरों को percent-encoded bytes से दर्शाने का तरीका। सभी परतों को path को एकसमान ढंग से decode और compare करना चाहिए।[1], [7]
प्रमाणीकरण बाइपास
अनुरोध किसी सुरक्षित फ़ंक्शन तक पहुँच जाता है, जबकि सिस्टम आवश्यक तरीके से अनुरोधकर्ता की पहचान स्थापित नहीं करता।[1]
API session rule
Manager का नियम जो endpoint तक पहुँचने से पहले जाँचता है कि API अनुरोध के पास वैध प्रमाणीकृत session है या नहीं।[1]
CWE-177
URL encoding का अनुचित प्रबंधन: encoded URL data को असंगत ढंग से संभालने से सुरक्षा निर्णय कमजोर हो सकता है। Cisco ने यह कमजोरी इस CVE को दी है।[1], [7]

फ्रेमवर्क मैपिंग

मूल कारण विश्लेषण (Root Cause)

Cisco के अनुसार CVE-2026-76504 का कारण Catalyst SD-WAN Manager के API session-आधारित प्रमाणीकरण में HTTP अनुरोधों के URI encoding का अनुचित प्रबंधन है। विशेष रूप से बनाया गया अनुरोध किसी विशिष्ट API endpoint को सीमित करने वाले प्रमाणीकरण नियम को बाइपास करके व्यवस्थापक के रूप में पहुँच पा सकता है। Cisco ने इसे CVSS 3.1 9.8 Critical रेट किया, कहा कि सिस्टम configuration की परवाह किए बिना उत्पाद प्रभावित है, और बताया कि PSIRT को सितंबर 2026 में सक्रिय शोषण का पता चला। Advisory में URI-encoded j_security_check अनुरोध IOC के उदाहरण के रूप में है और स्पष्ट चेतावनी है कि URI में encode किया गया कोई भी एक अक्षर इस्तेमाल किया जा सकता है; इस उदाहरण को पूर्ण detection signature न मानें। Cisco vulnerable source या patch diff प्रकाशित नहीं करता, इसलिए नीचे दिया code pair authorization design का उदाहरण है, Cisco का code या reproduction नहीं। Cisco शाखा के अनुसार fixed releases देता है और कहता है कि समस्या का पूरा समाधान करने वाला कोई workaround नहीं है। Network restriction और Live Protect shield अस्थायी mitigation हैं; shield वैध login को प्रभावित कर सकता है और upgrade का विकल्प नहीं है।[1], [5]

डिप्लॉयमेंट के अनुसार CVE-2026-76504 के ठीक किए गए संस्करण

डिप्लॉयमेंट / शाखाठीक किया गया संस्करणज़रूरी कार्रवाई
20.9 से पुराने ऑन-प्रिमाइज़ रिलीज़प्रकाशित सुधार वाले समर्थित संस्करण पर माइग्रेट करें।माइग्रेट करें; पुराने असमर्थित संस्करण पर न रहें।
ऑन-प्रिमाइज़ 20.9 शाखा20.9.10.1हर Manager को इस या समर्थित शाखा के बाद के संस्करण पर अपडेट करें।
ऑन-प्रिमाइज़ 20.12 शाखा20.12.8.2हर Manager को इस या समर्थित शाखा के बाद के संस्करण पर अपडेट करें।
ऑन-प्रिमाइज़ 20.15 शाखा20.15.6.1हर Manager को इस या समर्थित शाखा के बाद के संस्करण पर अपडेट करें।
ऑन-प्रिमाइज़ 20.18 शाखा20.18.4.1हर Manager को इस या समर्थित शाखा के बाद के संस्करण पर अपडेट करें।
ऑन-प्रिमाइज़ 26.1 शाखा26.1.2.1हर Manager को इस या समर्थित शाखा के बाद के संस्करण पर अपडेट करें।
ऑन-प्रिमाइज़ 26.2 शाखा26.2.1हर Manager को इस या समर्थित शाखा के बाद के संस्करण पर अपडेट करें।
Cisco SD-WAN Cloud (Cisco Managed)20.15.605 या नया; Cisco के अनुसार hosted service ठीक है।पुष्टि करें कि आप managed service उपयोग करते हैं; hosted rollout के लिए ग्राहक कार्रवाई आवश्यक नहीं है।

हमले का चरण-दर-चरण प्रवाह

चरण 1

दूरस्थ अनुरोध Manager API तक पहुँचता है

Account या user interaction आवश्यक नहीं है। Internet exposure जोखिम बढ़ाता है; vendor कहता है कि configuration से फर्क नहीं पड़ता।[1]

चरण 2

URI-encoded path प्रमाणीकरण नियम को बाइपास करता है

Cisco API session authentication में URI encoding की असंगत handling बताता है। सार्वजनिक सामग्री vulnerable implementation नहीं दिखाती।[1]

चरण 3

API अनुरोध को व्यवस्थापक की तरह मानता है

सफल exploitation से admin अधिकार मिलते हैं। Cisco सक्रिय शोषण की पुष्टि करता है, लेकिन पहुँच के बाद की पूरी chain प्रकाशित नहीं करता।[1], [5]

चरण 4

अपग्रेड करें और जाँच करें

admin-tech files एकत्र करें, सभी Managers को उपयुक्त fixed release पर अपग्रेड करें, फिर Cisco TAC से सबूत जाँचने को कहें। TAC का इंतज़ार करके अपग्रेड न रोकें।[1], [2]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

Cisco vulnerable source code या patch diff प्रकाशित नहीं करता। यह Python उदाहरण सामान्य design rule दिखाता है, Cisco code नहीं: routing और authorization में एक ही validated canonical request target इस्तेमाल करें और protected endpoints पर authenticated identity अनिवार्य करें। Router/framework के documented normalization semantics का पालन करें; ad hoc decoding या double decoding न जोड़ें। CVE-2026-76504 का समर्थित समाधान Cisco द्वारा शाखा के लिए बताए गए fixed release पर upgrade करना है।[1], [7]

सोर्स अंश: URI canonicalization और authorization boundary का Python उदाहरण; Cisco source code नहीं

कमज़ोर कार्यान्वयन
from urllib.parse import unquote, urlsplit


def dispatch(raw_target, session, routes):
    # एक लेयर अभी भी एन्कोडेड पथ की जाँच करती है।
    path_for_auth = urlsplit(raw_target).path
    if path_for_auth.startswith("/api/") and session is None:
        raise PermissionError("authentication required")

    # बाद की लेयर रूट खोजने से पहले डिकोड करती है। दोनों निर्णय अलग हो सकते हैं।
    route_path = unquote(path_for_auth)
    return routes[route_path]()
सुरक्षित और सुदृढ़ फ़िक्स
import re
from urllib.parse import unquote, urlsplit


def canonical_path(raw_target):
    raw_path = urlsplit(raw_target).path
    if re.search(r"%(?![0-9A-Fa-f]{2})", raw_path):
        raise ValueError("malformed URI encoding")

    path = unquote(raw_path, errors="strict")
    if "%" in path or "\\" in path:
        raise ValueError("ambiguous path encoding")
    if any(part in {".", ".."} for part in path.split("/")):
        raise ValueError("path traversal segment")
    return path


def dispatch(raw_target, session, routes):
    path = canonical_path(raw_target)  # Decode and validate exactly once.
    route = routes.get(path)
    if route is None:
        raise LookupError("route not found")

    requires_authentication, handler = route
    if requires_authentication and session is None:
        raise PermissionError("authentication required")
    return handler()

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत