iOS17.3.1越狱降至?
“在iOS17.4中,有一处变化我认为与Rocket:GFX的一个补丁有关。arm_arch_resume_uat 过去会从内存加载ttbrO/1的原始值,现在不再这样做了。在此更改之前,当GFX从休眠状态唤醒时,它会直接从内存加载指向根级页表的指针。这意味着,如果攻击者能够控制内存,他们就可以在恢复时加载自己的伪造页表,从而绕过uPPL,然后利用完全的物理内存访问权限,在AP上创建一个自引用PTE,以绕过 AP PPL/SPTM”
——————

用的17.1+的漏洞
到时候17.0的可能会尴尬哦
官网比较复杂,可私信我“pdf”,自动获取网页长截图pdf,反正天文
下方为截图






凑点哈
——————
利用
设置自引用PTE条目的功能最初会在com.apple.iokit.IOGPUFamily、com.apple.AGXG<xyz>kexts和GFX固件上做大量偏移查找。之后它试图从backboardd偷取IOGPU端口(不明白他们已经有SpringBoard的IOGPU端口,为什么还要再偷一次)。如果他们能拿到端口,就会创建一个新的命令队列和两个共享内存对象。然后它们会在两个共享内存对象上提交命令缓冲区,沿着内核中的指针链找到它们的内核地址,然后利用物理映射原语将它们映射到地址空间。但该功能也支持在没有被盗端口的情况下运行。一旦他们完成所有偏移量和IOGPU设置,就会为GFX创建假页面表,并为自指向AP PTE准备映射。
为此,他们使用了另一个原语:能够kalloc内存,虽然他们不拥有,但内核拥有。根据XNU版本,他们要么将ipc_port_request_table扩展到想要的大小,然后从受害者端口移除,要么有两种不同的方法利用Mach消息的后端缓冲区来分配内存。他们需要这样做的原因是,即使进程不存在,也能让GFX内存保持活跃。
映射准备好后,他们会建立一个ROP链,准备在GFX上执行。根据SoC,他们执行三种ROP链中的一条。从高层视角来看,所有ROP链都围绕着进入受控休眠状态进入休眠,这样通过状态控制唤醒时,它们才能恢复代码执行能力,并且同时运行完全受控的页表。一般来说,他们的 ROP 链会:恢复入口点(以避免再次执行 ROP 链),设置休眠数据结构,使其能够通过受控的页表重新获得代码执行,然后返回正常执行并等待休眠或自行触发休眠。然后一旦他们从休眠中醒来,并用假页面表重新获得代码执行,就会在AP上设置自引用PTE,然后优雅地退出ROP,继续正常执行。
为了启动链条,他们会在GFX作业列表中插入一个只包含单个GPU围栏/盖章操作的作业。这为GFX提供了32位写入原语。通过这个32位写入,它们覆盖电源线程的线程状态指针指向自己的线程(他们覆盖1-5字节,允许对指针的32位完全控制,除了底部字节外),然后将假对象对齐到与原始指针相同的底部字节)。这让他们能够在权力线程再次调度时,获得代码的执行权限。当他们有被盗端口时,可以通过外部方法(以及对数据结构进行一些补丁插入那个错误的围栏操作)向GFX提交作业,而没有这个方法时,他们会用物理映射原语映射作业列表,并直接将作业插入其中。
夜雨聆风