【CVE-2024-50164】Linux KernelのBPF verifier脆弱性が発見、読み取り専用マップへの書き込みが可能に
スポンサーリンク
記事の要約
- Linuxカーネルの BPF verifierに脆弱性を発見
- 読み取り専用マップへの書き込みが可能になる問題を修正
- MEM_UNINITの意味の重複による脆弱性を解消
スポンサーリンク
Linux Kernelの BPF verifier脆弱性CVE-2024-50164
Linux Kernelの BPF verifierにおいて、読み取り専用として指定されたマップに対して書き込みが可能となる脆弱性【CVE-2024-50164】が2024年11月7日に公開された。この脆弱性は Lonialによって報告され、check_mem_size_reg()内でバッファサイズを含むレジスタが固定サイズでない場合に書き込みチェックが行われないという問題が発見された。[1]
この脆弱性は、MEM_UNINITが持つ2つの意味、すなわち「BPFヘルパーに渡されるバッファの初期化が不要」という本来の意味と「渡されたバッファに書き込みが行われる」という後から追加された意味が重複することで発生している。バウンダリーチェックは行われているものの、メモリへの書き込みチェックがバイパスされ、読み取り操作としてのみ扱われる問題が確認された。
対策として、MEM_UNINITを本来の意味に戻し、メモリへの書き込みを示す注釈としてMEM_WRITEを BPFヘルパーに追加することで、 BPF verifierによるメモリ書き込みチェックを正しく機能させる修正が実施された。この修正により、ARG_CONST_SIZEやARG_CONST_SIZE_OR_ZEROに対する check_arg_pair_ok()での検証が確実に行われるようになっている。
Linux Kernelのバージョン別影響範囲まとめ
項目 | 詳細 |
---|---|
影響を受けるバージョン | 5.19以降 |
影響を受けないバージョン | 5.19未満 |
修正済みバージョン | 6.6.59以降, 6.11.6以降, 6.12以降 |
修正コミット | 48068ccaea95, 54bc31682660, 8ea607330a39 |
報告者 | Lonial |
スポンサーリンク
BPF verifierについて
BPF verifierとは、Linuxカーネルにおける BPF(Berkeley Packet Filter)プログラムの安全性を検証するためのコンポーネントのことを指す。主な特徴として、以下のような点が挙げられる。
- BPFプログラムのメモリアクセスの安全性を検証
- バッファオーバーフローや不正なメモリ操作を防止
- カーネル空間での実行前にプログラムの妥当性を確認
BPF verifierは、メモリ境界チェックやアクセス権限の検証など、カーネルの安全性を担保するための重要な役割を果たしている。今回の脆弱性では、バッファサイズの検証とメモリ書き込み権限のチェックにおいて、MEM_UNINITの意味の重複により本来の検証がバイパスされる問題が発生した。
Linux Kernel BPF verifier脆弱性に関する考察
BPF verifierの脆弱性は、メモリ安全性に関する重要な問題を提起している。特にMEM_UNINITの意味の重複は、長年の機能追加による設計の複雑化が引き起こした典型的な例であり、セキュリティ機能の設計において明確な意味づけと一貫性の維持が重要であることを示している。
今後は同様の問題を防ぐため、BPFヘルパー関数の設計においてより厳密な意味の定義と検証が必要になるだろう。特に、メモリアクセスに関する属性や機能の追加時には、既存の機能との相互作用を慎重に評価し、意図しない副作用が発生しないよう注意を払う必要がある。
さらに、BPFプログラムの検証メカニズム全体の見直しも検討に値する。メモリアクセスの検証ロジックをより明確に分離し、各チェックの意図と効果を文書化することで、将来の機能拡張時にも一貫性のある安全な実装を維持できるようになるだろう。
参考サイト
- ^ CVE. 「CVE Record | CVE」. https://www.cve.org/CVERecord?id=CVE-2024-50164, (参照 24-11-27).
※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。
- 【CVE-2024-50300】Linux kernelのregulator rtq2208で未初期化使用の脆弱性を修正、複数バージョンで対策を実施
- 【CVE-2024-50301】Linuxカーネルで発見されたslab-out-of-bounds脆弱性、key_task_permissionの問題に対処完了
- 【CVE-2024-51669】WordPressプラグインDynamic Widgetsにクロスサイトリクエストフォージェリの脆弱性、バージョン1.6.5で修正完了
- 【CVE-2024-52392】WordPress W3SPEEDSTERプラグインにCSRF脆弱性、バージョン7.25以前のユーザーに影響
- 【CVE-2024-52595】lxml_html_cleanにXSS脆弱性、特殊タグでスクリプト実行が可能に
- 【CVE-2024-53043】Linuxカーネルのmctp i2cモジュールにNULLアドレス処理の脆弱性、セキュリティ更新で対処
- 【CVE-2024-53049】Linuxカーネルslub_kunitの警告問題が修正、システムの安定性向上に貢献
- Linux kernelのio_uringに脆弱性、フリーズ処理時のデッドロックリスクが判明
- 【CVE-2024-53053】LinuxカーネルでUFS CoreのRTCアップデート時のデッドロック問題が修正、システムの安定性向上へ
- 【CVE-2024-53056】Linux kernelのmediatekドライバーでNULLポインタ参照の脆弱性が発見され修正完了
スポンサーリンク