公開:

【CVE-2024-49949】Linuxカーネルのqdisc_pkt_len_init()に脆弱性、複数バージョンで修正パッチを提供

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


記事の要約

  • Linuxカーネルにqdisc_pkt_len_init()の脆弱性が発見
  • maliciousなGSOパケットによるカーネルクラッシュの可能性
  • 複数のLinuxバージョンで修正パッチが適用

Linuxカーネルのqdisc_pkt_len_init()における脆弱性の発見

Linuxカーネルのvirtio_net_hdr_to_skb()において、ユーザー空間からの悪意のあるGSOパケットを検出する機能が2024年10月21日に実装された。CF9ACC90C80ECコミットによってUFOの修正が行われたものの、特定のGSOパケット特性により新たな脆弱性が発見されている。[1]

この脆弱性では、IPv4 SKB_GSO_UDPとgso_size=3、skb->len=28の特性を持つGSOパケットを利用することで、qdisc_pkt_len_init()内でhdr_lenがskb->lenと一致してしまう問題が発生する。gso_segsが0に設定されることで、qdisc_skb_cb(skb)->pkt_lenが0になってしまい、fq_codelでカーネルクラッシュを引き起こす可能性がある。

Linuxカーネル開発チームは、qdisc_pkt_len_init()がベストエフォートであり、送信されるバイト数の推定のみを目的としていることから、カーネルクラッシュを防ぐための修正パッチを適用した。今後も追加のセキュリティチェックが実装される予定であり、他の潜在的なバグへの対策も進められている。

Linuxカーネルの脆弱性対応状況まとめ

項目 詳細
CVE番号 CVE-2024-49949
影響を受けるバージョン Linux 5.16以降
修正状況 4.19.323、5.4.285、5.10.227、5.15.168、6.1.113、6.6.55、6.10.14、6.11.3で修正済み
脆弱性の種類 カーネルNULLポインタデリファレンス
攻撃条件 特定のGSOパケット特性を利用したユーザー空間からの攻撃

GSOパケットについて

GSOパケットとは、Generic Segmentation Offloadの略で、大きなパケットを効率的に分割して送信するためのLinuxカーネルの機能である。主な特徴として以下のような点が挙げられる。

  • ネットワークスタックでのパケット処理の効率化
  • CPUオーバーヘッドの削減と性能向上
  • ハードウェアTSOとの互換性維持

Linuxカーネルにおいて、GSOパケットはvirtio_net_hdr_to_skb()関数によって処理され、パケットの分割やヘッダー情報の設定が行われる。qdisc_pkt_len_init()では、GSOパケットのサイズやセグメント数を計算し、送信バイト数の推定を行うが、今回の脆弱性では特定のパケット特性によってこの処理が意図せぬ結果を引き起こす可能性がある。

Linuxカーネルの脆弱性対応に関する考察

Linuxカーネルの開発チームが迅速に脆弱性に対応し、複数のバージョンで修正パッチを提供したことは評価に値する。しかし、GSOパケット処理における新たな脆弱性の発見は、ネットワークスタックの複雑さとセキュリティ課題の継続的な存在を示している。

今後は、パケット処理に関する入力値の検証をより厳密に行い、ユーザー空間からの悪意のある操作を防ぐメカニズムの強化が必要となるだろう。特にqdisc_pkt_len_init()のような基本的な機能において、エッジケースの処理とエラーハンドリングの改善が求められる。

Linuxカーネルコミュニティには、セキュリティ問題の早期発見と修正のためのコードレビュープロセスの強化が期待される。GSOパケット処理の最適化と安全性の両立は、今後のカーネル開発における重要な課題となるはずだ。

参考サイト

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

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

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

コメントを残す

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