Linux Kernel の脆弱性 CVE-2024-0582:PoC と技術的詳細が公開

CVE-2024-0582: Serious Linux Kernel Bug Opens Door to System Takeovers, PoC Published

2024/03/31 SecurityOnline — Linux カーネルの脆弱性 CVE-2024-0582 (CVSS 7.8) の、PoC エクスプロイト・コード技術的詳細が公開された。この脆弱性は、バージョン 6.4〜6.6 に影響するものであり、悪用に成功したローカル・ユーザー・アクセス権を持つ攻撃者は、システムを侵害して完全な管理者権限を獲得する可能性を得るという。


エクスプロイトの仕組み

  • メモリの不適切な管理:この脆弱性のコアは、アプリケーションが使用する特定の関数 (io_uring) に関連するメモリを、カーネルが処理する方式に起因する。メモリ状態の追跡が遅れると、解放済みメモリの使用状態に陥る可能性がある。
  • 解放済みメモリの使用の危険性: カーネルにより解放されたメモリに、アプリケーションがアクセスし続けると、予測不可能な動作につながる可能性がある。この状況の操作に成功した攻撃者は、データの破損や悪意のコード実行などを、仕掛けることが可能になる。
  • 権限の昇格:既存の足場を持つ攻撃者 (たとえ低特権のユーザー・アカウントであっても) が、この脆弱性を悪用して root レベルのアクセス権を獲得し、事実上システム全体を乗っ取る可能性が生じる。
影響を受けるシステム
  • Linux Kernel:6.4〜6.7
  • ディストリビューション:Ubuntu 23.10/Ubuntu 22.04 LTS などの一部のディストリビューションは、当初は脆弱なカーネルを取り込んで出荷されていた。
技術的分析

Linux カーネルの io_uring 機能は、入出力オペレーションを管理する極めて重要なものであるが、ユーザーが IORING_REGISTER_PBUF_RING オペレーションでバッファリングを登録し、mmap() でマッピングし、その後に解放しようとすると、諸刃の剣となり得る。この一連の動作により、カーネルの隙間が暴かれ、ローカル・ユーザーによるシステム・クラッシュや、特権エスカレーションなどが可能になる。

この脆弱性の引き金となるのは、IOU_PBUF_RING_MMAP フラグを使って提供されたバッファリングを、アプリケーションが登録するときである。それにより、カーネルはバッファリングのメモリ割り当てを引き受けることになる。その後に、アプリケーションが作成すべきものとして、mmap() を用いてバッファにアクセスするための仮想マッピングがある。そしてアプリケーションが、IORING_UNREGISTER_PBUF_RING オペコードを使って提供されたバッファリングの登録を解除すると、そのメモリはカーネルにより解放されてしまう。

ユーザー空間において、対象となるメモリが以前にマッピング解除されているかどうかを、検証するメカニズムは存在しない。したがって、カーネルが他の用途のために再割り当てする可能性がある、ページに対する有効なメモリ・マッピングを、アプリケーションは保持してしまう。再割り当てが行われた後に、それらのページに対して Read/Write を行おうとすると、解放済みメモリの使用が発生し、システムの完全性と安全性が危険にさらされる。

この脆弱性 CVE-2024-0582 に対する、PoC エクスプロイト・コード技術的詳細を提供したのは、セキュリティ研究者 @foolisses と @YordanStoychev である。

身を守るために行うべきこと
  1. 直ちにアップデートする:影響を受ける Linux バージョンを実行している場合には、提供されているセキュリティ・パッチを可能な限り早急に適用する。
  2. ディストリビューションをチェックする:使用している Linux ディストリビューションの Web サイト (Ubuntu/Debian/SUSE) で、アドバイザリやアップデートの手順を確認する。
  3. ユーザーアカウントを制限する:システム上のユーザー・アカウント数を、特に昇格権限を持つユーザー・アカウント数を。可能な限り最小限に抑える。それにより、万が一に侵害が発生した際の、潜在的な影響を低減できる。