House of Apple 3¶
Aralık içindeki
_IO_cookie_jumpsvtable'ı ile bir "cookie" FILE forge et ki handler'ı attacker-controlled_IO_cookie_io_functions_tpointer'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:
- libc'yi leak'le; pointer mangling devredeyse
pointer_guard'ı da leak'le/forge et. vtable = &_IO_cookie_jumpsile sahte bir cookie FILE forge et (io-vtable-check-bypass.md).__cookie'yi (call'un ilk argümanı) bir"/bin/sh"pointer'ına (ya da istenen arg'a) ayarla.- (Gerekirse mangle edilmiş)
system/one_gadget pointer'ını eşleşen cookie-function offset'ine yerleştir. - 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¶
fopencookietarafından oluşturulmamış,_IO_cookie_jumpstaşı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
__cookiedeğ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.