ESC
科技 1 分钟阅读

Byepervisor-Reborn:PS5 hypervisor 漏洞利用工具重磅回归,支持最高 13.60 固件

开发者发布 PS5 hypervisor 漏洞利用项目 Byepervisor-Reborn,支持 6.xx 至 13.60 固件。该漏洞最初由知名黑客 theflow0 发现,利用 S3 恢复时 startup_mp hypercall 触发的不安全嵌套页表配置,获得对 hypervisor 地址空间(含 VMCB)的读写能力,可转储并修补内核,为 PS5 破解社区打开新大门。

来源:GitHub

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
    • 如果 payload 错误识别了你的主机类型,请提交 issue,并注明通知中括号内打印的十六进制值
  • 如果从 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。

使用方法

  1. 运行内核漏洞利用链并进入 elfldr
  2. 发送 byepervisor.elf
  3. 按照系统通知的指引操作