
Ein PS5-Hypervisor-Exploit für 1.xx-2xx-Firmwares.
PS5-Hypervisor-Exploit für Firmware <= 2.xx. Das Repository enthält zwei Schwachstellen und Exploit-Ketten; sie sind unabhängig voneinander und jede kann verwendet werden. Ein Exploit ist hauptsächlich nur zur Archivierung enthalten (/_old_jump_table_exploit); nur die primäre Exploit-Kette (QA-Flags-Exploit) muss verwendet werden.
Diese Forschung wurde auf der hardwear.io NL 2024 präsentiert; die Folien finden Sie hier. Der Vortrag wird in Kürze veröffentlicht.
Jump-Table-Exploit
Der erste Exploit nutzt eine Schwachstelle aus, bei der die Jump-Tabellen des Hypervisor-Codes mit dem Gast-Kernel geteilt werden, und befindet sich in /_old_jump_table_exploit/. Durch das Übernehmen des Jump-Table-Eintrags für den Hypercall VMMCALL_HV_SET_CPUID_PS4 kann eine Codeausführung im Hypervisor erreicht werden. Wir führen eine ROP-Kette aus, die Nested Paging (NPT) und Guest Mode Execute Trap (GMET) deaktiviert. Dadurch können wir eXecute Only Memory (XOM), auch bekannt als xotext, in den Page Table Entries (PTEs) des Kernels deaktivieren, um es zu dumpen, und außerdem den Schreibzugriff in den PTEs aktivieren, um den Kernel zu hooken/patchten.
Diese Methode erfordert ziemlich viele Gadgets und Offsets, was der Hauptgrund dafür ist, dass dieser Exploit nicht der primäre ist. Außerdem deaktiviert sie derzeit nur den Hypervisor auf dem Kern, auf dem die ROP-Kette läuft; auf den anderen Kernen ist der Hypervisor weiterhin aktiv und müsste ebenfalls deaktiviert werden.
QA-Flags-Exploit
Der primäre und empfohlene Exploit nutzt die Tatsache aus, dass die Quality-Assurance-Flags (QA-Flags) des Systems zwischen dem Hypervisor und dem Gast-Kernel geteilt werden. Wenn der Hypervisor initialisiert wird, prüft der Init-Code zum Aufbau der verschachtelten Seitentabellen in den QA-Flags das System-Level-Debugging-Flag (SL). Wenn dieses Flag gesetzt ist, haben die Page Table Entries (PTEs) der verschachtelten Seitentabellen das xotext-Bit für die .text-Seiten des Kernels nicht gesetzt; außerdem ist bei den .text-Seiten des Kernels das Write-Bit gesetzt.
Diese Flags werden vom Secure Loader beim Aufwachen aus dem Schlafmodus nicht neu initialisiert, der Hypervisor hingegen schon. Indem wir das SL-Flag setzen, das System in den Schlafmodus versetzen und wieder aufwachen, können wir die Seitentabellen des Gast-Kernels bearbeiten, um die .text-Seiten des Kernels les-/schreibbar zu machen, was das Dumpen des Kernels sowie Hooks/Patches ermöglicht.
byepervisor.elf) muss zweimal gesendet werden: einmal vor dem Suspendieren des Systems und einmal nach dem Aufwachen.Dieses Exploit-Payload wird mit dem PS5-Payload-Dev SDK erstellt. Beachte außerdem, dass der Build für hen/ etwas Besonderes ist, da er zu einem flachen Binary kompiliert wird, das in eine Kernel-Code-Cave kopiert wird. Der gesamte Code in hen/ läuft im Supervisor-/Kernel-Modus.
byepervisor.elf.byepervisor.elf erneut (wenn du John Tornbloms ELF-Loader verwendest, sollte der ELF-Loader nach dem Aufwachen weiterhin Payloads akzeptieren; andernfalls muss die UMTX-Exploit-Kette erneut ausgeführt werden).byepervisor.elf nur einmal gesendet werden mussWer Interesse hat, zur PS5-Forschung und -Entwicklung beizutragen, kann einem von mir eingerichteten Discord hier beitreten.