xa_erase()vgic_put_irq()GITS_CTLREnableLPIsゲストからホストへの脱出脆弱性は稀ですが、クラウドコンピューティングが依存する隔離境界そのものを破壊する、最も危険な種類のハイパーバイザーバグです。これまで公開されたKVM脱出の事例は、主にQEMUやAMD固有のコードを経由したx86アーキテクチャを対象とするものでした 。ITScapeは、権限のないarm64ゲストVMから、ユーザー空間のエミュレータのバグではなく、インカーネルのKVMコード自体を介した脱出を実証した初のエクスプロイトです
。
AWS Graviton、Ampere Altra、またはその他arm64 KVMホストでマルチテナントのワークロードを運用しているクラウド事業者にとって、ゲストは以下のことが可能になります。
脆弱なコードは、LPI変換キャッシュの無効化処理にあります。カーネルがキャッシュエントリのフラッシュを必要とする場合、xa_for_each()でXArrayを反復処理し、各エントリに対してvgic_put_irq()を呼び出して参照カウントを解放します。問題は、xa_for_each()が、別の仮想CPUから発行されたDISCARD ITSコマンドなど、並行操作によって既に消去されたエントリを返す可能性があることです。無効化ループは、この既に削除されたエントリに対して参照を解放してしまい、結果として二重解放、最終的にはUse-After-Freeを引き起こします
。
同様のコード領域における以前の脆弱性、CVE-2024-26598は、vgic_its_check_cache()内でロックを解放する前に参照カウントを増やすことで、LPI変換キャッシュのヒットパスにおけるUAFに部分的に対処していました。しかし、この修正は今回の無効化パスをカバーしておらず、異なるトリガーシーケンスによって競合が悪用可能なまま残されていました
。
上流(アップストリーム)カーネルに適用された修正では、vgic_put_irq()がイテレータの触れる全てのエントリではなく、xa_erase()によって返された値に対してのみ呼び出されるようにvgic_its_invalidate_cache()が変更されました。コミットメッセージは次の通りです。"KVM: arm64: vgic-its: Drop the translation cache reference only for the erased entry"(KVM: arm64: vgic-its: 消去されたエントリに対してのみ変換キャッシュの参照を解放する)
。
xa_erase()はアトミックにエントリを削除して古いエントリを返すか、エントリが既に存在しない場合はNULLを返すため、この修正により参照カウントは厳密に一度だけ減算されることが保証され、二重解放の可能性が排除されます。このパッチは2026年6月初旬にアップストリームカーネルに取り込まれ、2026年6月8日から10日頃にかけて、6.x系の安定版カーネルにも迅速に適用されました
。Red Hat、SUSE、Debianなどの主要なLinuxディストリビューションも、サポート対象のカーネルブランチ向けにバックポートされた修正をリリースしています
。
Hyunwoo Kim氏は、2026年6月9日から10日頃にかけて、GitHub上で動作するエクスプロイトを公開しました。リポジトリには、完全なソースコード、詳細な再現手順、悪用手法の技術的解説が含まれています 。エクスプロイトは、DISCARDコマンドとLPI変換キャッシュの参照を同時に発行する仮想CPUスレッドを協調させることで競合を引き起こし、Use-After-Freeを精密に発生させ、ホストでのコード実行に繋げます。
信頼性の高いPoCが公開されたという事実は、汎用的なエクスプロイトスキャナーや現実の攻撃者が最小限の労力でこの脆弱性を武器化できることを意味し、情報公開から実際の攻撃開始までの猶予期間が極めて短いことを示しています。
AWS GravitonやAmpere Altraなど、マルチテナントのARM64 KVMインフラストラクチャを運用している場合、これは即時の緊急パッチサイクルが必要な事案です。
Comments
0 comments