
Un exploit dell'hypervisor di PS5 per i firmware 1.xx-2xx.
Exploit dell'hypervisor per PS5 per firmware <= 2.xx. Nel repository sono contenute due vulnerabilità e relative catene di exploit, indipendenti tra loro; è possibile usarne una qualsiasi. Un exploit è fornito principalmente per preservazione (/_old_jump_table_exploit), serve solo la catena di exploit primaria (exploit dei flag QA).
Questa ricerca è stata presentata a hardwear.io NL 2024, le slide sono disponibili qui. Il talk sarà pubblicato a breve.
Exploit della Jump Table
Il primo exploit sfrutta una vulnerabilità in cui le jump table del codice dell'hypervisor sono condivise con il kernel guest, ed è contenuto in /_old_jump_table_exploit/. Dirottando la voce della jump table per l'hypercall VMMCALL_HV_SET_CPUID_PS4, si può ottenere esecuzione di codice nell'hypervisor. Eseguiamo una catena ROP che disabilita la Nested Paging (NPT) e il Guest Mode Execute Trap (GMET), consentendoci di disabilitare la eXecute Only Memory (XOM) aka xotext nelle Page Table Entries (PTE) del kernel per eseguirne il dump, oltre ad abilitare la scrittura nelle PTE per agganciare/patchare il kernel.
Questo metodo richiede un bel numero di gadget e offset, ed è il motivo principale per cui questo exploit non è quello primario. Inoltre, attualmente rompe l'hypervisor solo sul core su cui viene eseguita la catena ROP; l'hypervisor è ancora attivo sugli altri core e dovrebbe essere disabilitato.
Exploit dei flag QA
L'exploit primario e consigliato sfrutta il fatto che i flag di Quality Assurance (QA) di sistema sono condivisi tra l'hypervisor e il kernel guest. Quando l'hypervisor si inizializza, il codice di inizializzazione per la costruzione delle nested page table controlla i flag QA per il flag di debug System Level (SL). Se questo flag è impostato, le Nested Page Table Entries (PTE) non avranno il bit xotext impostato per le pagine .text del kernel e, inoltre, le pagine .text del kernel avranno anche il bit di scrittura impostato.
Questi flag non vengono reinizializzati dal secure loader al risveglio dalla modalità di riposo, mentre l'hypervisor viene reinizializzato. Impostando il flag SL, mettendo il sistema in sospensione e riprendendo, possiamo modificare le pagetable del kernel guest per rendere leggibili/scrivibili le pagine .text del kernel, consentendo il dump del kernel e hook/patch.
Questo payload dell'exploit è compilato usando l'SDK PS5-Payload-Dev. Nota anche che la build per hen/ è leggermente speciale, poiché viene compilata in un binario flat copiato in una code cave del kernel. Tutto il codice in hen/ viene eseguito in modalità supervisor/kernel.
byepervisor.elfbyepervisor.elf (se usi il loader ELF di John Tornblom, il loader ELF dovrebbe continuare ad accettare payload dopo il ripristino; in caso contrario, l'exploit UMTX dovrà essere eseguito di nuovo)byepervisor.elf debba essere inviato una sola voltaGli interessati a contribuire alla ricerca/sviluppo per PS5 possono unirsi a un discord che ho configurato qui.