Skip to content

Heap header (cookie/encoding) bypass

XOR-encoded Windows NT-heap _HEAP_ENTRY header'ını (ve freelist/LFH cookie'lerini) — genellikle per-heap Encoding değerini leak ederek — boşa çıkar, böylece sahte bir chunk header'ı free/coalesce sırasındaki validation'dan sağ çıksın.

Mechanism

Note

Windows NT heap'inde her chunk'ın _HEAP_ENTRY header'ı (size, flags, SmallTagIndex/checksum), _HEAP yapısında tutulan per-heap, per-process rastgele bir Encoding değeriyle XOR-encode edilir ve free sırasında bir checksum byte'ı (önde gelen header byte'larının XOR'u) doğrulanır. Security boundary, bir saldırganın gizli Encoding olmadan geçerli bir header yazamamasıdır. Bir unlink tarzı ya da freelist attack çalıştırmak için sahte header'ın makul bir chunk'a decode olması gerekir, bu yüzden saldırganın Encoding'i geri kazanması gerekir — tipik olarak bir OOB read ile komşu bir encode edilmiş header'ı leak edip onu öngörülebilir plaintext'ine karşı XOR'layarak. LFH, chunk adresini, heap base'ini ve bir LFH key'ini karıştıran ayrı bir SubSegmentCode encoding'i ekler; legacy freelist'ler bir SafeUnlink / FreeEntryOffset cookie'si ekledi.

Walkthrough

Kavramsal tarif (public Windows-heap writeup'larından):

  1. Komşu bir chunk'ın encode edilmiş _HEAP_ENTRY'sine bir OOB read elde et.
  2. Cookie'yi geri kazan: Encoding = leaked_header XOR expected_plaintext_header (Size/Flags bilinen bir allocation için öngörülebilirdir).
  3. İstenen plaintext header'ı oluştur (örneğin chunk'ları kapsayan oversized bir Size, geçerli Flags, eşleşen checksum byte'ı) ve onu geri kazanılan Encoding ile XOR-encode et.
  4. Encode edilmiş sahte header'ı overflow/OOB write aracılığıyla hedef chunk'ın metadata'sının üzerine yaz.
  5. free/coalesce tetikle ki sahte header validation'ı geçsin → daha ileri exploitation için chunk overlap / UAF / kontrollü bir write.

Warning

Encoding field offset'leri ve LFH SubSegmentCode formülü Windows build'leri arasında (x86/x64/wow64) farklılık gösterir; hedefe karşı doğrula.

Detection

  • Heap-corruption telemetrisini etkinleştir: HeapEnableTerminationOnCorruption, gflags/PageHeap, test'te Application Verifier.
  • Heap chunk'larına komşu OOB-read pattern'larında ve heap-validation abort'larında uyar.
  • _HEAP.Encoding field'ında watchpoint'ler / encode edilmiş header'ların beklenmedik read'leri.

Mitigation

  • Header encoding + checksum'ın kendisi (heap/process başına randomize edilmiş) ve LFH SubSegmentCode randomizasyonu; SafeUnlink/FreeList cookie check'leri.
  • Terminate-on-corruption ve modern segment heap hardening'i.
  • Heap base'ini ve Encoding'i gizli tutmak için ASLR; info leak'leri minimize et.

References