FlawOpen

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

● CVE-2026-76504 · CVSS 9.8[1] · Kritisch
Sicherheitsforschung · FlawOpen

CVE-2026-76504: Authentifizierungsumgehung in Cisco SD-WAN Manager

CVE-2026-76504 ermöglicht einem nicht authentifizierten entfernten Angreifer, eine API-Authentifizierungsregel in Cisco Catalyst SD-WAN Manager zu umgehen und Administratorzugriff auf die API zu erlangen. Cisco bestätigt aktive Ausnutzung. Aktualisieren Sie auf die korrigierte Version Ihres Zweigs und untersuchen Sie den Manager, bevor Sie ihn als unbelastet einstufen.[1], [5]

CVSS-VektorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[1]
💡 Einfache Erklärung (ELI5)

Stellen Sie sich eine gesicherte Tür vor, deren Sicherheitsprüfung nur eine Schreibweise der Adresse erkennt. Ein Angreifer ändert die Schreibweise durch URI-Kodierung. Ein Teil des Systems erkennt dieselbe Tür, während die Sicherheitsregel sie anders behandelt. Laut Cisco konnte eine Anfrage dadurch die Authentifizierung umgehen und die API als Administrator erreichen. Die Behebung muss die Adresse einheitlich behandeln und dieselbe Zugriffsregel durchsetzen; für Betreiber ist das von Cisco unterstützte Mittel ein Software-Upgrade.[1]

Kernkonzepte & Begriffe

URI-Kodierung
Zeichen eines URL-Pfads werden als prozentkodierte Bytes dargestellt. Alle Schichten müssen den Pfad einheitlich dekodieren und vergleichen.[1], [7]
Authentifizierungsumgehung
Eine Anfrage erreicht eine geschützte Funktion, ohne dass das System die Identität des Aufrufers wie vorgeschrieben feststellt.[1]
API-Sitzungsregel
Die Manager-Regel prüft, ob eine API-Anfrage eine gültige authentifizierte Sitzung besitzt, bevor sie den Endpunkt erreicht.[1]
CWE-177
Unsachgemäße Verarbeitung von URL-Kodierung: Inkonsistente Verarbeitung kodierter URL-Daten kann eine Sicherheitsentscheidung unterlaufen. Cisco ordnet diese Schwäche der CVE zu.[1], [7]

Framework-Zuordnungen

Ursachenanalyse

Cisco führt CVE-2026-76504 auf die unsachgemäße Verarbeitung von URI-Kodierung in HTTP-Anfragen bei der sitzungsbasierten API-Authentifizierung von Catalyst SD-WAN Manager zurück. Eine präparierte Anfrage kann eine Regel umgehen, die einen bestimmten API-Endpunkt beschränkt, und Zugriff als Administrator erhalten. Cisco bewertet den Fehler mit CVSS 3.1 9,8 Kritisch, erklärt das Produkt unabhängig von der Systemkonfiguration für betroffen und berichtet, dass PSIRT im September 2026 von aktiver Ausnutzung erfuhr. Der Hinweis zeigt eine URI-kodierte Anfrage an j_security_check als IOC-Beispiel und warnt ausdrücklich, dass jedes einzelne URI-kodierte Zeichen verwendet werden kann; behandeln Sie dieses Beispiel nicht als vollständige Erkennungssignatur. Cisco veröffentlicht weder den verwundbaren Quellcode noch den Patch-Diff. Das folgende Codepaar ist daher ein illustrativer Autorisierungsentwurf, kein Cisco-Code und keine Reproduktion. Cisco nennt korrigierte Versionen je Zweig und erklärt, dass es keine vollständige Abhilfe gibt. Netzwerkbeschränkungen und der Live-Protect-Schutz sind temporäre Maßnahmen; der Schutz kann legitime Anmeldungen beeinträchtigen und ersetzt das Upgrade nicht.[1], [5]

Korrigierte Releases für CVE-2026-76504 nach Bereitstellung

Bereitstellung / ZweigKorrigiertes ReleaseErforderliche Maßnahme
On-Prem-Releases vor 20.9Zu einem unterstützten Zweig mit einem veröffentlichten korrigierten Release wechseln.Migrieren; nicht auf einem alten, nicht unterstützten Zweig verbleiben.
On-Prem-Zweig 20.920.9.10.1Jeden Manager auf dieses oder ein späteres Release des unterstützten Zweigs aktualisieren.
On-Prem-Zweig 20.1220.12.8.2Jeden Manager auf dieses oder ein späteres Release des unterstützten Zweigs aktualisieren.
On-Prem-Zweig 20.1520.15.6.1Jeden Manager auf dieses oder ein späteres Release des unterstützten Zweigs aktualisieren.
On-Prem-Zweig 20.1820.18.4.1Jeden Manager auf dieses oder ein späteres Release des unterstützten Zweigs aktualisieren.
On-Prem-Zweig 26.126.1.2.1Jeden Manager auf dieses oder ein späteres Release des unterstützten Zweigs aktualisieren.
On-Prem-Zweig 26.226.2.1Jeden Manager auf dieses oder ein späteres Release des unterstützten Zweigs aktualisieren.
Cisco SD-WAN Cloud (Cisco Managed)20.15.605 oder höher; laut Cisco ist der gehostete Dienst behoben.Prüfen, ob der verwaltete Dienst genutzt wird; für dessen Rollout ist keine Kundenaktion erforderlich.

Schritt-für-Schritt Angriffsablauf

Schritt 1

Eine entfernte Anfrage erreicht die Manager-API

Ein Konto oder eine Benutzeraktion ist nicht erforderlich. Internetzugriff erhöht das Risiko; laut Hersteller gilt die Schwachstelle unabhängig von der Konfiguration.[1]

Schritt 2

Ein URI-kodierter Pfad umgeht eine Authentifizierungsregel

Cisco nennt eine inkonsistente URI-Kodierung bei der API-Sitzungsauthentifizierung. Die öffentliche Dokumentation legt die verwundbare Implementierung nicht offen.[1]

Schritt 3

Die API behandelt die Anfrage als Administrator

Bei erfolgreicher Ausnutzung erhält der Angreifer Administratorrechte. Cisco bestätigt aktive Ausnutzung, veröffentlicht aber keine vollständige Folgeangriffskette.[1], [5]

Schritt 4

Aktualisieren und untersuchen

Sammeln Sie admin-tech-Dateien, aktualisieren Sie alle Manager auf die passende korrigierte Version und lassen Sie anschließend die Belege vom Cisco TAC prüfen. Warten Sie mit dem Upgrade nicht auf das TAC.[1], [2]

Quellcode: Verwundbar vs. Sicher

Cisco veröffentlicht weder den verwundbaren Quellcode noch den Patch-Diff. Dieses Python-Beispiel zeigt eine allgemeine Entwurfsregel, keinen Cisco-Code: Routing und Autorisierung müssen dasselbe validierte, kanonische Anfragenziel verwenden; geschützte Endpunkte müssen eine authentifizierte Identität verlangen. Verwenden Sie die dokumentierte Normalisierung des Routers/Frameworks und führen Sie keine Ad-hoc- oder doppelte Dekodierung ein. Die unterstützte Behebung für CVE-2026-76504 ist ein Upgrade auf die von Cisco für den Zweig angegebene korrigierte Version.[1], [7]

Quelltextauszug: Illustratives Python-Beispiel für URI-Kanonisierung und Autorisierungsgrenze; kein Cisco-Code

VERWUNDBARE IMPLEMENTIERUNG
from urllib.parse import unquote, urlsplit


def dispatch(raw_target, session, routes):
    # Eine Schicht prüft den noch codierten Pfad.
    path_for_auth = urlsplit(raw_target).path
    if path_for_auth.startswith("/api/") and session is None:
        raise PermissionError("authentication required")

    # Eine spätere Schicht dekodiert vor der Routensuche. Die beiden Entscheidungen können voneinander abweichen.
    route_path = unquote(path_for_auth)
    return routes[route_path]()
GEHÄRTETER SICHERHEITS-PATCH
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()

Checkliste für Engineering & Systemsicherheit

Quellen