← Feed
@zhuowei@notnow.dev
2026-07-03 18:18 UTC
Still reading through gracecondition’s DirtySlide writeup (https://gracecondition.github.io/posts/dirtyslide/).
The writeup says it’s only usable in a macOS virtual machine - not a physical macOS/iOS device. Has anyone looked further into this?
The writeup gives two reasons:
Triggering 536 in the vulnerable context needs an application sandbox bypass.
iOS does support residing shared caches:
https://projectzero.google/2021/01/a-look-at-imessage-in-ios-14.html#:~:text=for%203rd%20party%20apps%20this%20means says that if an app crashes inside the shared region, launchd will re-launch the process next time with _POSIX_SPAWN_RESLIDE.And the shared_region_map_and_slide_2_np syscall exists
iOS should allow the syscall, at any rate:
https://github.com/Lessica/iOS-Sandbox-Profiles/blob/9bf1164cee918fcbf09bb918ef277d2dccfe8078/profiles/23C55__iPhone12%2C1/builtin_collection/container/container.sb#L9789
(unless you’re in lockdown mode in WebKit?)
https://github.com/WebKit/WebKit/blob/30dcf5d1c9402dea5a26158e103f7e4333a7eac2/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in#L1241
It also needs an SPTM (Secure Page Table Monitor) bypass
Do you have to spray page tables or can you spray something else that also lands in the physmap?
I mean, I doubt anyone will actually look into this, since a kernel r/w isn’t enough for a jailbreak. It can only do kfd-style mods, and we already have those on iOS 26.0 via Darksword.
Replies (1)
-
@zhuowei@notnow.dev everything "lands" in the physmap. It's a linear mapping of all DRAM managed by XNU/SPTM. So you should be able to pick any target, the difficulty is just that a whole bunch of page types (page tables, SPTM/TXM/Exclave memory, zalloc_ro, any page with executable code) are gonna have their permissions flipped to readonly, so you'd need a way to reliably avoid those or you'd be likely to panic.
In addition, getting into a position where you can spawn a binary on iOS... that's a tall order. And it's possible that, under a release iOS kernel, dyld ignores a bunch of env variables that you need in order to pull this off... but I don't know for sure if this is the case, grep for amfiFlags in dyld src.
Open ##4158044