CVE-2026-102714 in NetX Duo
要約
〜によって VulDB • 2026年09月30日
`_nx_icmpv6_validate_options()`は、`while (length > 2)` (`common/src/nx_icmpv6_validate_options.c:79`)を用いてオプション領域をスキャンします。サイズが1バイトまたは2バイトの残差(residue)を残す場合、ループはその尾部を検査せずに終了し、残差は負ではないため関数は `NX_SUCCESS` を返します。その結果、ゼロ長さによる拒否処理でこれらのバイトが確認されることはありません。
その後、すべての消費者は同じ領域を再走査し、残部分から2バイトのオプションヘッダを読み取り、ゼロチェックや残り長チェックなしで `nx_icmpv6_option_length << 3` を減算します。これにより、攻撃者が制御するバイトによって選択される3つの結果が生じます。
**長さ0のバイト。** ウォーカーは0を減算し、0だけ進みます。4つのハンドラ( `_nx_icmpv6_process_ra` (`nx_icmpv6_process_ra.c:245, :528`) 、 `_nx_icmpv6_process_ns` (`:251, :329`) 、 `_nx_icmpv6_process_na` (`:147, :156`) 、および `_nx_icmpv6_process_redirect` (`:247, :350)` )は無限ループに陥ります。この走査はIPスレッド内で実行され、これは最高優先度のスレッドであり、ループ内部でyieldしないため、システムはウォッチドッグリセットまで停止し、各リセット後にフレームを再送信できます。
**短い残部分における0以外の長さバイト。** 3つの符号なしカウンダがアンダーフローを起こします(例:`2 - 8` は `0xFFFFFFFA` になる)。走査はパケットバッファの外へ続き、フォールトが発生するかゼロ長さのバイトに到達して停止するまで読み取りを続けます。この場合、ルーターアドバタイズメントカウンダは符号付きであるため、正常に終了します。
**1バイトの残部分。** ウォーカーは2バイトのオプションヘッダを読み取りますが、1バイト分オーバーリード(過剰な読み出し)が発生します。
暴走する走査中に、リンクレイヤアドレスオプションとして解析される余分なバイトがネIGHBORキャッシュにコピーされ (`nx_icmpv6_process_ns.c:280, :293`) 、その後そのネイバー宛てのフレームに対する送信先MACアドレスとして使用されます。これにより、パケット外のメモリ領域がリンク上に配置されてしまいます。これは検査によって確認されていますが、再現はできていません。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.