House of Snake¶
IO dispatch'ine
_IO_wfile_seekoff'ta giren,_IO_switch_to_wget_mode→_IO_WOVERFLOW'u süren bir wide-data FSOP technique'i; böylece attacker-kontrollü_wide_vtableçağrılır (House of Apple 2 ile aynı wide-data primitive'i, seekoff path'i üzerinden).
Mechanism¶
Note
House of Snake modern wide-character FSOP ailesine aittir. _IO_wfile_overflow
(House of Apple 2) üzerinden girmek yerine, wide-data çağrısına
_IO_wfile_seekoff üzerinden ulaşır ki bu _IO_switch_to_wget_mode'u ve
nihayetinde wide data üzerinde _IO_WOVERFLOW'u invoke eder. Ailenin geri
kalanında olduğu gibi, kullanılan primary vtable meşru, in-range bir table'dır
(dolayısıyla _IO_vtable_check'i geçer), ama _wide_data->_wide_vtable
üzerinden sonuçlanan çağrı range-check edilmez — aşılan sınır o secondary
dispatch'tir. Seekoff giriş noktası House of Cat ve kylebot'un angry-FSROP
araştırmasının popülerleştirdiği aynı noktadır; onu seçmek düz overflow path'inin
sağlamadığı trigger koşullarını sağlayabilir.
Walkthrough¶
Kavramsal reçete (wide-data seekoff ailesi):
- libc'yi leak et; bir arbitrary write veya bir largebin-attack write primitive'i elde et.
- Effective dispatch edilen slot'u
_IO_wfile_seekoff'a inen bir FILE forge et (genellikle hâlâ validate edilen aralık içinde shifted bir vtable base üzerinden, io-vtable-check-bypass.md). - Field'ları şekillendir ki
_IO_wfile_seekoff_IO_switch_to_wget_mode'a girsin, ki bu wide data üzerinde_IO_WOVERFLOW'u çağırır. _wide_data/_wide_vtable'ı kontrol et ki sonuçlanan çağrısystem/setcontext'e insin.- Fake FILE'ı IO chain'ine yerleştir (
stderr/_IO_list_allüzerinde largebin attack) veexit/__malloc_assertüzerinden tetikle (fsop-via-io-list-all-io-flush-all-lockp.md).
Warning
Slot offset'leri ve seekoff path'i glibc'ler arasında farklıdır; target başına
doğrula. Technique adı public ders index'lerinde geçer ama bağımsız bir
deep-dive House of Apple 2 / House of Cat'ten daha az erişilebilirdir —
documented olan kısım altta yatan _IO_wfile_seekoff mekanizmasıdır.
Detection¶
__libc_IO_vtablesiçinde vtable base'i shifted/olağandışı olan wide stream'ler.__libc_IO_vtablesdışına işaret eden_wide_vtable;_IO_switch_to_wget_mode/_IO_WOVERFLOW'tan non-allocator address'lere indirect çağrılar.- Teardown'dan önce gelen FILE-chain / largebin write'ları.
Mitigation¶
- Validation'ı wide
_wide_vtable'a genişlet; wide-data dispatch üzerinde CFI. - Largebin/
_IO_list_allintegrity hardening'i (safe-linking-tarzı). - ASLR ve info-leak engelleme.