Linux の全ブートローダーが危険:shim で発見された RCE 脆弱性 CVE-2023-40547 とは?

CVE-2023-40547: The Critical Shim Flaw Compromising Linux Bootloaders

2024/01/25 SecurityOnline — Linux のシステム・ブート・プロセスの中核を突き、セキュア・ブート・メカニズムの安全性を脅かす、新たな脆弱性が発見された。一見すると無害な EFI アプリケーションである shim で発見された、この脆弱性は、サイバー・セキュリティ業界全体の懸念事項となっている。


shim はブート・プロセスの要として機能し、セキュアなブートに対して期待される高度なセキュリティと、各種のバイナリを実行する実用的なニーズとの、ギャップを埋めるように設計されている。その主な役割は、標準的な EFI コールを使用して別のアプリケーションを検証/実行することであり、必要に応じて、認証のために内蔵証明書にフォールバックする。この二重のアプローチにより、shim はブート・プロセスの完全性を維持し、検証済みのソフトウェアだけが実行の許可を得られるようにする。しかし、この構造は、shim のセキュリティ保証に影を落とす、CVE-2023-40547 の原因にもなっている。

shim に存在するリモート・コード実行の脆弱性 CVE-2023-40547 (CVSS:8.3) は、HTTP レスポンスの解析中に攻撃者が制御する値を、shim が信頼することに起因する。この脆弱性の悪用に成功した攻撃者は、悪意の HTTP リクエストを作成し、システムを操作して境界外への書き込み状態に移行し、最終的にはシステムの完全な侵害につながるという、不安定な状況を作り出す可能性がある。

この脆弱性の核心は、HTTP または関連プロトコルを介して、ファイルを取得するという shim の方法にあり、そこでは HTTP ヘッダーで指定されたサイズに基づきバッファが割り当てられる。

この、バッファ割り当てのために外部の操作可能なデータに依存する方法は、受信したデータをコピーするためのプロトコルのメタデータと並置され、境界外書き込みのための熟したシナリオを作り出すことになる。この見落としにより、攻撃者は実際の受信データよりも小さなバッファ・サイズを指定し、shim を騙して割り当てられたメモリ境界を超えて実行させることができる。

この脆弱性 CVE-2023-40547 は、Microsoft Security Response Center の Bill Demirkapi の熱心な努力の末に発見された。

この深刻な脆弱性は、shim のバージョン 15.8 のリリースで、rx バッファがアロケーションを超えないことを保証する、追加のセーフガードを導入することで修正された。この脆弱性が、過去 10年間に署名された、全ての Linux ブートローダーに存在することで、CVE-2023-40547 が広範囲に影響を及ぼすことが示唆される。しかし、今回リリースされたパッチは、セキュリティ上の見落としを是正するための重要な一歩となる。この脆弱性は、セキュア・ブートの有効性に疑問を投げかけるだけでなく、現代のコンピューティング・プラットフォームのセキュリティ確保に内在する、複雑さを思い知らせるものにもなっている。