Skip to content

Registry hive double-fetch under memory pressure (CVE-2024-43452, CVE-2024-43641 refcount variant)

Windows registry hive'larına karşı bir False-File-Immutability / double-fetch sınıfı: kernel bir hive page'ini bir kez validate eder, sonra page out edildikten sonra onu yeniden okur ve attacker-controlled network-backed bir file'ın ikinci fetch'te farklı byte'lar döndürmesine ve hive state'ini corrupt etmesine izin verir.

Mechanism

Note

Neden çalışır: Windows, FILE_SHARE_WRITE olmadan açılan bir file'ın altından değiştirilemeyeceğini varsayar — Gabriel Landau bu hatalı varsayıma False File Immutability (FFI) adını verdi. Varsayım, file attacker-controlled network storage'da (bir SMB share ya da bir Cloud Filter / network redirector provider) yaşadığında bozulur. Registry hive'ları tek bir bitişik mapping olarak tutulmaz — backing file'larından cell map üzerinden cell-by-cell page in edilirler. Memory pressure altında, kernel'in zaten validate ettiği page'ler evict edilebilir ve bir sonraki erişimde backing file'dan yeniden okunabilir. Eğer validation ("bin/cell header'ının sağlam olduğunu kontrol et") ile use ("o field'lara güven ve cell üzerinde işlem yap") file'ı iki ayrı fetch'te okursa, kötü niyetli bir server check sırasında iyi huylu data, use sırasında kötü niyetli data sunabilir — klasik bir double-fetch, ama user/kernel belleği arasında değil, bir page fault boyunca.

CVE-2024-43641, bir Windows Registry elevation-of-privilege güvenlik açığıdır (CVSS 7.8, AV:L; Microsoft root cause'u CWE-190, reference counting'de integer overflow/wraparound olarak sınıflandırır). Mateusz Jurczyk'in Windows Registry Adventure'da incelediği, remote-share hive loading'in açıkça double-fetch'e yatkın olarak işaret edildiği aynı hive-loading / file-backing problem alanına aittir.

Warning

Atıf nüansı: Project Zero'ya göre, somut "remote network share'lerden hive yüklerken double-fetch" örneği CVE-2024-43452'dir ve CVE-2024-43641 orada, Nisan 2023 ile Kasım 2024 arasında registry kodu genelinde kademeli olarak ele alınan bir integer-overflow-in-refcounting sorunu olarak tarif edilir. İkisi, aynı hive-backing zayıflık kümesinin yakından ilişkili üyeleridir; bu not, double-fetch-under-memory-pressure tekniğini genel olarak kapsar ve belirli bir detayın hangi spesifik CVE'den geldiğini flag'ler. Tüm sınıf için tek bir CVE'yi aşırı iddia etme.

Walkthrough

Bir FFI / double-fetch hive saldırısı için kavramsal reprodüksiyon path'i (açıklayıcı, public disclosure'a dayalı — silahlandırılmış bir zincir değil):

1. Stage a large hive file (~hundreds of MB) on attacker storage so that
   loading it forces real paging activity.
2. Serve it via a malicious SMB server (or a Cloud Filter / network
   redirector provider) that can return DIFFERENT bytes per read request.
3. NtLoadKey* the hive. The kernel validates bin/cell headers as it
   pages cells in.
4. Drive heavy memory pressure so already-validated hive pages are
   evicted from the working set.
5. On the kernel's re-read of an evicted page, the malicious server
   returns mutated header fields (e.g. a size/length/refcount that
   passes no second check) -> the "use" operates on bytes the "check"
   never saw.

Mutate edilen field, iyi huylu bir re-read'i corruption'a çeviren şeydir. Integer-overflow türünde (CVE-2024-43641, CWE-190), hedeflenen field, erken bir free ve ilişkili cell/security-descriptor'ın use-after-free'sini provoke etmek için wrap edilebilen bir reference count'tur.

SMB / Cloud Filter açısı neden önemli

Local NTFS-backed bir hive, ayrıcalıksız bir attacker tarafından read'in ortasında mutate edilemez, dolayısıyla immutability varsayımı tutar. Bir network-backed file o garantiyi kaldırır: re-read içeriği için kernel'in page cache'i değil, server otoriterdir. Landau'nun orijinal FFI gösterimleri (örn. Code Integrity catalog'larına karşı ItsNotASecurityBoundary) aynı check-sonra-page-out-sonra-reuse pattern'ini farklı bir file tipinde exploit eder; j00ru bu sınıfı registry hive'larına uyguladı.

Corruption elde edildiğinde downstream, tanıdık hive path'idir: free edilmiş/yanlış-tipli bir cell -> kontrollü _CM_KEY_VALUE.Data index'i -> _CMHIVE pointer'ları üzerinden KASLR bypass -> arbitrary kernel R/W -> token theft. Bkz. registry-hive-memory-corruption-arbitrary-r-w.

Detection

  • Path'i bir remote share / network redirector'a resolve olan bir hive üzerinde NtLoadKey* çağıran admin olmayan bir process güçlü bir sinyaldir; meşru hive yüklemeleri ezici çoğunlukla local'dir.
  • Bir network hive yüklemesiyle eşzamanlı, ani, kasıtlı memory-pressure üretimi anormaldir.

Mitigation

  • İlgili Patch Tuesday güncellemelerini uygula (CVE-2024-43641 Kasım 2024'te düzeltildi; aynı ailede CVE-2024-43452). Microsoft, etkilenen hive code path'lerini double-fetch / overflow'a karşı sertleştirdi.
  • Savunma açısından, network konumlarından write-sharing olmadan açılan file'ları hâlâ mutate edilebilir olarak ele al: her read'den sonra yeniden validate et ya da içeriği kullanmadan önce trusted belleğe kopyala (genel FFI remediation).

References