PoC Code for Linux Kernel Privilege Escalation Flaw (CVE-2023-2598) Published
2023/11/18 SecurityOnline — Linux カーネル 6.3-rc1 に存在する、深刻度の高い脆弱性 CVE-2023-2598 (CVSS:7.8) の詳細と PoC エクスプロイトを、Cybersecurity の研究者 Yordan が公開した。
ホワイト・ハット・ハッカーの Tobias Holl により発見された、このカーネルの脆弱性は、io_uring のバッファ登録コードにおける物理メモリへの境界外アクセスに起因する。特別に細工されたリクエストを送信することで、この脆弱性の悪用した認証済みの攻撃者は、特権を昇格させることが可能だ。このメモリを操作の能力により、昇格した特権を獲得した攻撃者は、任意のコード実行が可能性であり、結果としてシステムを危険にさらすことになる。
io_uring について言うなら、アプリケーションがシステム・コールを非同期で実行するための、Linux 用の API となる。したがって、通常のシステム・コールを使用するよりも、パフォーマンスが大幅に向上する。ブロッキングしているシステム・コールを待つ必要がなくなり、その実装方法によっては、実行する必要のあるシステム・コールの数を減らすことも可能だ。
Yordanは「脆弱性の根本的な原因は、バッファが登録される際の誤った最適化にある」と記事で述べている。
Yordan は、「IORING_REGISTER_BUFFERS オペコードを渡すことで、1つの io_uring_register システム・コールを通して、複数のバッファが登録される。それにより、io_sqe_buffers_register が呼び出され、そのリターン・コールとして io_sqe_buffer_register が呼び出され、それぞれのバッファが登録される。ここが脆弱性の発生場所である」と付け加えた。
バグの再現手順は以下のとおりである:
- memfd を作成する。
- そのファイル記述子で単一ページを fallocate する。
- MAP_FIXED を使用して、このページを連続した場所に繰り返しマッピングする。
- IORING_REGISTER_BUFFERS を使用して、そのページで埋めた領域全体を固定バッファとして登録する。
- IORING_OP_WRITE_FIXED を使って、バッファを他のファイルに書き込む (OOB 読み込み)。また、IORING_OP_READ_FIXED を使って、バッファにデータを読み込む (OOB 書き込み)。
さらに Yordan は、脆弱性 CVE-2023-2598 の影響を示す、PoC エクスプロイトもリリースしている。
この、Linux カーネルの脆弱性は、公開直後にリリースされたカーネル・バージョン 6.4-rc1 で速やかに対処されている。しかし、システム管理者は、悪用のリスクを軽減するために、インストールした Linux が最新バージョンにアップデートされていることを確認する必要がある。
この脆弱性 CVE-2023-2598 ですが、お隣のキュレーション・チームに聞いてみたら、5月8日の時点で FIX しているとのことでした。あれっと思い、GitHub を見てみたら、先日に PoC エクスプロイトが公開されていました。なぜ、この記事が、この時期にと、分からなくなるときが稀にありますが、調べてみると必ず理由はあるようです。なお、Linux Kernel の脆弱性というと、2023/05/09 に「Linux カーネルの NetFilter に新たな脆弱性 CVE-2023-32233:root レベルへの権限昇格が可能」という記事がポストされていました。
You must be logged in to post a comment.