Skip to content

Hyper-V elevation of privilege (in-the-wild exploited)

CVE-2024-38080: Hyper-V Vid.sys Exo-broker IOCTL path'inde, local bir kullanıcının SYSTEM'e yükselmesine izin veren bir integer overflow. Temmuz 2024'te patch'lendi; Microsoft tarafından exploited-in-the-wild olarak işaretlendi ve CISA KEV kataloğunda listelendi (public technical analysis patch sonrasında 1-day olarak yayımlandı).

Mechanism

Bug class ve boundary

Component: Virtualization Infrastructure Driver (Vid.sys), yani user-mode VM Worker Process (vmwp.exe) ile hypervisor (hvix64.exe) arasındaki istekleri broker'layan kernel-mode driver. Vulnerable handler VidExoBrokerIoctlReceive'dir ve \Device\VidExo device object'i üzerinden erişilir (public 1-day analizine göre).

Trust boundary: host'ta unprivileged/low-privileged user-mode → kernel (SYSTEM). "Exo" broker mekanizması Hyper-V'nin partition-management altyapısının parçasıdır, dolayısıyla device'a bir handle'a sahip local authenticated bir aktör IOCTL surface'ini sürebilir. Microsoft bunu local bir Elevation of Privilege olarak sınıflandırır (CVSS 7.8, CWE-190 Integer Overflow). Host'ta SYSTEM'e ulaşmak için tam bir guest-to-host escape gerektirmez; kernel attack surface'i local olarak erişilebilirdir.

Vuln class: bir size hesaplamasında integer overflow / wraparound (CWE-190). Overflow olmuş size bir length check'i bypass eder ve non-paged pool'da out-of-bounds write'lara yol açar — klasik bir "kötü aritmetik bir memmove'u besler" kernel pool corruption'ı. Microsoft bunun in-the-wild exploit edildiğini belirtir ve CISA'nın Known Exploited Vulnerabilities kataloğunda listelenir. (Not: bu bir zero-day değildir — public exploitation, Temmuz 2024 patch'i yayımlandıktan sonra ortaya çıkmıştır; atıf yapılan public analiz de patch sonrası bir 1-day yazısıdır. "İlk/bilinen ilk Hyper-V zero-day'i" gibi kategorik iddialar doğrulanamaz ve bu doc tarafından öne sürülmez; doc yalnızca teyit edilmiş in-the-wild exploitation ve CISA KEV listelemesini iddia eder.)

Walkthrough

Public hackyboiz/pwndorei 1-day yazısından konsept reproduction path (patch'lenmiş, halihazırda açıklanmış bir build'e karşı — yalnızca illustrative):

  1. Local bir process, Exo broker device'a bir handle açar ve receive IOCTL'ünü verir (0x22128C, VidExoBrokerIoctlReceive; eşi olan send 0x221288'dir).
  2. Handler, request structure'ındaki saldırgan tarafından etkilenen field'lardan bir output size hesaplar: per-handle bir terim artı bir data-length terimi.
  3. Her iki aritmetik adım da 32/64-bit bir size'ı wrap edebilir, dolayısıyla hesaplanan size küçülürken amaçlanan copy büyük olur.
  4. Boyutu yetersiz kalan sonuç, caller'ın output length'ine karşı length check'i geçer ve sonraki copy / object-duplication, pool'daki allocation'ın ötesine yazar.

Yalnızca illustrative

Aşağıdaki fragment, public decompilation'dan aritmetik şeklin temsili bir reconstruction'ıdır. Çalışan bir exploit değildir ve çevredeki IOCTL setup, spray ve corruption-to-control adımlarını atlar. Tam field adlarını/offset'lerini, atıf yapılan yazının belirli driver build'i dışında doğrulanmamış kabul edin.

Temsili size-calculation şekli (illustrative)
// Pre-patch (conceptual, from public 1-day analysis of Vid.sys 10.0.22621.3672)
// NumHandles and DataLen are taken from the request structure.
size_t v12 = 8 * Source->NumHandles + 16;   // [overflow #1] if NumHandles >= 0x1ffffffe
size_t v13 = Source->DataLen + v12;          // [overflow #2] wraps again
if (v13 <= OutputLen) {                       // wrapped-small size passes the check
    memmove(dst, src, /* large intended length */); // OOB write in non-paged pool
    ObDuplicateObject(...);                   // further OOB writes
}
  1. Patch'in neyi değiştirdiği (10.0.22621.3880): Microsoft, buffer operasyonlarından önce açık overflow guard'ları ekledi — çarpma sonucu 32-bit bir sınırı aştığında (v15 > 0xFFFFFFFF / >= 0xFFFFFFF0) ve toplama wrap ettiğinde (TotalLength < v16) request'i reddediyor. Her iki check de herhangi bir copy çalışmadan önce request'i başarısız kılar.

Detection

  • Patch state: Temmuz 2024 cumulative update'in kurulu olduğunu doğrulayın (22H2/23H2'de Vid.sys >= 10.0.22621.3880). İlgili KB için winver/Get-HotFix denetimi yapın (bkz. Mitigation).
  • Behavioral: Hyper-V host'larında beklenmeyen host bugcheck'leri veya pool-corruption crash'leri (!analyze'ın non-paged pool yakınında corruption göstermesi) başarısız/kısmi exploitation'a işaret edebilir. Host crash dump'larını toplayıp triyaj edin.
  • Telemetry: virtualization-management olmayan process'lerden \Device\VidExo açan / Hyper-V VID IOCTL'leri veren olağandışı local process'lere EDR alert'i. Normal bir host'ta bu device'a yalnızca Hyper-V bileşenleri dokunmalıdır.
  • Exploitation local-to-SYSTEM olduğundan, initial-access detection'larıyla korele edin: SYSTEM seviyesindeki aktivitenin hemen öncesinde Hyper-V IOCTL'lerine pivot eden bir foothold process.

Mitigation

  • Temmuz 2024 security update'ini uygulayın. Otoriter fix budur. Etkilenen: Windows 11 (21H2/22H2/23H2) ve Windows Server 2022. Public KB'ler arasında KB5040431, KB5040437, KB5040438, KB5040442 bulunur (Rapid7/Wiz'e göre). Hyper-V host'larını önceliklendirin — Microsoft ve ZDI, aktif olarak exploit edildiği ve ransomware için cazip olduğu için bunu hızlı deployment olarak işaretledi.
  • Defense-in-depth: Hyper-V host'larında kimin local kod çalıştırabileceğini kısıtlayın (bug local authenticated erişim gerektirir); host'ları genel amaçlı/interactive workload'lardan uzak tutun; least privilege uygulayın ki low-priv bir foothold device'a kolayca ulaşamasın.
  • Monitoring: yukarıdaki IOCTL/device-access telemetry'sine ve açıklamayı takip eden host bugcheck'lerine alert üretin.

References