Byepervisor Reborn
注意:本仓库应被视为一个供后续开发工作构建其上的基础漏洞利用程序。就当前发布状态而言,它对普通用户并无用处,面向的是开发者。
摘要
PS5 hypervisor(管理程序)漏洞利用,适用于 6.xx - 13.60 固件。漏洞细节可参见此处。该漏洞最初由 theflow0 发现,最近又有更多人在 LLM 的辅助下相继发现。简单来说,在 S3 恢复时,startup_mp hypercall 会在核心 0 上被调用,用于初始化其他 AP 核心(1-15),并接受一个复位向量(rip)作为参数之一,用于指定核心从何处开始执行。在此期间,核心 1-15 上会应用一种不安全的嵌套页表(NPT)配置。我们可以滥用这一点来运行一段 shellcode,从而对 hypervisor 的地址空间进行读写,包括 VM 控制块(VMCB)。
与旧版 Byepervisor 的(某个版本)非常相似,这次同样利用了 rest mode(待机模式)路径 :)
目前只有以下固件获得完整支持:
- 13.60
- 13.20
- 13.00(未测试)
不过从技术上讲,该漏洞理论上最低可利用至 6.xx。经过修改,它也能在 14.00 上工作,但此处并未提供,尤其是因为目前反正也没有公开的 14.00 内核漏洞利用。
重要说明
- 你可能需要前往 设置 -> 系统 -> 省电 -> 休息模式下可用的功能
- 将「为 USB 端口供电」设为「始终」
- 此 payload 设计为通过 elfldr 运行
- 这一点比较重要,因为该 payload 需要在从 rest mode 恢复后继续运行,而这依赖 elfldr 来实现
- 恢复后,此 payload 应使系统处于可以转储并修补内核的状态
- XOM/xotext 已被禁用,写入已启用
- 恢复时,它会通过系统通知打印内核 .text 段的前 8 个字节,以演示 XOM 已被突破
- 此程序不附带任何补丁(HEN 或其他)
- 可以把这理解为「补丁自带」模式,我们懒得做这个了。
- 此 payload 需要能够识别主机是 pro 版还是非 pro 版
- Sony 决定把 pro 版多出的 2GB 宝贵 DDR5 内存浪费在 hypervisor 上,因此它被映射到不同的物理地址范围
- 非 pro 版为物理地址
0x062800000 - pro 版为物理地址
0x8E0800000
- 非 pro 版为物理地址
- 如果 payload 错误识别了你的主机类型,请提交 issue,并注明通知中括号内打印的十六进制值
- Sony 决定把 pro 版多出的 2GB 宝贵 DDR5 内存浪费在 hypervisor 上,因此它被映射到不同的物理地址范围
- 如果从 rest mode 恢复时系统直接关机,说明漏洞利用失败
- 如果失败了,很可能是 payload 存在问题,你的情况不受支持;此漏洞利用应达到 99.9% 的稳定性
构建说明
此漏洞利用 payload 使用 PS5-Payload-Dev SDK 构建。另请注意,break_hv_payload/ 的构建方式略有特殊,因为它会被编译成一个体积最小的扁平二进制文件。break_hv_payload/ 中的全部代码均在 supervisor/内核模式下运行。
添加固件支持
要为其他固件添加支持,主要需要添加的是 include/offsets/ 目录下的头文件,其中包含所需的全部内核偏移量。
添加偏移量后,需要修改以下函数,在 switch 语句中添加相应分支:
kgadget()kdlsym()rawoff()
某些固件可能需要更大幅度的修改,如果它们不存在所需的 gadgets。例如 6.xx 可能缺少 13.xx 上使用的一些 gadgets。
使用方法
- 运行内核漏洞利用链并进入 elfldr
- 发送
byepervisor.elf - 按照系统通知的指引操作