FlawOpen

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

● CVE-2026-76504 · CVSS 9.8[1] · Critique
Recherche · FlawOpen

CVE-2026-76504 : contournement d’authentification dans Cisco SD-WAN Manager

CVE-2026-76504 permet à un attaquant distant non authentifié de contourner une règle d’authentification de l’API Cisco Catalyst SD-WAN Manager et d’obtenir un accès administrateur à l’API. Cisco confirme une exploitation active ; installez la version corrigée de votre branche et recherchez des signes de compromission avant de considérer le gestionnaire comme sain.[1], [5]

Vecteur CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[1]
💡 Explication en Langage Simple (ELI5)

Imaginez une porte protégée dont le contrôle de sécurité ne reconnaît qu’une seule écriture de son adresse. L’attaquant modifie cette écriture avec l’encodage URI : une partie du système reconnaît la même porte, mais la règle de sécurité ne le fait pas. Selon Cisco, ce désaccord permettait à une requête de contourner l’authentification et d’accéder à l’API en tant qu’administrateur. La correction consiste à traiter l’adresse de façon cohérente et à appliquer la même règle d’accès ; pour les exploitants, le correctif pris en charge par Cisco est une mise à niveau logicielle.[1]

Concepts Clés et Termes

Encodage URI
Représentation de caractères d’un chemin URL sous forme d’octets encodés en pourcentage. Toutes les couches doivent décoder et comparer le chemin de façon cohérente.[1], [7]
Contournement d’authentification
Une requête atteint une fonction protégée sans que le système établisse l’identité de son auteur comme requis.[1]
Règle de session API
Règle du gestionnaire qui vérifie qu’une requête API possède une session authentifiée valide avant d’atteindre un endpoint.[1]
CWE-177
Mauvaise gestion de l’encodage d’URL : un traitement incohérent des données URL encodées peut invalider une décision de sécurité. Cisco attribue cette faiblesse au CVE.[1], [7]

Correspondances de référentiels

Analyse de Cause Racine

Cisco attribue CVE-2026-76504 à une mauvaise gestion de l’encodage URI dans les requêtes HTTP de l’authentification de session API de Catalyst SD-WAN Manager. Une requête spécialement conçue peut contourner une règle qui restreint un endpoint API précis et obtenir un accès administrateur. Cisco attribue CVSS 3.1 9,8 Critique au problème, indique que le produit est affecté quelle que soit sa configuration et rapporte que le PSIRT a eu connaissance d’une exploitation active en septembre 2026. L’avis montre une requête encodée vers j_security_check comme exemple d’IOC et précise que n’importe quel caractère URI encodé peut être utilisé ; ne traitez pas cet exemple comme une signature de détection complète. Cisco ne publie ni le code vulnérable ni le diff du correctif : la paire de code ci-dessous illustre une conception d’autorisation, sans représenter le code Cisco ni une reproduction. Cisco indique les versions corrigées par branche et précise qu’aucun contournement ne corrige entièrement la faille. Les restrictions réseau et le bouclier Live Protect sont des mesures temporaires ; le bouclier peut perturber les connexions légitimes et ne remplace pas la mise à niveau.[1], [5]

Versions corrigées de CVE-2026-76504 selon le déploiement

Déploiement / brancheVersion corrigéeAction requise
Versions sur site antérieures à 20.9Migrer vers une branche prise en charge disposant d’une version corrigée publiée.Migrer ; ne pas rester sur une ancienne branche non prise en charge.
Branche sur site 20.920.9.10.1Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge.
Branche sur site 20.1220.12.8.2Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge.
Branche sur site 20.1520.15.6.1Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge.
Branche sur site 20.1820.18.4.1Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge.
Branche sur site 26.126.1.2.1Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge.
Branche sur site 26.226.2.1Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge.
Cisco SD-WAN Cloud (Cisco Managed)20.15.605 ou ultérieure ; Cisco indique que le service hébergé est corrigé.Confirmer qu’il s’agit du service géré ; aucune action client n’est requise pour son déploiement.

Déroulement de l'Attaque Étape par Étape

Étape 1

Une requête distante atteint l’API du gestionnaire

Aucun compte ni interaction utilisateur n’est nécessaire. L’exposition à Internet augmente le risque ; le fournisseur indique que la configuration n’y change rien.[1]

Étape 2

Le chemin URI encodé contourne une règle d’authentification

Cisco identifie un traitement incohérent de l’encodage URI dans l’authentification de session API. Les informations publiques ne révèlent pas l’implémentation vulnérable.[1]

Étape 3

L’API traite la requête comme administrateur

Une exploitation réussie accorde les privilèges administrateur. Cisco confirme l’exploitation active sans publier de chaîne complète après l’accès.[1], [5]

Étape 4

Mettez à niveau et enquêtez

Collectez les fichiers admin-tech, mettez tous les gestionnaires à la bonne version corrigée, puis demandez à Cisco TAC d’examiner les preuves. N’attendez pas TAC pour mettre à niveau.[1], [2]

Code Source : Vulnérable vs Sécurisé

Cisco ne publie ni le code vulnérable ni le diff du correctif. Cet exemple Python montre une règle de conception générale, pas du code Cisco : routage et autorisation doivent utiliser une seule cible de requête canonique et validée, et les endpoints protégés doivent exiger une identité authentifiée. Utilisez les règles de normalisation documentées du routeur/framework ; n’ajoutez pas de décodage ad hoc et ne décodez pas les chemins deux fois. La remédiation prise en charge pour CVE-2026-76504 consiste à installer la version corrigée de la branche indiquée par Cisco.[1], [7]

Extrait source: Exemple illustratif en Python de canonicalisation URI et de frontière d’autorisation ; pas le code Cisco

IMPLÉMENTATION VULNÉRABLE
from urllib.parse import unquote, urlsplit


def dispatch(raw_target, session, routes):
    # Une couche vérifie le chemin encore encodé.
    path_for_auth = urlsplit(raw_target).path
    if path_for_auth.startswith("/api/") and session is None:
        raise PermissionError("authentication required")

    # Une couche ultérieure décode avant la recherche de route. Les deux décisions peuvent diverger.
    route_path = unquote(path_for_auth)
    return routes[route_path]()
PATCH SÉCURISÉ ET ROBUSTE
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()

Liste de Contrôle de Sécurité pour l'Ingénierie

Sources