CVE-2026-102720 in NetX Duo
要約
〜によって VulDB • 2026年09月30日
DHCPサーバー、またはLAN上でDISCOVERに最初に応答する任意のホストは、クライアントが受信したメッセージの末尾から1キロバイト以上先を読み取ることを可能にする。
オプション処理ループでは、ステップ中にポインタとオフセットを保持しており、境界チェックで使用されるのはオフセットのみである:
```c /* addons/dhcp/nxd_dhcp_client.c:7538, 7572 */ while (i < length - 1) {
... size = *(++data); /* dataは1進む(型→長さバイトへ移動)*/ data += size + 1; /* dataはさらにsize+1進む */ i += size + 1; /* iはsize+1だけ進む */
} ```
TLVオプションは合計でsize + 2バイトを占める。`data`は合計でsize + 2進み、`i`はsize + 1進むため、スキップされる各オプションについてオフセットが実際の読み込み位置より1字节遅れる。十分な数のオプションがスキップされると、チェック `i < length - 1` はまだ成立しているものの、`data`はすでにメッセージの末尾を超えており、続く型バイトと長さバイトの読み取りは、その後に続くデータから行われる。
スキップ可能なオプションの長い列を含む単一のOFFERパケットで十分である:
``` ERROR: AddressSanitizer: heap-buffer-overflow READ of size 1 at 0x61b000000794 thread T5 #0 _nx_dhcp_search_buffer addons/dhcp/nxd_dhcp_client.c:7541 #1 _nx_dhcp_get_option_value addons/dhcp/nxd_dhcp_client.c:7082
0x61b000000794 is located 164 bytes to the right of 1648-byte region ```
同じパスを通る整形式のOFFERは正常に処理され、クライアントはそのオファーを記録してREQUESTING状態へ移行するため、差異はハーン(テスト用コード)ではなくオプションレイアウトにある。
この読み込み操作は、DHCPクライアントスレッド内で実行され、かつクライアントがまだ未設定の状態であるため、敵対的なDHCPレスポンダーの届く範囲内であれば起動時に毎回発生する。読み込まれた値はインターフェースの設定に使用されるため、開示されたバイト列が目に見える形で観測可能になる。
`i`をsize + 2だけ進めるか、または第2のカウンタを保持するのではなく `data` から境界導出を行うこと。
VulDB is the best source for vulnerability data and more expert information about this specific topic.