【脆弱性情報】KVM/x86のゲストからホストへ脱出する脆弱性「Januscape」 [CVE-2026-53359]
Januscape: Guest-to-Host Escape in KVM/x86 [CVE-2026-53359]
Januscape: Guest-to-Host Escape in KVM/x86 [CVE-2026-53359]
KVM/x86環境において、ゲストOSからホストOSへの脱出(Guest-to-Host Escape)を許してしまう深刻な脆弱性「Januscape」(CVE-2026-53359)が公表されました。仮想化基盤のセキュリティに関わる重要な事案ですので、管理者の方は早急な確認と対策を推奨します。
"マルチテナントゲストを受け入れ、入れ子構造の仮想化(nested virtualization)をサポートするx86 KVMホストを運用している場合、あるいはそのようなホスト上のインスタンスを使用している場合"
これって、脆弱性の影響を受けるには入れ子構造の仮想化が有効になっていないといけないってこと?
ホストOSやBIOSでこの機能を無効にすれば、このバグに対して無敵になれるの?
詳細な解説はここにあるよ: [0]。
これは非常に厄介な脆弱性で、入れ子構造のx86仮想化機能を利用・許可しているあらゆるサービスが危険にさらされる。VMをサービスとして提供しているところも含むね。
ゲストVM内でPoCを実行すると、ホストのカーネルパニックを引き起こす可能性がある。制御された環境で動作する完全なエスケープ攻撃コードも存在するが、現時点では公開されておらず、かなり先になる予定だ。
この脆弱性が混入した最初のコミットは2010年だ。[1] つまり、今まで16年間も発見されずにいたわけだ [2]。
KVMに脆弱性が見つかるのは時間の問題だったけど、これはAMDとIntelの両方で動作する初のKVMゲスト・ホスト間エクスプロイトだから、本当にタチが悪い。
[0] https://github.com/V4bel/Januscape/blob/main/assets/write-up... (https://github.com/V4bel/Januscape/blob/main/assets/write-up.md)
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin... (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2032a93d66fa)
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin... (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=81ccda30b4e8)
ねえ、いい経験則を教えてあげる。
リソースを共有すればコストは下がるけど、セキュリティリスクは上がる。
ファイルシステムを共有するか、OS、カーネル、ハードウェアを共有するか、それとも専用サーバーを使うか、自分で選ぶことだ。
リソース共有の経済学なんて、予算のごく一部、それもカツカツの範囲での話だよ。
0-1ドル/月: サーバーレス
1-5ドル/月: コンテナ
5-200ドル/月: 仮想マシン
200ドル-10億ドル/月: 最低でも1台の専用サーバー
だから、もし君の時給が5ドル以上で、プロジェクトが少しでも本格的なものなら、専用サーバーを使って、たかだか数ドル浮かすためにLPE(ローカル権限昇格)脆弱性なんてクラスのトラブルに巻き込まれるのは避けることだ。
ビジネスには経費がかかるんだよ。専用サーバー以外のインフラが本格的なものだなんて思い込むのはもうやめようぜ。月200ドル払うか、趣味の範囲でやってることに甘んじるかだ。
いや、別に俺が専用サーバーを売ってるわけじゃないけど、売ったほうがいいかもな。
KVM、あるいはx86によるメール検証のことか。
LPE: RHELのようなディストリビューションでは、/dev/kvm が誰でも書き込み可能(0666)になっているため、権限のないユーザーでもこの脆弱性を悪用して信頼性の高いLPEとしてroot権限を奪取できる。
なんでLinuxのデバイスファイルって、信用できないアプリケーションからもアクセスできるようになってるんだ?
x86の入れ子仮想化は、奇妙なほど面倒なシロモノだ。普通は各層が分離されていて、L0(ハードウェア)は自分のVM(L1)だけ気にすればよくて、L1は自分のVM(L2)だけ気にすればいいと思うだろうけど、実際は違う。L0のトップレベルハイパーバイザーはL2から出るフォールトを拾ってしまい、それが実はL2であってL0じゃないことを判断しなきゃいけないんだ。
個人的な意見だけど、この余計な複雑さ(そして歴史的な不安定さ)のせいで、パブリックなVMホストで入れ子構造を有効にするのは悪手だと思ってる。