本仓库包含一个基于 TheFlow 的 IPV6 释放后使用(UAF)漏洞 的 PS5 内核漏洞利用的实验性 WebKit ROP 实现,该漏洞已在 HackerOne 上报。漏洞利用策略大体上基于 TheFlow 的 BSD/PS4 PoC,并做了一些修改以适应该死人的 PS5 内存布局(更多内容见 研究笔记 部分)。它建立了一个任意读取 /(半任意)写入原语。此漏洞利用及其能力存在许多限制,因此它主要面向开发人员,用于对系统的某些部分进行逆向工程。
随着最新的稳定性改进,可靠性约为 80%。本文档将包含有关 PS5 的研究信息,并且此漏洞利用将持续开发并在未来继续改进。
有兴趣为 PS5 研究/开发做出贡献的人可以加入我设置的 discord:这里。
该漏洞利用现在应支持以下固件:
dns.conf 配置 fakedns,将 manuals.playstation.net 指向你 PC 的 IP 地址python fakedns.py -c dns.confpython host.py0.0.0.0
要使用 ELF 加载器,请运行漏洞利用直到完成。完成后,它将在 :9020 端口上运行一个服务器。连接并将你的 ELF 通过该端口发送到 PS5,它就会运行它。假设 ELF 不会使浏览器崩溃,那么它可以无限地继续运行 ELF。
此漏洞利用分 5 个阶段工作,并且大体上遵循与 theflow 的 poc 相同的利用策略。
ip6_pktopts 上的初始 UAF,并使两个套接字指向同一个 pktopts / 重叠(主套接字 <-> 重叠喷射套接字)pktopts,并使用包含标记 tclass 重叠的 ip6_rthdr 喷射来伪造它。pktopts/rthdr 重叠从 0x200 slab 泄漏 kqueue,并从 0x100 slab 泄漏 pktopts。pktopts 并找到重叠套接字,以使用 IPV6_RTHDR 作为读/写原语。此漏洞利用的稳定性约为 30% 80-90%,并且有两个潜在的失败点。按观察到的可能性降序排列:
根据使用读取原语进行的各种测试和转储,PS5 似乎已恢复到 0x1000 页大小,而 PS4 是 0x4000。
在 PS5 上,相邻页面似乎也很少属于同一个 slab,因为你会看到相邻页面中的数据差异很大。内存布局似乎更加分散。
通常当 PS5 panic(至少在 webkit 上下文中)时,会出现糟糕的音频输出,因为音频缓冲区以某种方式被破坏。
有时这种音频损坏会持续到下次启动,不知道为什么。
与 PS4 类似,PS5 在 panic 后需要手动按主机上的电源按钮两次才能重启。
如果 PS5 与互联网隔离,那么从 panic 中重启需要非常长的时间是正常的(不幸的是)。预计启动需要 3-4 分钟。