CVE-2026-31429
net: skb: KFENCE割り当てskbヘッドのクロスキャッシュ解放を修正
- 公開済み
- 2026/04/20
- 更新済み
- 2026/05/11
- CNA の割り当て
- Linux
- 観察された証拠
- 2026/08/25
プライマリ CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H低 · 今後 30 日間
- パーセンタイル
- 17.9%
- モデルの日付
- 2026/09/21
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
概要
Linuxカーネルにおいて、以下の脆弱性が解決されました:net: skb: KFENCE割り当てされたskbヘッドのクロスキャッシュ解放を修正 SKB_SMALL_HEAD_CACHE_SIZEは、汎用のkmallocバケットサイズとの衝突を避けるために、意図的に2の累乗ではない値(例:x86_64では704)に設定されています。これにより、skb_kfree_head()がskb_end_offsetを使用して、skb_small_head_cacheから割り当てられたskbヘッドと汎用のkmallocキャッシュを確実に区別できるようになります。 しかし、KFENCEが有効な場合、kfence_ksize()はスラブバケットサイズではなく、要求された正確な割り当てサイズを返します。呼び出し元(例:bpf_test_init)がkzalloc()を介してskbヘッドデータを割り当て、要求されたサイズが偶然SKB_SMALL_HEAD_CACHE_SIZEと等しい場合、slab_build_skb() -> ksize()はその正確な値を返します。skb_shared_infoのオーバーヘッドを差し引いた後、skb_end_offsetがSKB_SMALL_HEAD_HEADROOMと一致することになり、skb_kfree_head()がオブジェクトを元のkmallocキャッシュではなく誤ってskb_small_head_cacheに解放してしまい、スラブのクロスキャッシュ解放が発生します: kmem_cache_free(skbuff_small_head): Wrong slab cache. Expected skbuff_small_head but got kmalloc-1k これを修正するには、skb_kfree_head()で常にkfree(head)を呼び出します。これにより、解放パスが汎用的に保たれ、KFENCEオブジェクトに対するアロケータ固有の誤分類が回避されます。
ソース
1# CVE-2026-31429(Linux Kernel >= 6.3 < 6.12.82 Slab Cross-Cache Confusion)のPoC - Antonius - w1sdom - bluedragonsec.com によって発見された脆弱性
責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。