CVE-2024-27815: Apple XNU Kernel Vulnerability Uncovered, PoC Code Released
2024/06/23 SecurityOnline — Apple XNU カーネルに存在する、脆弱性 CVE-2024-27815 の詳細と PoC エクスプロイト・コードが、あるセキュリティ研究者により公開された。この脆弱性の悪用に成功した攻撃者は、カーネル特権で任意のコードを実行される可能性を手にする。この脆弱性は、macOS 14.0/iOS 17.0 に取り込まれる、XNU カーネルのバージョン xnu-10002.1.13 に存在する。具体的に言うと、この脆弱性は、カーネルのネットワーキング/BSD に関連する、各種のコンポーネントで使用されるメッセージ・バッファ (struct mbuf’s) を、処理する sbconcat_mbufs 関数に起因する。

この問題を報告した、MIT CSAIL の Joseph Ravichandran によると、CONFIG_MBUF_MCACHE でコンパイルされたカーネルに対して、脆弱性 CVE-2024-27815 は影響を及ぼすという。なお、macOS 14.2/14.3/14.4 の X86_64 ビルドにおいて、このバグの存在が確認されている。
脆弱性 CVE-2024-27815 の根本的な原因は、カーネルにおけるメッセージ・バッファの処理にある。メッセージ・バッファ (mbuf) は、ヘッダ部分とデータ部分で構成され、どちらも固定サイズである。そして、影響を受けるカーネルにおいては、メッセージ・バッファの合計サイズ (_MSIZE) は 256 Byte であり、ヘッダが 32 Byte を占めているため、データ部分として 224 Byte (MLEN) が残る計算となる。
この脆弱性は、sbconcat_mbufs 関数の誤った境界チェックにより引き起こされる。具体的に言うと、この関数で使用されているマクロは、_MSIZE が 1 Byte より小さい場合にのみ境界チェックを行い、データ用に使用できるはずの実際の長さを示す MLEN は使用されない。この見落としを悪用する攻撃者は、224 Byte のみが割り当てられているメッセージ・バッファのデータ・フィールドに、最大で 255 Byte のデータを書き込み、バッファ・オーバーフローを引き起こすことが可能になる。
Apple のセキュリティ・アドバイザリには、「アプリがカーネル特権を用いて、任意のコードを実行する可能性が生じる。この境界外書き込みの問題が、攻撃者により悪用された場合には、カーネル・レベルで任意のコード実行が可能となり、システムの完全な侵害にいたる恐れがある」と記されている。
すでに Apple は、macOS 14.5/iOS 17.5/visionOS 1.2 のリリースに含まれる、XNU カーネル・バージョン xnu-10063.121.3 により、この脆弱性に対処している。この修正には、_MSIZE のチェックではなく、MLEN と UINT8_MAX の正確な比較が含まれている。それにより、境界チェックが適切に実施され、オーバーフローが防止される。定数 MLEN が、常に UINT8_MAX より大きい場合において、コンパイラによる最適化されたチェックが可能となり、sa_len が最大 255 Byte であることが、CASSERT により保証され、安全性が確保される。
脆弱性 CVE-2024-27815 について、さらに詳細な技術解説が必要な場合には、Joseph Ravichandran と MIT CSAIL が提供するリソースから、PoC エクスプロイト・コードの入手が可能となっている。
macOS/iOS に脆弱性とのことですが、Mac に関しては Sonoma だけが対象のようです。このブログ作成で使っている、古い Mac は無関係なのか、それとも、時間差でアップデートが来るのか、そのあたりは不明です。ただ、現時点では、アップデートは届いていません。よろしければ、Apple で検索も、ご利用ください。
You must be logged in to post a comment.