Skip to content

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):

  1. libc'yi leak et; bir arbitrary write veya bir largebin-attack write primitive'i elde et.
  2. 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).
  3. 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.
  4. _wide_data/_wide_vtable'ı kontrol et ki sonuçlanan çağrı system/setcontext'e insin.
  5. Fake FILE'ı IO chain'ine yerleştir (stderr/_IO_list_all üzerinde largebin attack) ve exit/__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_vtables içinde vtable base'i shifted/olağandışı olan wide stream'ler.
  • __libc_IO_vtables dışı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_all integrity hardening'i (safe-linking-tarzı).
  • ASLR ve info-leak engelleme.

References