Smith (kfd PUAF)¶
Public
kfdprojesindeki, WebContent'ten erişilebilen bir physical-use-after-free (PUAF) yöntemi; bir XNU virtual-memory integer overflow'u (CVE-2023-32434) üzerine kurulu olup, iOS/macOS'ta kernel read/write'ı bootstrap etmek için kullanılabilen dangling page-table entry'leri bırakır.
Mechanism¶
Note
kfd ("kernel file descriptor"), exploit yöntemlerinin tamamı bir PUAF primitive'inde
— physical use-after-free — birleşen public bir araştırma projesidir.
Normal bir UAF'tan (bir virtual address'e dangling pointer) farklı olarak, bir PUAF,
process'e kernel'in free ettiği ve realloc edebileceği physical page'leri hâlâ map'leyen
dangling page-table entry'leri (PTE'ler) bırakır. puaf_smith'in kırdığı invariant,
XNU'nun memory-entry / mapping size aritmetiği etrafındaki VM accounting'inin
bütünlüğüdür: CVE-2023-32434, XNU virtual-memory handling'inde
(mach_make_memory_entry_64-ailesi size math'i) bir mapping'in, altta yatan physical
page'ler için kernel'in bookkeeping'inden daha uzun yaşamasına izin veren bir integer
overflow'dur. Sonuç dangling PTE'lerdir — user space, kernel'in daha sonra taze kernel
object'lerine verdiği physical page'leri okuyup yazabilir.
puaf_smith dikkat çekicidir çünkü WebContent sandbox'ından erişilebilir; bu da
CVE-2023-32434'ü bir browser-to-kernel basamak taşı yapar (Apple'ın in the wild istismar
edilmiş olabileceğini işaretlediği ve deterministik "Trigon" exploit'inin temelini oluşturan
aynı CVE; kfd, bunu physpuppet ve landa ile birlikte birkaç PUAF yönteminden biri olarak
paketler).
Walkthrough¶
High-level, public kfd writeup'larından (exploiting-puafs.md):
- Bir physical page kümesi üzerinde dangling PTE'ler (PUAF primitive) elde etmek için VM size-overflow bug'ını tetikle.
- Kernel'i, bu artık-dangling physical page'leri seçilmiş, manipüle edilebilir bir kernel object'iyle realloc etmeye zorla.
- Hayatta kalan PTE'ler üzerinden, kernel tarafı kontrolü olmadan o object'i doğrudan user space'ten oku/değiştir.
- İlk bir
kread/kwriteyöntemini bootstrap et, ardından bunu stabil, generic bir kernel read/write (KRKW) primitive'ine zincirle.
Warning
Bug'ı tetikleyen tam aritmetik, realloc için seçilen object ve KRKW bootstrap'ı public repo'da yer alıyor ve burada kasıtlı olarak yeniden verilmiyor. Bu giriş kavramsaldır.
Detection¶
- Managed Apple filolarında: fix'in (iOS 16.5.1 / macOS 13.4.1) altındaki cihazlar MDM minimum-OS politikasıyla işaretlenir — birincil maruziyet sinyali.
- VM map / memory-entry teardown'a ya da physical-page reuse tutarsızlıklarına atıf yapan panic log'ları; sandbox'lı bir app'ten veya WebContent'ten gelen tekrarlı VM-ilişkili kernel panic'leri.
- Downstream jailbreak/compromise göstergeleri: untrusted içeriğin browser tarafından render
edilmesinin ardından beklenmeyen kernel read/write, unsigned code execution veya
kernel_task-eşdeğeri erişim.
Mitigation¶
- Patch: CVE-2023-32434, iOS 16.5.1 ve macOS 13.4.1'de fix'lendi — cihazları güncel tut; MDM üzerinden minimum-OS zorla.
- Apple platform savunmaları (PPL/SPTM, PAC,
kalloc_typezone segregation, page protection) bir PUAF'ı kalıcı kernel kontrolüne çevirmeyi kısıtlar; bkz. page-protection-layer-bypass-via-debug-registers ve pac-signing-gadget-bypass. - Lockdown Mode, WebContent'ten erişilebilen bir zinciri besleyecek remote attack surface'i azaltır.