ziVA (iOS 10.3.1, AppleAVE)¶
Adam Donenfeld'in (Zimperium) iOS ≤ 10.3.1 için tam zincirli kernel exploit'i; AppleAVE (AVEVideoEncoder) driver'ındaki memory-corruption bug'larını ve bir IOSurface race condition'ını kötüye kullanarak arbitrary kernel read/write ve root'a ulaşıyor.
Mechanism¶
Invariant: bir kernel driver'ı kullanıcıdan gelen her handle, pointer ve size'ı validate etmeli
AppleAVE/AVEVideoEncoder, app context'inden erişilebilen bir IOKit media driver'ı. Zincir, driver'ın userspace'ten gelen değerlere güvendiği — IOKit boundary'si üzerinden geçen handle'lar, pointer'lar ve size'lar — ama bunları validate etmediği bir bug ailesini istismar ediyor; sonuç memory corruption (CVE-2017-6989, 6994, 6995, 6996, 6997, 6998, 6999). Ayrı bir IOSurface race condition'ı (CVE-2017-6979), IOSurface::init başarısız olduğunda kısmen initialize edilmiş bir surface object'ini erişilebilir bırakıyor: saldırgan, bozuk object'i hayatta tutmak için refcount'unu artırabiliyor ve bu sırada corrupt property'leri (örn. range dışı bir width) kontrol ediyor; downstream kodu bunu bir heap overflow'a dönüştürüyor.
Kavramsal boundary hatası: sandbox'lanmış bir app, kernel'e app'in seçtiği bir pointer'ı dereference ettirebilmemeli veya app'in seçtiği bir length'e güvendirememeli. Bu tür birkaç primitive'i zincirlemek, sınırlı corruption'ı generic bir arbitrary read/write'a ve nihayetinde kernel kontrolüne yükseltiyor.
Walkthrough¶
Üst seviye, herkese açık Zimperium writeup / PoC README'sinden
- Privilege'siz bir app'ten AppleAVE user client'ını aç ve encode operasyonlarını crafted parametrelerle sür.
- IOSurface init-failure race'ini (CVE-2017-6979) tetikleyerek, property'lerini (örn. width = -1) driver'ın sonradan geçerli kabul ettiği bozuk bir surface'i elde tut; bu kontrollü bir heap corruption'a yol açar.
- AVEVideoEncoder memory-corruption bug'larını kullanarak kernel pointer'larını leak et (KASLR'ı atlat) ve komşu kernel object'lerini corrupt et.
- Leak edilen adresleri ve corruption primitive'lerini stabil bir arbitrary kernel read/write'a zincirle.
- Kernel R/W ile credential'ları / sandbox state'ini patch'leyerek root ve kernel seviyesinde kontrol elde et.
Detection¶
Mobile/EDR bağlamı
- Fix öncesi build'lerde (iOS ≤ 10.3.1)
AppleAVE,AVEVideoEncoderveyaIOSurfacefault'larına atıf yapan crash/panic log'ları — tekrarlayan user-client crash'leri güçlü bir sinyaldir. - MDM integrity/jailbreak attestation başarısızlıkları: beklenmedik root, AMFI/code-signing devre dışı, filesystem remount.
- Olağandışı hacimde AppleAVE/IOSurface IOKit çağrısı yapan app'ler; sideload edilmiş PoC binary'leri (örn.
ziVA). - Mayıs 2017 fix'leri yayınlandıktan sonra hâlâ iOS ≤ 10.3.1 üzerinde kalan cihazlar.
Mitigation¶
- Apple, sekiz CVE'nin tamamını ("multiple memory corruption issues addressed with improved memory handling") iOS 10.3.2 dönemi güncellemesinde patch'ledi — patch'li bir release'e güncelle.
- Sonraki iOS'lerde bu sınıfa direnç gösteren platform hardening: daha katı IOKit user-client argüman validation'ı, IOSurface refcount/lifecycle düzeltmeleri,
zone_require, PAC ve PPL. - Hassas deployment'lar için MDM üzerinden minimum-OS-version ve jailbreak-detection policy'lerini zorunlu kıl; imzasız app kurulumunu kısıtla.