
Um exploit de hipervisor para PS5 em firmwares 1.xx-2xx.
Exploit do hypervisor do PS5 para firmware <= 2.xx. Duas vulnerabilidades e cadeias de exploit estão contidas no repositório, são independentes entre si e qualquer uma pode ser usada. Um exploit é fornecido principalmente apenas para preservação (/_old_jump_table_exploit), apenas a cadeia de exploit primária precisa ser usada (exploit de flags de QA).
Esta pesquisa foi apresentada na hardwear.io NL 2024, os slides podem ser encontrados aqui. A palestra será publicada em breve.
Exploit de Jump Table
O primeiro exploit usa uma vulnerabilidade em que as jump tables do código do hypervisor são compartilhadas com o kernel convidado, e está contido em /_old_jump_table_exploit/. Ao sequestrar a entrada da jump table para a hiperchamada VMMCALL_HV_SET_CPUID_PS4, a execução de código no hypervisor pode ser alcançada. Executamos uma cadeia de ROP que desativa a Nested Paging (NPT) e a Guest Mode Execute Trap (GMET), o que nos permite desativar a eXecute Only Memory (XOM), também conhecida como xotext, nas entradas da tabela de páginas (PTEs) do kernel para despejá-la, além de permitir a escrita nas PTEs para também fazer hook/patch no kernel.
Este método requer um bom número de gadgets e offsets, que é a principal razão pela qual este exploit não é o principal. Atualmente, ele também só quebra o hypervisor no núcleo em que a cadeia de ROP é executada; o hypervisor ainda está ativo em outros núcleos e precisaria ser desativado.
Exploit de Flags de QA
O exploit principal e recomendado aproveita o fato de que as flags de Quality Assurance (QA) do sistema são compartilhadas entre o hypervisor e o kernel convidado. Quando o hypervisor inicializa, o código de inicialização para construir as tabelas de páginas aninhadas verifica as flags de QA para a flag de depuração System Level (SL). Se essa flag estiver definida, as entradas da tabela de páginas aninhadas (PTEs) não terão o bit xotext definido para as páginas .text do kernel e, além disso, as páginas .text do kernel também terão o bit de escrita definido.
Essas flags não são reinicializadas pelo secure loader ao retomar do modo de suspensão, embora o hypervisor seja. Ao definir a flag SL, colocar o sistema em suspensão e retomar, podemos editar as tabelas de páginas do kernel convidado para tornar as páginas .text do kernel legíveis/graváveis, permitindo o despejo do kernel e hooks/patches.
Este payload de exploit é compilado usando o PS5-Payload-Dev SDK. Observe também que a compilação de hen/ é um pouco especial, pois é compilada em um binário flat que é copiado para uma code cave do kernel. A totalidade do código em hen/ é executada em modo supervisor/kernel.
byepervisor.elfbyepervisor.elf novamente (se você usar o carregador de ELF do John Tornblom, o carregador de ELF deve continuar aceitando payloads após a retomada; se não, o exploit UMTX precisará ser executado novamente)byepervisor.elf só precise ser enviado uma vezOs interessados em contribuir com a pesquisa/desenvolvimento para PS5 podem entrar em um discord que eu configurei aqui.