|
|
iOS/MacOS kernel double free due to IOSurfaceRootUserClient not respecting MIG ownership rules | ||||
| Project Member Reported by ianbeer@google.com, Oct 28 | Back to list | ||||
I have previously detailed the lifetime management paradigms in MIG in the writeups for: CVE-2016-7612 [https://bugs.chromium.org/p/project-zero/issues/detail?id=926] and CVE-2016-7633 [https://bugs.chromium.org/p/project-zero/issues/detail?id=954] If a MIG method returns KERN_SUCCESS it means that the method took ownership of *all* the arguments passed to it. If a MIG method returns an error code, then it took ownership of *none* of the arguments passed to it. If an IOKit userclient external method takes an async wake mach port argument then the lifetime of the reference on that mach port passed to the external method will be managed by MIG semantics. If the external method returns an error then MIG will assume that the reference was not consumed by the external method and as such the MIG generated coode will drop a reference on the port. IOSurfaceRootUserClient external method 17 (s_set_surface_notify) will drop a reference on the wake_port (via IOUserClient::releaseAsyncReference64) then return an error code if the client has previously registered a port with the same callback function. The external method's error return value propagates via the return value of is_io_connect_async_method back to the MIG generated code which will drop a futher reference on the wake_port when only one was taken. This bug is reachable from the iOS app sandbox as demonstrated by this PoC. Tested on iOS 11.0.3 (11A432) on iPhone 6s (MKQL2CN/A) Tested on MacOS 10.13 (17A365) on MacBookAir5,2 This bug is subject to a 90 day disclosure deadline. After 90 days elapse or a patch has been made broadly available, the bug report will become visible to the public.
Project Member
Comment 1
by
ianbeer@google.com,
Oct 28
,
Today
(14 hours ago)
Apple advisory: https://support.apple.com/en-us/HT208334
,
Today
(14 hours ago)
async_wake exploit attached. Gets tfp0 on all 64-bit devices plus an initial PoC local kernel debugger. See the README and kdbg.c for details.
,
Today
(14 hours ago)
,
Today
(11 hours ago)
,
Today
(10 hours ago)
Thank you for the Jailbreak exploit! We appreciate your work
,
Today
(10 hours ago)
thanks for sharing =)
,
Today
(8 hours ago)
thank you for your research and sharing!
,
Today
(6 hours ago)
when it has been ran what do i do after that? if anything?
,
Today
(2 hours ago)
as always Nice work! pretty impressed.
,
Today
(104 minutes ago)
You’re brilliant Ian, always sharing your knowledge to the community . Thank u so much. |
|||||
| ► Sign in to add a comment | |||||