Skip to content

House of Apple 3

Aralık içindeki _IO_cookie_jumps vtable'ı ile bir "cookie" FILE forge et ki handler'ı attacker-controlled _IO_cookie_io_functions_t pointer'ları üzerinden çağrı yapsın; bu da kontrollü bir call verir.

Mechanism

Note

fopencookie stream'leri _IO_cookie_jumps vtable'ını kullanır, o da __libc_IO_vtables içinde yaşar ve dolayısıyla _IO_vtable_check aralık testini geçer. Handler'ları (_IO_cookie_read/write/seek/close) cookie FILE'a gömülü _IO_cookie_io_functions_t function pointer'ları üzerinden çağrı yapar ve FILE'ın __cookie değerini ilk argüman olarak geçer. O function pointer'ları attacker-controlled heap data'sıdır ve range-check edilmez, dolayısıyla forge edilmiş bir cookie FILE, kontrollü bir argümanla kontrollü bir call verir. Aşılan sınır House of Apple 2 ile aynıdır (vtable check'in kapsamadığı ikincil dispatch) — ama cookie yolu üzerinden. Uyarı: modern glibc'de cookie pointer'ları PTR_DEMANGLE'lanır, dolayısıyla attacker genelde TLS pointer_guard'ına da ihtiyaç duyar; bu yüzden House of Apple 2 (guard gerektirmez) genelde tercih edilir.

Walkthrough

Kavramsal reçete:

  1. libc'yi leak'le; pointer mangling devredeyse pointer_guard'ı da leak'le/forge et.
  2. vtable = &_IO_cookie_jumps ile sahte bir cookie FILE forge et (io-vtable-check-bypass.md).
  3. __cookie'yi (call'un ilk argümanı) bir "/bin/sh" pointer'ına (ya da istenen arg'a) ayarla.
  4. (Gerekirse mangle edilmiş) system/one_gadget pointer'ını eşleşen cookie-function offset'ine yerleştir.
  5. FILE'ı IO chain'e ekle ve flush/close'u teardown üzerinden tetikle (fsop-via-io-list-all-io-flush-all-lockp.md).

Warning

Cookie pointer'larının mangle edilip edilmediği ve tam offset'ler glibc version'una bağlıdır; her target için doğrula. Bağımsız bir "Apple 3" writeup'ı Apple 2'den daha zor bulunur — altta yatan cookie-jumps primitive'i iyi belgelenmiştir.

Detection

  • fopencookie tarafından oluşturulmamış, _IO_cookie_jumps taşıyan bir stream.
  • libc system/exec*'e demangle olan cookie function pointer'ları.
  • Argüman olarak kullanılan shell string'leri ya da heap pointer'ları içeren __cookie değerleri.

Mitigation

  • Cookie function'ları üzerindeki pointer mangling'i koru ve güçlendir; pointer_guard'ı koru.
  • Cookie dispatch üzerinde CFI; Apple 2'deki gibi FILE-chain integrity hardening.
  • ASLR ve info-leak önleme.

References