Kernel pool overflow from restrictive chunk size (CVE-2021-31969)¶
Bir integer underflow ile güdümlenen
cldflt.syspaged-pool overflow'u olan CVE-2021-31969'un ve küçük, izole bir allocation'dan kaçmakta kullanılan "restrictive chunk size" grooming'inin kavramsal kataloğu.
Mechanism¶
Root cause
cldflt.sys (Windows Cloud Files Mini Filter), reparse-point /
placeholder data'sını HsmpRpiDecompressBuffer'da işler. Attacker-controlled
bir length reparse data'sından alınır, +8 eklenir ve küçük bir kernel
allocation'ı boyutlandırmak için kullanılır, ama daha sonra değer
RtlDecompressBuffer'a geçirilmeden önce -12 çıkarılır. Length 0 ile
çıkarma 0xFFFFFFF4'e underflow eder; LZNT1 header'ını "uncompressed"
işaretlemek decompress'i bir memcpy gibi davrandırır ve controlled bir
paged-pool overflow verir.
"Restrictive chunk size" problemi şu: overflow, LFH'in normalde izole edeceği sabit küçük (0x20-byte) bir allocation'dan başlar — dolayısıyla bug, kullanışlı bir komşuya ulaşmak için grooming'e ihtiyaç duyar.
Walkthrough¶
Üst düzey (ZDI "Underflowing in the Clouds", STAR Labs):
- Crafted reparse-point compression data'sı ile underflow'u tetikle.
- Isolation'dan kaç. Farklı türden subsegment'ler bitişik hale gelsin diye
hem LFH bucket'larını hem de Variable-Size (VS) subsegment'leri (
_WNF_STATE_DATA,_TOKEN, termination port gibi nesneler kullanarak) spray'le (kernel-low-fragmentation-heap-exploitation'a bak). - Daha güçlü bir komşuya boundary'yi geç: relative bir R/W primitive için
bir WNF state-data size field'ını corrupt et, bitişik bir
_TOKEN'a pivot yap, onu (NtSetInformationTokenile) arbitrary R/W'ye manipüle et. - Escalate. SYSTEM
EPROCESS'i bul ve onun token'ını çal.
Detection¶
- Malformed compression header'larıyla cloud placeholder dosyalarını / reparse point'leri manipüle eden non-admin process'ler.
cldflt.sys'i adlandıran bugcheck'ler; low-priv bir process ile korele olan pool-corruption bugcheck'leri (0x19, 0xC2).- Bir cldflt crash'inden hemen önce WNF state / token / object oluşturma patlamaları; aniden SYSTEM olarak çalışan bir non-system process.
cldflt.sysüzerinde Special Pool / Driver Verifier overflow'u açığa çıkarır.
Mitigation¶
- Microsoft'un fix'i (Patch Tuesday, 8 Haziran 2021), alınan length'in ≥ 4 olmasını şart koşar ve underflow'u ortadan kaldırır. Haziran 2021+ cumulative update'leri uygula.
- Segment LFH/VS pool hardening cross-type adjacency'yi azaltır; kullanılmadığı yerde Cloud Files özelliğini devre dışı bırak.
- CVSS 3.1 7.8 (High).