Linux Kernel の脆弱性 CVE-2023-52447 に PoC:コンテナ・エスケープの可能性

PoC Exploit Releases for CVE-2023-52447: A Linux Kernel Flaw Enabling Container Escape

2024/10/07 SecurityOnline — 先日に発見された、Linux Kernel の脆弱性 CVE-2023-52447 (CVSS:7.8) に対する、技術的な詳細と PoC エクスプロイトが、研究者たちにより公開された。この use-after-free 脆弱性は、Linux Kernel のバージョン v5.8〜v6.6 に影響を及ぼし、セキュリティ分離のためにコンテナ化に依存しているシステムで、甚大な被害を引き起こす可能性を持つ。

脆弱性 CVE-2023-52447 の原因は、Linux Kernel 内の BPF サブシステムにおける use-after-free の欠陥であり、具体的に言うと、BPF プログラムが配列マップ・ポインターを管理する方法に関連している。BPF とは、カーネル内でユーザーにカスタム・プログラムを実行させる強力なフレームワークであり、ネットワーク・パケット・フィルタリングや、パフォーマンス監視などの、セキュリティ・アプリケーションで多用される。ただし、今回のケースでは、BPF プログラムでの不適切な参照カウントから、この脆弱性は生じている。

この問題は、BPF プログラムが参照カウントを適切に増やすことなく、array_of_maps からの arraymap ポインタをホールドすることで発生する。したがって、時間のかかる操作が BPF プログラムにより実行されると、別のスレッドが arraymap を解放してメモリを再利用できるようになり、use-after-free 状態の可能性が生じる。

2つのスレッド間での、競合状態を慎重に調整することで、この脆弱性が悪用される可能性がある:

  • 被害者の arraymap における max_entries と index_mask を変更する。
  • 被害者の arraymap を使用して、array_of_maps における値のインデックス 0 付近の、arraymap を “core_pattern-struct_bpf_array_offset” として変更する。
  • array_of_maps を更新して core_pattern を変更する。
  • コンテナ・エスケープを実行する。

前述のとおり、セキュリティ研究者により、PoC エクスプロイトが GitHub で公開されている。それにより、脆弱性 CVE-2023-52447 と悪用方法を、セキュリティ チームは深く理解できる。したがって、この PoC は防御策にとって重要なリソースとなるが、攻撃者によるエクスプロイト・コードへのアクセスも可能であり、パッチ適用と緩和策の緊急性が高まっている。

幸いなことに、先日のカーネル・パッチで、この脆弱性は対処されている。この問題は、Linux カーネルへのコミットにより修正されているため、ユーザー組織に対して強く推奨されるのは、このパッチを取り込んだ最新のカーネルバージョンへの更新である。