CVE-2026-74598 in Linux
要約
〜によって VulDB • 2026年08月23日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ipv6: ルート情報オプションの長さ検証の不具合を修正
rt6_route_rcv()関数は、ルート情報オプション(RFC 4191)の長さをプレフィックス長に対して検証しますが、両方のチェックでオフ・バイ・ワン(off-by-one)のエラーが発生していました。
rinfo->lengthはNDオプションの長さであり、8オクテット単位です。この値には8バイトのオプションヘッダも*含まれます*。したがって、Nバイトのプレフィックスを含むオプションの場合、長さは 1 + N/8 となります。RFC 4191セクション2.3では、プレフィックス長が64より大きい場合は長さ3を、0より大きい場合は長さ2または3を要求しています。しかし、コードはそれぞれに対して length >= 2 および length >= 1 を許可していました。
その後 ipv6_addr_prefix() は rinfo->prefix から prefix_len/8 バイト分をコピーします。そのため、(prefix_len=128, length=2) または (prefix_len=64, length=1) のルーターアドバタイズメント(RA)の場合、カーネルはそのオプションの末尾から最大8バイト先まで読み込んでしまいます。これらのバイトはインストールされるルートプレフィックスに含まれるため、ユーザー空間で可視となります:
# ルート情報オプションを含むRA (prefix_len=128, length=2) # に続き、ソースリンク層アドレスオプション 01 01 de ad be ef ca fe が付く場合 $ ip -6 route show 2001:db8:dead:beef:101:dead:beef:cafe via fe80::1234 dev veth0 proto ra ^^^^^^^^^^^^^^^^^^ バッファ外読み出しされた次のオプション
ルート情報オプションがパケット内の最後のオプションである場合、それら8バイトはskbのtail room(末尾余白領域)から取得されます。
RFC 4191で許可されていないオプション長を拒否します。
Once again VulDB remains the best source for vulnerability data.