セキュリティ
Zapscape (CVE-2026-64561): KVM/x86におけるゲストからホストへのエスケープ脆弱性
Zapscape (CVE-2026-64561) (github.com)
要約
Zapscape (CVE-2026-64561) は、KVM/x86環境でゲストOSからホストOSへエスケープし、カーネル権限でコマンドを実行できる脆弱性です。これはシャドウMMUエミュレーションにおけるuse-after-freeバグであり、特にマルチテナント環境やパブリッククラウドに影響を与える可能性があります。この脆弱性は、ゲスト側のアクションのみでトリガー可能であり、ホストカーネルのシャドウページを破損させることで、ゲストとホストの分離を脅かします。
全文翻訳
KVMエスケープトリロジー ITScape (CVE‑2026‑46316) Januscape (CVE‑2026‑53359) Zapscape (CVE‑2026‑64561)
Zapscape: KVM/x86におけるゲストからホストへのエスケープ
概要
このドキュメントでは、Hyunwoo Kim (@v4bel) によって発見・報告されたZapscape (CVE-2026-64561) の脆弱性について説明します。これは、KVM/x86環境においてゲストがホストへエスケープし、カーネル(root)権限でホスト上でコマンドを実行することを可能にするKVMエスケープ脆弱性です。
Zapscapeは、KVM/x86のシャドウMMUエミュレーションにおけるuse-after-freeの脆弱性であり、特にシャドウページが再利用される際に実行される再帰的なzapパスで発生します。ゲスト側の操作のみでこのバグをトリガーでき、ホストカーネルのシャドウページを破損させることができます。これは、信頼されていないゲストを受け入れ、ネストされた仮想化、特にマルチテナントx86パブリッククラウドを公開するKVM/x86ホストのゲスト・ホスト分離を脅かす可能性があります。
詳細な技術情報については、こちらを参照してください。
注記
この脆弱性を linux-distros@vs.openwall.org に報告した後、合意されたエンバーゴ期間が終了したため、エクスプロイトがoss-securityに投稿され、このZapscapeドキュメントが公開されました。開示のタイムラインについては、技術詳細ドキュメントを参照してください。
PoCの構造
PoCはAMDをターゲットとして記述されており、安全なテストのためにはQEMU TCG下での実行が推奨されます。PoCは以下の構造を持っています。
L0: QEMU TCGによってエミュレートされたx86_64 CPU(AMD SVM/NPT)上のLinux 7.1.3 + KVM_AMD。
エスケープターゲット
└─ L1: エスケープターゲットが作成するゲスト。
ロングモードからPAEへの切り替えは、1つのシャドウページを子とピン留めされたルートの両方としてエイリアスします。その後、L1はUAFをL0カーネルコード実行にエスカレートさせます。
└─ L2: L1がVMRUNを実行するゲスト。
そのメモリタッチがL0のクォータ再利用をトリガーします。
クォータ再利用 -> ルートカウントガードなしの再帰的なzap -> UAF
このPoCは、クラウド環境ですぐに実行できる武器化されたエクスプロイトではなく、QEMU TCG上で脆弱性と完全なエクスプロイトチェーンを再現するデモンストレーションコードです。実際のクラウド環境で使用するには、PoCが行うL1のアクションをゲストカーネルモジュールに移動し、ホストカーネルのkconfigに合わせてエクスプロイトを移植する必要があります。これは難しい作業ではありません。
PoCの使用方法
脆弱性のあるv7.1.3カーネルソースをダウンロードし、バンドルされたkconfigに基づいてカーネルイメージをビルドします。PoCをビルドし、BusyBoxなどを使用して適切なinitramfsを構成し、ビルドしたPoCをinitramfsに入れます。
# gcc -O2 -g -static -pthread poc.c -o poc
以下のコマンドでLinux 7.1.3ターゲットをブートします。QEMU v9.2.0以降でテストしてください。
# ./qemu.sh bzImage initramfs.cpio.gz
QEMU TCGがブートした後、PoCを実行します。エクスプロイトが成功すると、ゲストからエスケープし、ホスト上にroot所有の/Zapscapeファイルを作成します。
[+] /Zapscape がターゲットKVMホストカーネルによって作成されました(所有者uid=0、モード=0644)。
[+] エクスプロイト完了 - 確認するには: ls -la /Zapscape
zapscape(uid=65534)$ ls -la /Zapscape
-rw-r--r-- 1 root root 0 Jul 29 05:27 /Zapscape
zapscape(uid=65534)$
このPoCは正確な情報を提供することを目的としています。許可されていないシステムでテストに使用しないでください。
影響を受けるバージョン
Zapscape (CVE-2026-64561) は、f95eec9bed76 (2020-07-08) から 2abd5287f083 (2026-07-21) の範囲をカバーしています。
FAQ
この脆弱性の影響は何ですか?
Januscape (CVE-2026-53359) と同じです:KVMエスケープ:ゲスト側の操作のみで、攻撃者は自身のVMを実行しているホストを侵害できます。例えば、パブリッククラウドで単一のインスタンスを借りた攻撃者は、ホストカーネルをパニックさせて同じ物理マシン上の他のすべてのテナントVMをダウンさせる(DoS)か、ホスト上でroot権限でコードを実行してホストとそれに含まれるすべてのゲストを乗っ取る(RCE)ことができます。
LPE:RHELなどのディストリビューションでは、/dev/kvmはワールド書き込み可能(0666)であるため、権限のないユーザーもこの脆弱性をLPEとして使用してroot権限を取得できます。LPEとして使用される場合、ホスト側のVMM ioctlが利用可能になるため、エクスプロイトはより簡単かつ安定します。
Januscapeとの関係は?
同じシャドウMMUで発生しますが、原因が異なる別の脆弱性です。ただし、Januscapeとは異なり、IntelではEPTページウォーク長4と5の両方がL1に公開されている場合にのみトリガーできます。これは影響範囲を評価する上で重要な点であり、正確に理解する必要があります。技術詳細ドキュメントを参照してください。
この脆弱性はQEMUで発生しますか?
いいえ。Januscapeと同様に、カーネル内のKVMで発生するため、QEMUのエミュレーションとは独立してトリガーされます。このため、独自の仮想化スタックを実装・使用している大規模なパブリッククラウドも脅かす可能性があります。
ゲストVM内でroot権限は必要ですか?
はい。L1カーネル権限が必要です。パブリッククラウドでインスタンスが割り当てられる場合、通常は自身のVMでroot権限を持っているので、これは満たされます。ゲストrootがないシナリオでは、Dirty FragのようなLPEと連鎖させる必要があります。
KVMの脆弱性は今後も出現すると思いますか?
はい。ホストハイパーバイザーの持続的なパッチ適用プロセスを確立することをお勧めします。冬は近づいています。
トリロジーの後に続編を計画していますか?
そう願いたいです。