Skip to content

Heckler: Breaking Confidential VMs with Malicious Interrupts (CVE-2024-25744)

Untrusted hypervisor, bir confidential VM'e controlled non-timer interrupt'lar (özellikle int 0x80) inject eder ve onu, register state'ini bozan ve authentication'ı bypass eden global etkili handler'ları çalıştırmaya zorlar.

Mechanism

Boundary neden kırılıyor

AMD SEV-SNP ve Intel TDX, bir confidential VM'in memory'sini ve execution'ını malicious bir hypervisor'dan korur — ama hypervisor hâlâ meşru biçimde interrupt delivery'yi kontrol eder. Heckler bunu suistimal eder: CVM'e saldırgan tarafından seçilen noktalarda controlled interrupt'lar inject eder. CVM, ilgili handler'ı o an çalışan user-space process adına çalıştırır. Global etkiye sahip handler'lar — paper, legacy 32-bit Linux syscall vector'ü olan int 0x80'i öne çıkarır — saldırganın CVM'in register state'ini manipüle etmesine ve data/control flow'unu değiştirmesine olanak tanır. Kırılan invariant: bir confidential VM, hypervisor tarafından seçilen bir interrupt'ın in-guest computation'ını değiştirmesine izin vermemelidir — oysa interrupt delivery tam da hypervisor kontrolünde bırakılan interface'tir.

Walkthrough

USENIX Security 2024 paper'ından konsept attack path; illustrative, silahlandırılmış exploit yok.

  1. Malicious hypervisor, bir target process (örn. sshd veya sudo) çalışırken CVM'e int 0x80 injection'ını zamanlar.

  2. CVM, legacy 32-bit syscall handler'ını o process'in context'inde dispatch eder; handler'ın global register/flow etkileri olduğundan, inject edilen interrupt register'ları/state'i bozar.

  3. Yazarlar OpenSSH ve sudo'da authentication'ı bypass etmeyi ve SEV-SNP üzerinde C/Java/Julia istatistik ve metin-analizi uygulamalarının execution integrity'sini kırmayı demonstre eder.

TDX vs SEV-SNP

TDX hardware'i 0-30 vector'lerinin external injection'ını zaten engeller, bu yüzden TDX signal/int 0x80 varyantına karşı savunmasız değildir; demonstre edilen kırılmalar SEV-SNP üzerindedir. CVE-2024-25744 (ve CVE-2024-25743) olarak takip ediliyor.

Detection

  • In-guest: Guest'in hiç talep etmediği, dışarıdan inject edilmiş interrupt'ların alınması (örn. 32-bit bir syscall verilmemişken gelen bir int 0x80) gözlemlenebilir anomalidir; Linux kernel patch'i tam olarak bunu temel alır.

Mitigation

  • Kernel patch: Linux kernel değişiklikleri, dışarıdan inject edilen int 0x80'i tespit eder/engeller. SEV-SNP'de kernel'de x86 emulation'ı kapatın (6.6.7'de düzeltildi).
  • Hardware yönü: Yazarlar SEV-SNP "protected interrupt delivery"'sini (Restricted Injection) önerir, ancak software desteğinin eksik olduğunu belirtir — signal tabanlı varyant için vulnerable handler path'ini devre dışı bırakmaktan öte tam bir fix yoktur.

References