Skip to content

CLFS base log file (.BLF) metadata corruption EoP (CVE-2022-37969)

Windows Common Log File System driver'ında, .BLF base-block metadata'sını corrupt ederek ulaşılan bir out-of-bounds write; in the wild bir 0day olarak kullanılıp standart bir user'dan SYSTEM'e privilege escalation sağladı.

Mechanism

Kırılan invariant

CLFS (CLFS.sys), base block'u self-describing metadata içeren bir Base Log File (.BLF) parse eder: bir client-context offset array, symbol zone'lar ve bir sector-signature array. Driver, dosya içindeki offset/size alanlarına sıkı bir bounds validation olmadan güvenir. CVE-2022-37969, SignaturesOffset alanının validation'ının eksik olmasından kaynaklanır: özenle hazırlanmış bir client-context offset array, state'i bir log reset'i zorlayan sahte bir Client Context'i referans alır. Metadata flush sırasında sector-signature array öyle yazılır ki SignaturesOffset ile overlap eder ve onu corrupt eder. Corrupt olan offset, symbol allocation sırasındaki cbSymbolZone sanity check'ini atlatır ve bir kernel container/context pointer'ını bozan kontrollü bir out-of-bounds write üretir. Düşük yetkili bir user .BLF'i kendisi oluşturabildiği için bu, user→kernel sınırını aşar (CWE-787, out-of-bounds write).

Walkthrough

Bu, public ve patch'lenmiş advisory'den çıkarılmış kavramsal bir reproduction'dır. Kesin offset'ler ya da kullanıma hazır bir exploit verilmiyor.

  1. Base-block metadata'sı ve client-context offset array'i bir fake Client Context'e işaret eden zararlı bir .BLF oluştur.
  2. BLF'i aç ki CLFS sector-signature array'i yeniden yazsın ve SignaturesOffset'i anormal bir değere corrupt etsin.
  3. Container operasyonlarını tetikle ki symbol allocation corrupt olan offset ile çalışsın ve cbSymbolZone check'ini atlasın.
  4. Geçersiz zone size, bir komşu container-context pointer'ının üzerine yazan oversized/yanlış konumlanmış bir write'a yol açar.
  5. Corrupt olan pointer'ı attacker-controlled data'ya yönlendir ki sonraki bir dereference (örn. handle close'da) bir kernel write primitive'i versin.
  6. Primitive'i data-only bir privilege escalation için kullan (bkz. EPROCESS token stealing).
Bug kavramsal olarak nerede yaşıyor

Bug, klasik bir file-format-driven corruption'dır: parser, attacker tarafından oluşturulmuş offset/size alanlarının güvenilir on-disk yapıları tarif ettiğine inanır. Fix, bu metadata alanları için daha sıkı bir validation ekler.

Detection

  • Düşük yetkili / non-system process'lerin, özellikle user-writable directory'lerden, alışılmadık .BLF dosyaları oluşturması veya açması.
  • Win32.Exploit.CVE-2022-37969 gibi AV/EDR signature hit'leri.
  • Standart bir user process'inin aniden SYSTEM olarak child spawn etmesi (token anomalisi).
  • BLF handling ile ilişkili CLFS.sys içindeki bugcheck'ler / crash'ler.
  • Non-administrative hesaplardan gelen beklenmedik CLFS handle aktivitesi.

Mitigation

  • Eylül 2022 Patch Tuesday güncellemesini uygula (CVE-2022-37969, CISA Known Exploited Vulnerabilities katalogunda — patch'lemek zorunlu).
  • Güvenilmeyen user context'lerinden .BLF dosyalarının oluşturulmasını kısıtla ve monitor et.
  • EDR'yi cloud-delivered protection açık şekilde block mode'da çalıştır.
  • Least privilege uygula ki standart user'lar özenle hazırlanmış log dosyalarını kolayca stage edemesin.
  • Desteklendiği yerlerde HVCI / VBS gibi kernel mitigation'larını açık tut.

References