公開:

【CVE-2024-50163】LinuxカーネルのBPFリダイレクトフラグ重複問題が修正、クラッシュのリスクを解消

text: XEXEQ編集部
(記事は執筆時の情報に基づいており、現在では異なる場合があります)


記事の要約

  • Linuxカーネルでbpf_redirect_infoの脆弱性を修正
  • SKBとXDPリダイレクトパスで同一フラグ値使用による問題
  • 重複しないフラグ定義によってクラッシュを防止

LinuxカーネルのBPFリダイレクトフラグの脆弱性【CVE-2024-50163】

kernel.orgは2024年11月7日、LinuxカーネルのBPF(Berkeley Packet Filter)機能において、内部フラグとUAPIフラグの重複による脆弱性を公開した。BF_F_BROADCASTとBPF_F_NEXTHOPが同一の数値を使用していたため、SKBとXDPのリダイレクトパスで混乱が生じてクラッシュする可能性があることが判明している。[1]

この問題は、skb bpf_redirect_neigh()が非NULL引数で使用され、その後同じbpf_redirect_info構造体でXDPリダイレクトが実行された場合に発生する可能性があった。syzbotによってこの問題が検出され、スタック割り当てのbpf_redirect_infoによってSKBとXDPパス間での構造体共有が解消されている。

kernel.orgはこの脆弱性を修正するため、BPF_F_REDIRECT_INTERNALの3つのフラグをXDPで使用されるフラグと重複しないように再定義した。さらに、誤って重複が再導入されることを防ぐためにBUILD_BUG_ON()チェックも追加されている。

LinuxカーネルのBPF脆弱性の修正状況

バージョン ステータス
5.14以前 影響なし
5.15.170以降 修正済み
6.1.115以降 修正済み
6.6.59以降 修正済み
6.11.6以降 修正済み
6.12以降 修正済み

BPFについて

BPF(Berkeley Packet Filter)とは、Linuxカーネル内でパケットフィルタリングやネットワークの監視を行うための強力な機能だ。主な特徴として、以下のような点が挙げられる。

  • カーネル空間でのプログラム実行が可能
  • 高性能なパケットフィルタリングを実現
  • セキュリティ機能の実装に広く活用

BPFはネットワークパケットの処理において、SKB(Socket Buffer)とXDP(eXpress Data Path)という2つの主要なパスを持っている。SKBはLinuxネットワークスタックの中核的なデータ構造であり、XDPは高性能なパケット処理を実現するための仕組みとなっている。

LinuxカーネルのBPF機能修正に関する考察

今回の脆弱性修正は、BPFの内部実装における重要な問題を解決しただけでなく、将来的な設計の改善にも貢献している。特にBUILD_BUG_ON()チェックの導入は、同様の問題が再発することを防ぐための予防的な対策として評価できるだろう。

しかし、BPFの機能が拡張され続ける中で、内部フラグと外部APIの整合性維持は今後も重要な課題となる。特にパフォーマンスとセキュリティのバランスを取りながら、APIの後方互換性を維持することは開発者にとって大きな課題となるはずだ。

今後はBPFの機能拡張に伴い、より体系的なフラグ管理システムの導入が望まれる。また、自動化されたテストツールによる潜在的な問題の早期発見と、開発者コミュニティによる継続的なコードレビューが、BPFの安定性向上に重要な役割を果たすだろう。

参考サイト

  1. ^ CVE. 「CVE Record | CVE」. https://www.cve.org/CVERecord?id=CVE-2024-50163, (参照 24-11-27).

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「セキュリティ」に関するコラム一覧「セキュリティ」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。