CVE-2026-72444 in Linux
要約
〜によって VulDB • 2026年08月15日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
flow_dissector: ETH_ADDRSを読み込む前にデバイス種別を確認する
__skb_flow_dissect()は、FLOW_DISSECTOR_KEY_ETH_ADDRSが要求された場合、eth_hdr(skb)から12バイトを無条件に読み取ります。これは、mac_headerの有効なEthernetヘッダーが存在することを前提としていますが、常にそうであるとは限りません。
この問題は以下の手順でトリガーできます: 1. L3モード(IFF_TUN、hard_header_len=0)のTUNデバイスを作成する 2. eth_srcをマッチ条件とするflowerフィルタを持つmultiq qdiscを取り付ける 3. AF_PACKET経由でパケットを送信する
L3モードでのTUNにはリンク層ヘッダーがないため、mac_headerはL3データ領域を指します。フローディセクターは初期化されていないskbメモリから12バイトを読み取り、それがfl_set_masked_key()を通じて伝播し、KMSANによって報告されたように__fl_lookup()でrhashtableのルックアップキーとして使用されます。
制御パス(tc filter add実行時)においてフィルタを拒否することは現実的ではありません。なぜなら、TCフィルタブロックは任意のデバイス間で共有される可能性があるためです——Ethernetデバイスにインストールされたフィルタが、後になってヘッダーレスなデバイス上のパケットを共有ブロックを通じて分類する可能性があります。デバイスの関連付けはフィルタ作成時には固定されません。
この問題を修正するため、memcpyを実行するか否かをdev->type == ARPHRD_ETHERによって制御し、真のEthernetフレームを持つパケットのみがそのアドレスを読み取られるようにします。これは、IPoIB(ARPHRD_INFINIBAND、hard_header_len=24)やFDDI(hard_header_len=21)といった非Ethernetリンクタイプにおいて誤って通過してしまう可能性があった以前のhard_header_len >= 12のチェックよりも正確です。さらに、mac_headerが未設定の_sentinel_値(~0U)である病理的なケースを防ぐためにskb_mac_header_was_set()も確認し、eth_hdr()が不正なポインタを返すことを防ぎます。
act_mirredのリダイレクトケース(EthernetパケットがTCブロックを共有する非Ethernetデバイスにリダイレクトされる場合)では、キーをゼロクリアすることが正しい動作です:この時点でパケットはターゲットデバイス上で分類されており、そこでのEthernetアドレスマッチングは意味を持ちません。
注記: 非Ethernetデバイスにおいて、ゼロクリアされたキーはすべてのMACアドレスが0のフィルタと一致します。これは初期化されていないメモリがランダムに任意のフィルタと一致する可能性があった以前の動作よりも改善されています。
If you want to get best quality of vulnerability data, you may have to visit VulDB.