flawopen.com/Teardowns/cve-2026-76504-cisco-sdwan-api-authentication-bypass
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]
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]
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-177
- OWASP Top 10:2025 — A01:2025 Broken Access Control
- CISA KEV — ajouté le 2026-09-30 — CVE-2026-76504
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 / branche | Version corrigée | Action requise |
|---|---|---|
| Versions sur site antérieures à 20.9 | Migrer 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.9 | 20.9.10.1 | Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge. |
| Branche sur site 20.12 | 20.12.8.2 | Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge. |
| Branche sur site 20.15 | 20.15.6.1 | Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge. |
| Branche sur site 20.18 | 20.18.4.1 | Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge. |
| Branche sur site 26.1 | 26.1.2.1 | Mettre à niveau chaque manager vers cette version ou une version ultérieure de la branche prise en charge. |
| Branche sur site 26.2 | 26.2.1 | Mettre à 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
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]
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]
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
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]()
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
- ✓Inventoriez chaque Catalyst SD-WAN Manager, y compris les membres de cluster et les sites de reprise après sinistre ; notez la branche et le build exacts.[1], [2]
- ✓Mettez chaque gestionnaire sur site à la première version corrigée indiquée par Cisco dans sa version majeure actuelle ; ne passez pas à une version majeure supérieure sans consigne explicite du TAC. Les versions antérieures à 20.9 doivent migrer vers une branche corrigée prise en charge, conformément aux consignes de compatibilité de Cisco.[1], [2]
- ✓Avant la mise à niveau, collectez les fichiers admin-tech avec Log et Tech activés pour chaque gestionnaire, membre de cluster et site DR ; n’attendez pas les résultats IOC pour appliquer le correctif.[2]
- ✓Ouvrez un dossier Cisco TAC Severity 3 avec
CVE-2026-76504dans le titre et transmettez les fichiers collectés pour analyse IOC ; suivez les instructions TAC si une compromission est détectée.[1], [2] - ✓Examinez
serviceproxy-access.logetvmanage-server.logpour les requêtesj_security_checkprovenant d’adresses inconnues ou non autorisées et les activités anormales des comptesviptela-reserved-;%6an’est qu’un exemple, pas une signature exhaustive.[1] - ✓Jusqu’à la mise à niveau de tous les gestionnaires, limitez l’accès de gestion aux hôtes de confiance et placez les composants de contrôle derrière un dispositif de filtrage ; cela réduit temporairement l’exposition sans corriger la faille.[1]
- ✓N’utilisez le bouclier Cisco Live Protect que comme protection partielle temporaire après évaluation de ses effets sur les connexions ; planifiez quand même la mise à niveau logicielle.[1]
- ✓Pour Cisco SD-WAN Cloud (Cisco Managed), vérifiez que le service indique la version 20.15.605 ou ultérieure ; Cisco précise que son déploiement géré ne demande aucune action client.[1], [2]
Sources
- Cisco Security Advisory — CVE-2026-76504
- Cisco remediation workflow for the September 2026 SD-WAN advisory
- Cyber Security Agency of Singapore active-exploitation advisory
- Canadian Centre for Cyber Security advisory AV26-978
- CISA Known Exploited Vulnerabilities Catalog — CVE-2026-76504
- NVD record — CVE-2026-76504
- MITRE CWE-177 — Improper Handling of URL Encoding