
Un exploit del hipervisor de PS5 para los firmwares 1.xx-2xx.
Exploit del hipervisor de PS5 para firmware <= 2.xx. El repositorio contiene dos vulnerabilidades y cadenas de exploit independientes entre sí; cualquiera de ellas puede usarse. Un exploit se incluye principalmente con fines de preservación (/_old_jump_table_exploit); solo es necesario usar la cadena de exploit principal (exploit de indicadores QA).
Esta investigación se presentó en hardwear.io NL 2024; las diapositivas se pueden encontrar aquí. La charla se publicará pronto.
Exploit de tabla de saltos
El primer exploit aprovecha una vulnerabilidad en la que las tablas de saltos del código del hipervisor se comparten con el kernel invitado, y está contenido en /_old_jump_table_exploit/. Al secuestrar la entrada de la tabla de saltos para la hiperllamada VMMCALL_HV_SET_CPUID_PS4, se puede lograr ejecución de código en el hipervisor. Ejecutamos una cadena ROP que desactiva la paginación anidada (NPT) y la trampa de ejecución en modo invitado (GMET), lo que nos permite desactivar la memoria de solo ejecución (XOM), también conocida como xotext, en las entradas de la tabla de páginas (PTEs) del kernel para volcarla, además de habilitar la escritura en las PTEs para enganchar/parchear el kernel.
Este método requiere una cantidad considerable de gadgets y offsets, que es la razón principal por la que este exploit no es el principal. Además, actualmente solo rompe el hipervisor en el núcleo donde se ejecuta la cadena ROP; el hipervisor sigue activo en otros núcleos y habría que desactivarlo.
Exploit de indicadores QA
El exploit principal y recomendado aprovecha el hecho de que los indicadores de Aseguramiento de Calidad (QA) del sistema se comparten entre el hipervisor y el kernel invitado. Cuando el hipervisor se inicializa, el código de inicio para construir las tablas de páginas anidadas comprueba los indicadores QA para el indicador de depuración de Nivel de Sistema (SL). Si este indicador está activado, las entradas de la tabla de páginas anidadas (PTEs) no tendrán el bit xotext establecido para las páginas .text del kernel y, además, las páginas .text del kernel también tendrán el bit de escritura establecido.
Estos indicadores no se reinicializan mediante el cargador seguro al reanudar desde el modo de suspensión, aunque el hipervisor sí se reinicializa. Al establecer el indicador SL, poner el sistema en suspensión y reanudarlo, podemos editar las tablas de páginas del kernel invitado para que las páginas .text del kernel sean legibles/escribibles, lo que permite volcar el kernel y realizar enganches/parches.
Este payload de exploit se compila con el PS5-Payload-Dev SDK. Ten en cuenta también que la compilación de hen/ es algo especial, ya que se compila a un binario plano que se copia dentro de una cavidad de código del kernel. La totalidad del código en hen/ se ejecuta en modo supervisor/kernel.
byepervisor.elfbyepervisor.elf de nuevo (si usas el cargador de ELF de John Tornblom, el cargador debería seguir aceptando payloads después de reanudar; si no, será necesario volver a ejecutar el exploit UMTX)byepervisor.elf solo necesite enviarse una vezLos interesados en contribuir a la investigación/desarrollo de PS5 pueden unirse a un Discord que he creado aquí.