CVE-2026-64114 in Linux情報

要約

〜によって VulDB • 2026年07月20日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

ipv4: raw: ihl < 5 の IP_HDRINCL パケットを拒否する

raw_send_hdrinc() は、呼び出し元が指定したIPv4ヘッダーがメッセージ長内に収まることを検証します。

iphlen = iph->ihl * 4; err = -EINVAL; if (iphlen > length) goto error_free;

if (iphlen >= sizeof(*iph)) {
/* saddr, tot_len, id, csum, transport_header を修正 */ }

しかし、ihl < 5 のパケットは拒否されません。そのようなパケットの場合、「if (iphlen >= sizeof(*iph))」の分岐がスキップされ、作成された iphdr はそのまま残ったままになりますが、パケットはまだ __ip_local_out() に渡されて以降のプロセスに進みます。iph->ihl を読み込む下流コンシューマは健全な値を前提としています:特に net/ipv4/ah4.c:ah_output() では、top_iph->ihl * 4 から sizeof(struct iphdr) を減算し、その結果(符号付き整数の負数から size_t にキャストされたもの)を memcpy() に渡すことで、SIZE_MAX に近い長さの OOB アクセスが発生し、ホストカーネルパニックを引き起こします。

ihl < 5 のIPv4ヘッダーは定義により不正な形式です(RFC 791: 「インターネットヘッダー長は32ビット単位でのインターネットヘッダーの長さである...正しいヘッダーの最小値は5に注意してください。」)。カーネルがそのようなパケットを自身の出力パスに注入してはいけません。

既存の「iphlen > length」チェックに加えて、「iphlen < sizeof(*iph)」も拒否します。これは、ローカルで構築されたパケットがIPスタックに入り直す場合でも、外部からのパケットに対して適用される基本的な健全性テストを同じように通過しなければならないという原則に合致しています。

この修正がマージされると、「if (iphlen >= sizeof(*iph))」のラッパーは修正分岐周りで冗長になります。パッチを最小限にしバックポートしやすくするために、そのまま残されています。後続のパッチでこれを解除できます。

コミット 86f4c90a1c5c(「ipv4, ipv6: raw socket メッセージがIPヘッダーを持てるように十分に大きいか確認する」)はメッセージバッファーが iphdr を保持するのに十分な大きさであることを保証しますが、自己報告された iph->ihl の値には制限を設けていません。

到達可能性:不正なパケットの送信元は CAP_NET_RAW を持つすべての呼び出し元であり、これには CONFIG_USER_NS=y 付きのカーネル上のユーザー+net名前空間内の非特権プロセスが含まれます。再現されたAHクラッシュには、出力ルート上に一致する xfrm AH ポリシーも必要です;CAP_NET_ADMIN が付与されたコンテナは、その netns でそのような状態とポリシーをインストールできます。ループバックは xfrm_output をバイパスするため、トリガーには実際のネットワークデバイスが使用されます。

UML + KASAN 上で再現:addr 0x0 でカーネルモードフォルトが発生し、クラッシュサイトでは memcpy_orig が呼び出されていました。同じ形状のケースが、標準ディストリビューションカーネル上の rootless Docker コンテナ(--cap-add NET_ADMIN付き)内でも再現しました。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

責任者

Linux

予約する

2026年07月19日

モデレーション

承諾済み

エントリ

VDB-380228

EPSS

0.00000

アクティビティ

低い

ソース

Do you want to use VulDB in your project?

Use the official API to access entries easily!