Heap header (cookie/encoding) bypass¶
XOR-encoded Windows NT-heap
_HEAP_ENTRYheader'ı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):
- Komşu bir chunk'ın encode edilmiş
_HEAP_ENTRY'sine bir OOB read elde et. - Cookie'yi geri kazan:
Encoding = leaked_header XOR expected_plaintext_header(Size/Flags bilinen bir allocation için öngörülebilirdir). - İ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ılanEncodingile XOR-encode et. - Encode edilmiş sahte header'ı overflow/OOB write aracılığıyla hedef chunk'ın metadata'sının üzerine yaz.
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.Encodingfield'ı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
SubSegmentCoderandomizasyonu; 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.