Jump to content


PS5 IPV6 Kernel Exploit 1.03


¿Quieres enterarte al momento de las nuevas descargas? Síguenos en Twitter o Mastodon!

Implementación experimental de WebKit ROP de un exploit del kernel PS5 basado en el IPV6 Use-After-Free (UAF) de TheFlow, que fue reportado en HackerOne. La estrategia del exploit se basa en su mayor parte en el PoC BSD/PS4 de TheFlow con algunos cambios para acomodar la molesta disposición de la memoria de PS5 (para más información, véase la sección de Notas de Investigación). Establece una primitiva de lectura/escritura (semi-arbitraria) arbitraria. Este exploit y sus capacidades tienen muchas limitaciones, y como tal, está pensado principalmente para que los desarrolladores jueguen con él para hacer ingeniería inversa en algunas partes del sistema.

También hay que tener en cuenta que la estabilidad es bastante baja, especialmente en comparación con los exploits de PS4. Esto se debe a la naturaleza del fallo, que está vinculado a una condición de carrera, así como a las mitigaciones y la disposición de la memoria de la PS5. Este documento contendrá información de investigación sobre la PS5, y este exploit será objeto de desarrollo y mejoras continuas a medida que pase el tiempo.

Esto posiblemente podría funcionar en 4.50 también a través de la sustitución de offsets de gadgets válidos de 4.50 + deslizamientos del kernel, pero eso será para el trabajo futuro.

Actualmente se incluye

  • Obtiene lecturas/escrituras arbitrarias y puede ejecutar un servidor RPC básico para lecturas/escrituras (o un servidor de volcado para grandes lecturas) (debe editar su propia dirección/puerto en el archivo exploit en las líneas 673-677)
  • Activa el menú de configuración de depuración (nota: tendrás que salir completamente de la configuración y volver a entrar para verlo).
  • Obtiene privilegios de root

Limitaciones

  • Este exploit logra la lectura/escritura, pero no la ejecución de código. Esto se debe a que actualmente no podemos volcar el código del kernel para los gadgets, ya que las páginas de texto del kernel están marcadas como memoria de sólo ejecución (XOM). Si se intenta leer los punteros .text del kernel, se producirá un pánico.
  • Según lo anterior + el hipervisor (HV) que impone la protección de escritura del kernel, este exploit tampoco puede instalar ningún parche o gancho en el espacio del kernel, lo que significa que no hay código relacionado con el homebrew por el momento.
  • La integridad del flujo de control (CFI) basada en Clang está presente y se aplica.
  • La Prevención/Ejecución del Acceso en Modo Supervisor (SMAP/SMEP) no puede ser desactivada, debido al HV.
  • La primitiva de escritura está algo limitada, ya que los bytes 0x10-0x14 deben ser cero (o una interfaz de red válida).
  • La estabilidad del exploit es actualmente pobre. Más adelante se hablará de ello.
  • Cuando se ejecuta con éxito, sale del navegador con el botón circular, el botón PS entra en pánico por una razón actualmente desconocida.

Cómo utilizarlo

  • Configura fakedns a través de dns.conf para que apunte a manuals.playstation.net a la dirección IP de tu PC
  • Ejecuta el dns falso: python fakedns.py -c dns.conf
  • Ejecutar el servidor HTTPS: python host.py
  • Ve a la configuración avanzada de red de PS5 y establece el DNS primario a la dirección IP de tu PC y deja el secundario en 0.0.0.0
    • A veces el manual sigue sin cargarse y es necesario reiniciar, no se sabe por qué es muy raro
  • Vaya al manual del usuario en la configuración y acepte la solicitud de certificado no fiable, ejecute
  • Opcional: Ejecute los scripts del servidor rpc/dump (nota: la dirección/puerto debe ser sustituida en forma binaria en exploit.js).

Notas sobre la estabilidad
La estabilidad de este exploit está en torno al 30%, y tiene múltiples puntos potenciales de fallo. En orden de probabilidad descendente observada:

  • La etapa 1 causa más de un UAF debido a que no atrapa uno o más en el reclaim, causando una corrupción latente que causa un pánico algún tiempo después.
  • La etapa 4 encuentra el socket solapado/víctima, pero el pktopts es el mismo que el del socket maestro, causando que la primitiva "read" sólo lea el puntero que intenta leer en lugar del contenido de ese puntero. Esto necesita alguna mejora y ser arreglado si es posible porque es realmente molesto.
  • El intento de la etapa 1 de reclamar el UAF falla y algo más roba el puntero, causando un pánico inmediato.
  • La fuga de kqueue falla y no encuentra un puntero de kernel .data reconocido.
  • Salir del navegador a través de medios "inusuales" como el botón PS, el botón de compartir, o la caída del navegador, hará que el kernel entre en pánico. Necesita ser investigado.

Notas de investigación

  • Parece que, basándose en varias pruebas y en el volcado con la primitiva de lectura, la PS5 ha vuelto al tamaño de página 0x1000 en comparación con el 0x4000 de la PS4.
  • También parece que en la PS5 las páginas adyacentes rara vez pertenecen a la misma losa, ya que obtendrás datos muy diferentes en páginas adyacentes. La distribución de la memoria parece más dispersa.
  • A menudo, cuando la PS5 entra en pánico (al menos en el contexto de webkit), habrá una salida de audio horrible ya que el buffer de audio se corrompe de alguna manera.
  • A veces esta corrupción de audio persiste hasta el siguiente arranque, sin saber por qué.
  • Al igual que la PS4, la PS5 requerirá que se pulse manualmente el botón de encendido de la consola dos veces para reiniciar después de un pánico.
  • Es normal que la PS5 tarde una cantidad absurda de tiempo en reiniciarse tras un pánico si está aislada de Internet (por desgracia). Espera que el arranque tarde entre 3 y 4 minutos.


Traducción realizada con la versión gratuita del traductor www.DeepL.com/Translator

PS5 4.03 Kernel Exploit ha sido creado por SpecterDev.


Que novedades incluye la versión 1.03

Released

  • Añade soporte para reubicaciones relativas.
  • Corregidos varios errores/tipologías menores (gracias John Tornblom).

No te pierdas nada, síguenos en Twitter o Mastodon!
¿Tienes alguna duda, petición o aporte? Utiliza el foro!

  • Contenido similar

    • Por Dekuwa
      ps5debug es un depurador para la PlayStation 5.
      La API no ha cambiado desde ps4debug, por lo que libdebug debería seguir funcionando.
      ⚠️ Advertencia: ps5debug es actualmente una beta experimental y no todo funciona. Por favor, úsalo con precaución.
      Características
      Todo lo que conoces y amas de ps4debug incluyendo:
      Soporte de modo Rest. Escáner de consola. Servidor klog en el puerto 3232. Nuevos comandos API:
      CMD_PROC_BASE(0xBDAA000D) - Obtiene la dirección base de la sección ejecutable. struct cmd_proc_base_paquete {     uint32_t pid; } __atributo__((empaquetado)); struct cmd_proc_base_response {     uint64_t dirección; } __attribute__((empaquetado)); Problemas conocidos
      ASLR no está desactivado. Todo: CMD_CONSOLE_INFO Estado actual con las herramientas
      Reaper Studio El depurador funciona para ambos juegos ps4/ps5. La creación de trucos no está probada. MultiTrainer II Funciona con juegos de PS4 y PS5 con algunos problemas: Algunas cuevas de código que dependen de ASLR no funcionan. Parcheado para funcionar con ambos tipos de trucos json, con ASLR activado. La versión corregida será lanzada en breve. Reaper original Funcionando Tramposo PS4 Funcionando ps5debug es una aplicación creada por GoldHEN.
    • Por Dekuwa
      BwE PS5 Code Reader es una aplicación que nos permite diagnosticar problemas de hardware en PS5: SSD, TPM, RAM, controlador SSD, alimentación, VRM APU, HDMI, WiFi/BT, USB, temperatura, Secure Loader (SAM_IPL) y mucho más.

      ¿Para qué sirve?
      Está diseñado para las consolas BLOD PS5. ¿Qué necesito para empezar?
      Un dispositivo USB TTL y el esquema de pines del puente sur de tu modelo de PS4. ¿Instrucciones?
      Conecta tu dispositivo USB TTL (RX->RX, TX->TX, GND->GND) a los puntos UART (¡Ve los diagramas adjuntos!) y luego ejecuta el programa.  El programa buscará el PS5. Enchufa la alimentación AC en la PS5 (o enciéndela), mientras el southbridge funcione te indicará que ha sido detectado. Desde aquí puedes obtener los resultados del código. Te recomiendo que borres los logs e intentes arrancar la consola para entender mejor tu problema actual. Me sale error GDDR6 arriba y abajo y un número de banco, ¿qué significa?
      Con la placa colocada hacia arriba y la RAM mirando hacia ti, la fila superior son los 4 chips de RAM superiores y la fila inferior son los 4 inferiores. La fila superior de izquierda a derecha es 1, 2, 3 ,4 - La fila inferior de izquierda a derecha es 8, 7, 6, 5. Vea el diagrama adjunto. Recibo el mensaje "Código de error desconocido (N/A)".
      Su PS5 no está recibiendo una respuesta adecuada de los comandos de código de error. No hay cable de tierra o cableado suelto en el USB TTL. Otra posibilidad es que estés enviando comandos demasiado rápido. Desconecta todo y prueba más tarde. TLDR; ¿Arreglará esto mi BLOD? No, ¡ese es tu trabajo usando la información que este programa te ha dado!
      TLDR; ¿Probará esto que mi BLOD es XYZ? Más o menos sí, esa es la idea. Le mostrará lo que ha fallado.
      La aplicación ha sido creada por BwE.
    • Por Dekuwa
      Este proyecto utiliza vulnerabilidades descubiertas en la capa BD-J del firmware PS5 versión 7.61 y anteriores para desplegar un cargador capaz de escuchar archivos JAR y ejecutar su clase principal. Esto facilita grabar el disco BD-R con el cargador una sola vez y luego seguir ejecutando nuevas versiones del código experimental. Este repositorio proporciona toda la configuración necesaria para crear tanto el sistema de archivos del disco BD-R del cargador como el JAR para enviarlo a la PS5.
      Requisitos previos
      JDK 11 (PS5 utiliza Java 11 en tiempo de ejecución) Apache Maven IntelliJ IDEA Community Edition (opcional, pero recomendado) Estructura
      El proyecto consta de los siguientes componentes:
      pom.xml raíz define las propiedades comunes y la configuración del plugin de Maven para todos los proyectos. subproyecto de montaje crea el directorio que debe ser quemado en un disco BD-R. Recomiendo el software ImgBurn para hacer esto. Asegúrese de utilizar el sistema de archivos UDF 2.50, a continuación, sólo tiene que arrastrar el contenido del directorio assembly/target/assembly-[version] en el editor de diseño de disco. El subproyecto bdj-tools no necesita ser tocado. Estas son las utilidades de HD Cookbook, adaptadas para ejecutarse en JDK 11 e integradas en el proceso de construcción del sistema de archivos del disco BD-R. El subproyecto stubs contiene el script de construcción para descargar los archivos de clase BD-J de HD Cookbook y organizarlos para su uso con el JDK 11 local. También es un lugar donde los archivos stub específicos de PS5 deben ser declarados para que puedan ser utilizados en el Xlet y el JAR remoto. El subproyecto sdk contiene clases helper que simplifican la invocación nativa en el código ejecutado. Las clases de este módulo se incrustan en el JAR final que se enviará a PS5 para su ejecución. El subproyecto xlet contiene el código del Xlet que se inicia cuando se lanza el disco BD-R en PS5. Simplemente inicia el cargador JAR (por defecto en el puerto 9025). El subproyecto xploit contiene el código que se enviará para su ejecución en PS5. El código puede hacer referencia a clases de xlet, como la clase Status para mostrar en pantalla. El proyecto produce un JAR que es capaz de enviarse a sí mismo para su ejecución. Configuración
      Las siguientes propiedades en pom.xml pueden ser ajustadas antes de compilar y grabar el cargador JAR en el disco:
      loader.port - Puerto en el que el cargador JAR escuchará los datos. loader.resolution.width, loader.resolution.height - Resolución de pantalla a establecer en varios archivos. No estoy seguro de cómo esto afecta a nada, no he experimentado con esto lo suficiente. remote.logger.host - Dirección IP donde hacer eco de los mensajes mostrados en pantalla. Si está en blanco, no se utilizará el registro remoto. Este host también puede recibir datos binarios, ver RemoteLogger#sendBytes. remote.logger.port - Puerto al que el registrador remoto enviará los mensajes de estado. remote.logger.timeout - Número de milisegundos a esperar antes de abandonar los intentos de conexión con el host de registro remoto. Si el host está caído después de este tiempo de espera en el primer intento de envío, no se realizarán más intentos de registro remoto. Puede modificar el POM directamente, o pasar los nuevos valores desde la línea de comandos, ejemplo: mvn ... -Dloader.port=9025 -Dremote.logger.host=192.168.1.100. Para escuchar los mensajes en la máquina remota cuando el registrador remoto está activado, utilice socat udp-recv:[remote.logger.port] stdout. Uso
      Asegúrese de que la variable de entorno JAVA_HOME apunta a la raíz de JDK 11. Añade el directorio ${JAVA_HOME}/bin a ${PATH}. Asegúrate también de que MAVEN_HOME apunta a la raíz de la instalación de Apache Maven. Añade el directorio ${MAVEN_HOME}/bin a ${PATH}. Cree una carga útil para ejecutar en PS5 añadiendo la implementación al submódulo xploit. No es necesario modificar ningún archivo existente (aunque eres bienvenido si quieres). Simplemente añade tu clase payload en el paquete org.ps5jb.client.payloads y especifica su nombre como parámetro al compilar el proyecto (ver el siguiente paso). Ejecute mvn clean package -Dxploit.payload=[payload classname] desde la raíz del proyecto. Debería producir los siguientes artefactos: Directorio assembly/target/assembly-[version] contiene todos los archivos que deben ser grabados en el BD-R. El archivo xploit/target/xploit-[version].jar contiene el código que puede enviarse repetidamente al PS5 una vez desplegado el cargador. Para evitar tener que especificar la carga útil cada vez con un interruptor -D (en el paso 8 también), también puede cambiar la propiedad xploit.payload en pom.xml del proyecto xploit. Graba el BD-R (mejor aún BD-RE), insértalo en el PS5 y ejecuta "PS5 JAR Loader" desde Media / Disc Player. Un mensaje en pantalla debe informar sobre el cargador en espera de JAR. Envíe el JAR utilizando el comando java -jar xploit/target/xploit-[version].jar <dirección ip del PS5>`. PS5 debería informar en pantalla del estado de la carga y de la ejecución. Una vez finalizada la ejecución, el cargador esperará un nuevo JAR. Realiza las modificaciones necesarias en el proyecto xploit, recompila usando mvn package y vuelve a ejecutar el #7 para reintentarlo tantas veces como sea necesario. PS5 Jar Loader ha sido creado por hammer-83.
    • Por Dekuwa
      Este es un SDK para desarrollar cargas útiles ELF dirigidas a PS5s explotados que ejecutan ps5-payload-elfldr.
      Varios artefactos de este repositorio proceden del proyecto PS5 SDK.
      PS5 Payload SDK ha sido creado por John Tornblom.
    • Por Dekuwa
      PS5 SDK contiene el código fuente y la documentación de un kit de desarrollo de software (SDK) en desarrollo para la PS5. Contiene las cabeceras, librerías y ayudas para construir archivos ELF para el PS5. Actualmente, está pensado sobre todo para cargas útiles que se cargan en el cargador ELF basado en WebKit, aunque también se puede utilizar para aplicaciones caseras sencillas. Por el momento no puede construir aplicaciones completas, ya que no tenemos soporte completo para homebrew.
      Los archivos de cabecera, así como el tiempo de ejecución de C (CRT) es un WIP y requerirá la actualización; siéntase libre de bifurcar y enviar solicitudes de extracción para actualizar el soporte. Esto es especialmente cierto para las funciones de biblioteca específicas de Sony.
      La librería estándar C++ (STL) no está soportada, aunque C++ bare-metal debería funcionar.
      PS5 SDK ha sido creado por PS5Dev.
×
×
  • Crear nuevo...