Skip to content

Smith (kfd PUAF)

Public kfd projesindeki, 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):

  1. Bir physical page kümesi üzerinde dangling PTE'ler (PUAF primitive) elde etmek için VM size-overflow bug'ını tetikle.
  2. Kernel'i, bu artık-dangling physical page'leri seçilmiş, manipüle edilebilir bir kernel object'iyle realloc etmeye zorla.
  3. Hayatta kalan PTE'ler üzerinden, kernel tarafı kontrolü olmadan o object'i doğrudan user space'ten oku/değiştir.
  4. İlk bir kread/kwrite yö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_type zone 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.

References