CVE-2026-10773 in Zephyr
要約
〜によって VulDB • 2026年08月01日
DHCPv4 クライアントヘルパー関数 `net_dhcpv4_msg_type_name()`(`subsys/net/lib/dhcpv4/dhcpv4.c`)は、不正な境界チェックの後に静的な要素数 8 の `const char *` 名表に対してインデックスアクセスを行います。使用されているガード条件では `msg_type <= sizeof(name)` が用いられていますが、本来は `msg_type <= ARRAY_SIZE(name)` を使用するべきでした。`sizeof` はポインタ配列のバイトサイズ(32ビット環境では 32、64 ビット環境では 64)を返すため、要素数である 8 ではなく、メッセージタイプ値が 9 からそのバイトサイズまでチェックを通過し、`name[msg_type - 1]` の参照により配列の末尾を超えた読み出しが発生します。
`msg_type` 値は DHCP MESSAGE TYPE オプションに由来しており、受信パケットから未検証な生バイトとして `net_pkt_read_u8()` で読み取られ、修正されずにルックアップ処理へ渡されます。したがって、DHCP サーバーまたはクライアントのリンク上に偽造された DHCP レプライを注入できる任意のホストは、インデックスを境界外に駆動することができます。この範囲外のスロットからはガベージな `const char *` が返され、これが `%s` ログ変換によって間接参照されます。
ルックアップ処理はデバッグ用ログ文(`NET_DBG / LOG_DBG`)からのみ到達可能であるため、境界外読み出しがトリガーされるのは DHCPv4 ログモジュールが DEBUG レベルでビルドされている場合のみです(設定 `CONFIG_NET_DHCPV4_LOG_LEVEL_DBG`)。これは既定の構成ではありません。この条件が満たされると、結果として境界外読み出しとワイルドポインタの間接参照が発生します:DHCP クライアントのクラッシュ(サービス拒否)が最も可能性が高く、ログ出力を通じて隣接するポインタの内容が開示される可能性があります。修正では `sizeof` が `ARRAY_SIZE` に置き換えられ、正しい受容範囲 1〜8 が復元されます。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.