Skip to content

Kernel pool overflow from restrictive chunk size (CVE-2021-31969)

Bir integer underflow ile güdümlenen cldflt.sys paged-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):

  1. Crafted reparse-point compression data'sı ile underflow'u tetikle.
  2. 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).
  3. 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 (NtSetInformationToken ile) arbitrary R/W'ye manipüle et.
  4. 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).

References