flawopen.com/Teardowns/cve-2026-76504-cisco-sdwan-api-authentication-bypass
CVE-2026-76504: omisión de autenticación en Cisco SD-WAN Manager
CVE-2026-76504 permite que un atacante remoto sin autenticar eluda una regla de autenticación de la API de Cisco Catalyst SD-WAN Manager y obtenga acceso de administrador. Cisco confirma explotación activa; actualiza a la versión corregida de tu rama e investiga el gestor antes de darlo por limpio.[1], [5]
Imagina una puerta protegida cuyo control de seguridad reconoce una sola forma escrita de su dirección. El atacante cambia la escritura mediante codificación URI, y una parte del sistema entiende que es la misma puerta mientras que la regla de seguridad no. Cisco afirma que esta discrepancia permitía saltarse la autenticación y acceder a la API como administrador. La corrección consiste en tratar la dirección de forma coherente y aplicar la misma regla de acceso; para los operadores, la solución admitida por Cisco es actualizar el software.[1]
Conceptos Clave y Términos
Codificación URI- Forma de representar caracteres de una ruta URL mediante bytes codificados con porcentaje. Todas las capas deben decodificar y comparar la ruta de manera coherente.[1], [7]
Omisión de autenticación- Una solicitud llega a una función protegida sin que el sistema establezca la identidad del solicitante como se exige.[1]
Regla de sesión de API- Regla del gestor que comprueba si una solicitud de API tiene una sesión autenticada válida antes de llegar al endpoint.[1]
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-177
- OWASP Top 10:2025 — A01:2025 Broken Access Control
- CISA KEV — añadido el 2026-09-30 — CVE-2026-76504
Análisis de Causa Raíz
Cisco atribuye CVE-2026-76504 al tratamiento incorrecto de la codificación URI en solicitudes HTTP dentro de la autenticación de sesión de la API de Catalyst SD-WAN Manager. Una solicitud manipulada puede eludir una regla que restringe un endpoint concreto de la API y obtener acceso como administrador. Cisco le asigna CVSS 3.1 9,8 Crítico, indica que el producto está afectado independientemente de la configuración y afirma que PSIRT conoció explotación activa en septiembre de 2026. El advisory muestra una solicitud URI codificada a j_security_check como ejemplo de IOC y advierte expresamente que puede usarse cualquier carácter codificado; no conviertas esa muestra en una firma de detección completa. Cisco no publica el código vulnerable ni el diff del parche, por lo que el par de código siguiente es un diseño ilustrativo de autorización, no código de Cisco ni una reproducción. Cisco enumera versiones corregidas por rama y dice que no hay una solución temporal que remedie por completo el fallo. Las restricciones de red y el escudo Live Protect son mitigaciones temporales; el escudo puede afectar inicios de sesión legítimos y no sustituye la actualización.[1], [5]
Versiones corregidas de CVE-2026-76504 por tipo de despliegue
| Despliegue / rama | Versión corregida | Acción requerida |
|---|---|---|
| Versiones locales anteriores a 20.9 | Migra a una rama compatible con una versión corregida publicada. | Migra; no permanezcas en una rama antigua sin soporte. |
| Rama local 20.9 | 20.9.10.1 | Actualiza todos los managers a esta versión o una posterior de la rama compatible. |
| Rama local 20.12 | 20.12.8.2 | Actualiza todos los managers a esta versión o una posterior de la rama compatible. |
| Rama local 20.15 | 20.15.6.1 | Actualiza todos los managers a esta versión o una posterior de la rama compatible. |
| Rama local 20.18 | 20.18.4.1 | Actualiza todos los managers a esta versión o una posterior de la rama compatible. |
| Rama local 26.1 | 26.1.2.1 | Actualiza todos los managers a esta versión o una posterior de la rama compatible. |
| Rama local 26.2 | 26.2.1 | Actualiza todos los managers a esta versión o una posterior de la rama compatible. |
| Cisco SD-WAN Cloud (Cisco Managed) | 20.15.605 o posterior; Cisco indica que el servicio alojado ya está corregido. | Confirma que se trata del servicio gestionado; sus clientes no deben realizar ninguna acción para este despliegue. |
Flujo de Ataque Paso a Paso
Una solicitud remota llega a la API del gestor
No se necesita cuenta ni interacción del usuario. La exposición a Internet aumenta el riesgo; Cisco indica que el fallo afecta independientemente de la configuración.[1]
La ruta codificada elude una regla de autenticación
Cisco identifica un tratamiento incoherente de la codificación URI en la autenticación de sesión de la API. La información pública no revela la implementación vulnerable.[1]
Código Fuente: Vulnerable vs. Seguro
Cisco no publica el código vulnerable ni el diff de la corrección. Este ejemplo Python muestra una regla general de diseño, no código de Cisco: el enrutamiento y la autorización deben usar un único destino de solicitud canónico y validado, y los endpoints protegidos deben exigir una identidad autenticada. Usa la semántica de normalización documentada por el router/framework; no añadas decodificación improvisada ni decodifiques rutas dos veces. La remediación admitida para CVE-2026-76504 es actualizar a la versión corregida de la rama indicada por Cisco.[1], [7]
Fragmento de origen: Ejemplo ilustrativo en Python de canonicalización URI y límite de autorización; no es código de Cisco
from urllib.parse import unquote, urlsplit
def dispatch(raw_target, session, routes):
# Una capa comprueba la ruta que aún está codificada.
path_for_auth = urlsplit(raw_target).path
if path_for_auth.startswith("/api/") and session is None:
raise PermissionError("authentication required")
# Una capa posterior decodifica antes de buscar la ruta. Las dos decisiones pueden no coincidir.
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()
Lista de Verificación de Seguridad para Ingeniería
- ✓Inventaría todos los Catalyst SD-WAN Manager, incluidos miembros de clúster y sitios de recuperación ante desastres; registra la rama y compilación exactas.[1], [2]
- ✓Actualiza cada gestor local a la primera versión corregida que Cisco indique dentro de su versión principal actual; no pases a una versión principal superior sin instrucciones explícitas del TAC. Las versiones anteriores a 20.9 deben migrarse a una rama corregida compatible, siguiendo las indicaciones de compatibilidad de Cisco.[1], [2]
- ✓Antes de actualizar, recopila archivos admin-tech con Log y Tech seleccionados de cada gestor, miembro de clúster y sitio DR; no esperes los resultados IOC para aplicar el parche.[2]
- ✓Abre un caso Cisco TAC Severity 3 con
CVE-2026-76504en el título y envía los archivos recopilados para revisar IOC; sigue la remediación del TAC si se confirma compromiso.[1], [2] - ✓Revisa
serviceproxy-access.logyvmanage-server.logpara solicitudesj_security_checkdesde direcciones desconocidas o no autorizadas y actividad inusual de cuentasviptela-reserved-;%6aes un ejemplo, no una firma completa.[1] - ✓Hasta actualizar todos los gestores, limita el acceso de administración a hosts de confianza y protege los componentes de control detrás de un dispositivo de filtrado; esto reduce temporalmente la exposición, pero no corrige el fallo.[1]
- ✓Usa el escudo Live Protect de Cisco solo como protección parcial temporal después de evaluar sus efectos en los inicios de sesión; programa igualmente la actualización del software.[1]
- ✓Para Cisco SD-WAN Cloud (Cisco Managed), verifica que el servicio indique la versión 20.15.605 o posterior; Cisco afirma que el despliegue gestionado no requiere acción del cliente.[1], [2]
Fuentes
- 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