386 lines
14 KiB
Markdown
386 lines
14 KiB
Markdown
# Guia de instalação e utilização na PS5
|
|
|
|
Este documento descreve o deployment do Relapse Exploit em Docker, a configuração
|
|
da PS5, opções de DNS para bloquear PSN/updates e os cuidados operacionais.
|
|
|
|
Use exclusivamente numa consola que lhe pertença ou para a qual tenha autorização.
|
|
O exploit modifica memória do kernel, remove o sandbox e executa payloads com
|
|
privilégios elevados. Pode provocar kernel panic, perda de dados ou banimento.
|
|
|
|
## Estado desta instalação
|
|
|
|
Na rede onde este projeto foi inicialmente instalado:
|
|
|
|
- servidor: `net-utils01`;
|
|
- IP LAN: `192.168.20.30`;
|
|
- diretório: `/opt/relapse-exploit-docker`;
|
|
- URL: `http://192.168.20.30:8000/`;
|
|
- imagem: `relapse-exploit:local`;
|
|
- porta interna: `8080`;
|
|
- porta publicada: `8000`.
|
|
- DNS local: `192.168.20.30:53` (UDP e TCP);
|
|
- gateway do Guia: `192.168.20.30:80` e `192.168.20.30:443`.
|
|
- IP estático atual da PS5: `192.168.40.14`.
|
|
|
|
A porta 8080 do host já pertence ao UniFi e não deve ser reutilizada.
|
|
|
|
## Instalar no servidor
|
|
|
|
O repositório está disponível por HTTP no Gitea local:
|
|
|
|
```sh
|
|
git clone --recurse-submodules \
|
|
http://192.168.20.20:3000/TinyBacklog/relapse-exploit-docker.git \
|
|
/opt/relapse-exploit-docker
|
|
cd /opt/relapse-exploit-docker
|
|
docker compose up -d --build
|
|
```
|
|
|
|
O build verifica o SHA-256 dos dois payloads antes de criar a imagem. Se algum
|
|
hash divergir, o build deve falhar em vez de incluir silenciosamente o binário.
|
|
|
|
Confirmar o serviço:
|
|
|
|
```sh
|
|
cd /opt/relapse-exploit-docker
|
|
docker compose ps
|
|
docker compose logs --tail=100
|
|
curl -I http://127.0.0.1:8000/
|
|
```
|
|
|
|
O container deve aparecer como `healthy`. A partir de outra máquina da LAN:
|
|
|
|
```sh
|
|
curl -I http://192.168.20.30:8000/
|
|
```
|
|
|
|
## Preparar a PS5
|
|
|
|
### Compatibilidade
|
|
|
|
Esta versão do Relapse declara suporte para firmware 7.00 a 13.60. Não atualizar a
|
|
consola para tentar obter compatibilidade. Confirmar primeiro o firmware instalado.
|
|
|
|
### Desativar atualizações automáticas
|
|
|
|
Na PS5, abrir:
|
|
|
|
`Definições > Sistema > Software do sistema > Atualização e definições do software do sistema`
|
|
|
|
Desativar:
|
|
|
|
- transferência automática de ficheiros de atualização;
|
|
- instalação automática de ficheiros de atualização.
|
|
|
|
Em:
|
|
|
|
`Definições > Sistema > Poupança de energia > Funcionalidades disponíveis no modo de repouso`
|
|
|
|
desativar temporariamente `Permanecer ligado à Internet`.
|
|
|
|
Estas opções são uma camada adicional; isoladamente não garantem que uma atualização
|
|
não seja transferida.
|
|
|
|
## DNS e bloqueio da PSN
|
|
|
|
Editar a ligação ativa em:
|
|
|
|
`Definições > Rede > Definições > Configurar ligação à Internet`
|
|
|
|
Selecionar a rede, carregar em `Options` e abrir `Definições avançadas`:
|
|
|
|
- endereço IP: manter a configuração estática existente (`192.168.40.14`) nesta
|
|
instalação; noutras redes, usar os parâmetros fornecidos pelo administrador;
|
|
- nome do host DHCP: não especificar;
|
|
- DNS: manual;
|
|
- MTU: automático;
|
|
- proxy: não utilizar.
|
|
|
|
### Opção 1: bloquear toda a resolução DNS
|
|
|
|
É a opção mais conservadora quando só é necessário aceder ao servidor por IP:
|
|
|
|
```text
|
|
DNS primário: 127.0.0.1
|
|
DNS secundário: 127.0.0.1
|
|
```
|
|
|
|
O teste de Internet pode falhar, mas a ligação à LAN permanece disponível. Abrir o
|
|
exploit diretamente em:
|
|
|
|
```text
|
|
http://192.168.20.30:8000/
|
|
```
|
|
|
|
Esta opção pressupõe que já existe uma forma de abrir o browser oculto e introduzir
|
|
ou clicar no endereço local.
|
|
|
|
### Opção 2: DNS público recomendado pelo upstream
|
|
|
|
O README do Relapse recomenda atualmente:
|
|
|
|
```text
|
|
DNS primário: 45.56.67.85
|
|
DNS secundário: 0.0.0.0
|
|
```
|
|
|
|
Não configurar Google, Cloudflare, o router ou outro resolvedor normal como DNS
|
|
secundário: a consola pode usá-lo e contornar o bloqueio.
|
|
|
|
Um DNS público implica confiar no respetivo operador. Pode ficar indisponível,
|
|
alterar o destino do Guia do Utilizador ou ser contornado por um ISP que intercepte
|
|
DNS. Confirmar sempre a página e o endereço apresentados antes de executar.
|
|
|
|
### Opção 3: DNS local (configuração instalada)
|
|
|
|
O Compose inclui um DNS controlado no `net-utils01` que:
|
|
|
|
- bloqueie domínios PlayStation/PSN e servidores de atualização;
|
|
- responda `manuals.playstation.net` com `192.168.20.30`;
|
|
- encaminhe apenas `homebrew.page`, `itsplk.github.io`,
|
|
`store.spectrumlibrary.online`, `api.github.com`, `github.com` e
|
|
`raw.githubusercontent.com`, `release-assets.githubusercontent.com`,
|
|
`prosperopatches.com`, `cdn.prosperopatches.com`,
|
|
`image.api.playstation.com` e `gmedia.playstation.com` para o resolvedor
|
|
configurado, permitindo os destinos revistos do homebrew store, PS5 Payload
|
|
Manager, Spectrum Library e BlackBox;
|
|
- devolva `NXDOMAIN` para todos os restantes nomes, mantendo PSN, updates e
|
|
telemetria bloqueados por DNS;
|
|
- registe as consultas nos logs do container;
|
|
- apresente um gateway HTTPS local e redirecione o browser para o exploit em
|
|
`http://192.168.20.30:8000/`.
|
|
|
|
Nesse cenário, a PS5 usaria:
|
|
|
|
```text
|
|
DNS primário: 192.168.20.30
|
|
DNS secundário: 0.0.0.0
|
|
```
|
|
|
|
Depois de guardar o DNS na PS5, reiniciar completamente a consola se o Guia continuar
|
|
a usar uma resolução antiga. Abrir o Guia e aceitar o aviso de certificado não
|
|
confiável: o certificado é self-signed para `manuals.playstation.net` e existe apenas
|
|
para permitir que o Guia chegue ao redirecionamento local.
|
|
|
|
O gateway liga-se por defeito apenas ao endereço `192.168.20.30`. Para outra rede,
|
|
definir `GATEWAY_BIND_IP`, `GATEWAY_IP` e `GUIDE_REDIRECT_URL` antes de executar o
|
|
Compose. Também é possível bloquear o acesso WAN da PS5 no router, mantendo apenas
|
|
a comunicação LAN; esta continua a ser uma camada adicional mais forte do que DNS.
|
|
|
|
O resolvedor upstream predefinido é `1.1.1.1`. Pode ser substituído por um endereço
|
|
DNS controlado na rede através de `UPSTREAM_DNS`; o valor deve ser um endereço IP,
|
|
não um hostname. A firewall deve permitir UDP e TCP `53` de `net-utils01` para esse
|
|
resolvedor. A consola continua a precisar apenas de UDP/TCP `53` para
|
|
`192.168.20.30`; não deve consultar diretamente um DNS público.
|
|
|
|
O acesso WAN da consola pode ficar limitado a TCP `443` para os domínios
|
|
permitidos. Não são necessárias regras WAN de entrada. Se faltarem ícones, consultar
|
|
os logs da firewall: um URL de ícone apontado pelo catálogo para outro domínio será
|
|
bloqueado até esse destino ser revisto e acrescentado explicitamente.
|
|
|
|
O catálogo oficial do PS5 Payload Manager está em
|
|
`https://itsplk.github.io/ps5-payloads-mirror/payloads.json`. No snapshot revisto em
|
|
2026-10-07, todos os URLs de payload começavam em `github.com` e redirecionavam para
|
|
`release-assets.githubusercontent.com`. Repositórios personalizados podem apontar
|
|
para qualquer host e permanecem bloqueados até os seus JSON, payloads, hashes e
|
|
redirects serem revistos e o hostname exato ser acrescentado conscientemente.
|
|
|
|
O repositório do Spectrum Library não publica código-fonte. A análise estática do
|
|
ELF 1.4.8 identificou `store.spectrumlibrary.online` para catálogo/API e
|
|
`api.github.com` para atualizações; os downloads de releases GitHub usam os dois
|
|
hosts GitHub já permitidos. A API pode devolver URLs dinâmicos de capas, manifests e
|
|
pacotes, que permanecem bloqueados se usarem outros hosts. Durante a revisão de
|
|
2026-10-07, o servidor Spectrum devolvia HTTP 502, uma falha upstream que o DNS
|
|
local não consegue corrigir.
|
|
|
|
O BlackBox v1.0.5 obtém o catálogo e manifests de atualização em
|
|
`raw.githubusercontent.com`, descarrega as suas próprias releases através dos hosts
|
|
GitHub já permitidos e usa Prosperopatches e os dois hosts de media PlayStation para
|
|
capas. Embora o catálogo contenha links para Archive.org e Vikingfile, esses hosts
|
|
não são permitidos: não são necessários para navegar no catálogo ou atualizar o
|
|
BlackBox e dão acesso a ficheiros de jogos terceiros, frequentemente sem SHA-256.
|
|
|
|
## Abrir pelo Guia do Utilizador
|
|
|
|
Com um DNS que redirecione o manual:
|
|
|
|
1. abrir `Definições`;
|
|
2. abrir `Guia do Utilizador, saúde e segurança e outras informações`;
|
|
3. abrir `Guia do Utilizador`;
|
|
4. confirmar que aparece a página Relapse esperada;
|
|
5. aceitar o aviso de certificado self-signed, se aparecer;
|
|
6. confirmar nos logs que o cliente `192.168.40.14` consultou o DNS e abriu o
|
|
gateway;
|
|
7. confirmar que o destino final é `192.168.20.30:8000`.
|
|
|
|
Ver os logs do gateway:
|
|
|
|
```sh
|
|
docker compose logs -f ps5-guide-gateway
|
|
```
|
|
|
|
## Executar o exploit
|
|
|
|
1. Abrir `http://192.168.20.30:8000/` na PS5.
|
|
2. Aguardar a etapa WebKit e a criação da primitiva de memória.
|
|
3. Aguardar a exploração do kernel e a escalada de privilégios.
|
|
4. Confirmar no ecrã mensagens equivalentes a:
|
|
|
|
```text
|
|
ARW ready
|
|
Kernel: privileges ready
|
|
elfldr is listening on port 9021
|
|
```
|
|
|
|
5. Quando o ELF loader estiver pronto, o fluxo incluído termina. Esta versão já não
|
|
apresenta a opção `R2`: o upstream removeu etaHEN, KStuff e ShadowMount+ por
|
|
questões de compatibilidade. Para executar outro ELF, rever o respetivo binário
|
|
e enviá-lo separadamente para o endereço da PS5 na porta TCP `9021`, usando um
|
|
payload sender externo.
|
|
|
|
O exploit pode precisar de várias tentativas. Se o browser bloquear ou ocorrer
|
|
kernel panic, reiniciar completamente a consola antes de repetir. Não assumir que
|
|
uma mensagem genérica de conclusão prova que todas as etapas terminaram corretamente.
|
|
|
|
## Portas e serviços posteriores
|
|
|
|
- `8000/TCP` no servidor: página Relapse;
|
|
- `53/UDP` e `53/TCP` no servidor: DNS local restritivo;
|
|
- `80/TCP` e `443/TCP` no servidor: gateway do Guia do Utilizador;
|
|
- `9021/TCP` na PS5: ELF loader;
|
|
|
|
Manter o carregamento de payloads limitado à LAN confiável. Nunca publicar a porta
|
|
9021 na Internet e não enviar um ELF que não tenha sido previamente revisto.
|
|
Na instalação atual, um teste de ligação sem payload confirmou o caminho
|
|
`192.168.20.30` (`net-utils01`) para `192.168.40.14:9021`. A regra entre VLANs
|
|
deve permanecer limitada a essa origem, destino, protocolo e porta.
|
|
|
|
As regras da instalação permitem ainda que a PS5 alcance apenas os serviços
|
|
necessários no `net-utils01`: TCP `80`, `443` e `8000`, e DNS UDP/TCP `53`. O
|
|
restante acesso da PS5 à rede `192.168.20.0/24` está bloqueado. Outros hosts não
|
|
podem alcançar o ELF loader da PS5 em TCP `9021`. As exceções específicas devem
|
|
ser avaliadas antes dos bloqueios gerais na firewall.
|
|
|
|
Está prevista uma exceção da PS5 para TCP `8001` no `net-utils01` apenas para a
|
|
fase 5 do payload manager. Manter essa exceção desativada até existir um serviço
|
|
revisto que precise efetivamente da porta.
|
|
|
|
## Operação no net-utils01
|
|
|
|
Estado e logs:
|
|
|
|
```sh
|
|
ssh net-utils01
|
|
cd /opt/relapse-exploit-docker
|
|
docker compose ps
|
|
docker compose logs -f
|
|
```
|
|
|
|
Reiniciar:
|
|
|
|
```sh
|
|
docker compose restart
|
|
```
|
|
|
|
Parar e iniciar:
|
|
|
|
```sh
|
|
docker compose down
|
|
docker compose up -d
|
|
```
|
|
|
|
Atualizar o wrapper Docker:
|
|
|
|
```sh
|
|
cd /opt/relapse-exploit-docker
|
|
git pull --ff-only
|
|
git submodule update --init --recursive
|
|
docker compose up -d --build
|
|
```
|
|
|
|
Não atualizar manualmente o submodule para o commit mais recente sem rever as
|
|
alterações e atualizar conscientemente `payloads.sha256`.
|
|
|
|
## Diagnóstico
|
|
|
|
### A página não abre
|
|
|
|
No servidor:
|
|
|
|
```sh
|
|
docker compose ps
|
|
curl -I http://127.0.0.1:8000/
|
|
ss -ltn | grep ':8000'
|
|
```
|
|
|
|
De outro equipamento da LAN:
|
|
|
|
```sh
|
|
curl -I http://192.168.20.30:8000/
|
|
```
|
|
|
|
Confirmar que a PS5 está na mesma rede e que isolamento de clientes Wi-Fi/AP não
|
|
impede comunicação com `192.168.20.30`.
|
|
|
|
### O Guia do Utilizador abre a página oficial ou outro host
|
|
|
|
Confirmar que o DNS primário da PS5 é `192.168.20.30`, que não existe um DNS
|
|
secundário normal e que o gateway está saudável:
|
|
|
|
```sh
|
|
docker compose ps
|
|
docker compose logs --tail=100 ps5-guide-gateway
|
|
```
|
|
|
|
Depois reiniciar completamente a consola para limpar resoluções antigas. Se não
|
|
existir qualquer consulta proveniente do IP da PS5, verificar regras entre as VLANs
|
|
`192.168.40.0/24` e `192.168.20.0/24`, incluindo UDP/TCP 53 e TCP 80/443/8000.
|
|
|
|
Para testar apenas se o servidor consegue alcançar o ELF loader, sem enviar um
|
|
payload:
|
|
|
|
```sh
|
|
ssh net-utils01
|
|
nc -vz -w 5 192.168.40.14 9021
|
|
```
|
|
|
|
Executar o teste apenas quando a PS5 apresentar que o loader está à espera na
|
|
porta `9021`. Um timeout indica normalmente filtragem ou ausência de caminho; uma
|
|
ligação bem-sucedida confirma apenas a conectividade TCP, não valida um payload.
|
|
|
|
### O build falha nos hashes
|
|
|
|
Não ignorar o erro. Confirmar o commit do submodule e investigar os binários:
|
|
|
|
```sh
|
|
git submodule status
|
|
sha256sum app/payloads/*
|
|
cat payloads.sha256
|
|
```
|
|
|
|
### O exploit bloqueia ou reinicia a consola
|
|
|
|
É comportamento possível numa race/UAF de kernel. Desligar completamente a PS5,
|
|
voltar a ligar e tentar novamente. Evitar várias tentativas consecutivas sem reboot
|
|
depois de uma falha no kernel.
|
|
|
|
## Limites de segurança
|
|
|
|
O container reduz a exposição do servidor: corre como UID/GID 65532, usa filesystem
|
|
read-only, não tem capabilities Linux, aplica `no-new-privileges`, bloqueia listagens
|
|
e não inclui `.git`.
|
|
|
|
Estas proteções não tornam os payloads seguros. Os dois binários incluídos são
|
|
pré-compilados e executados no processo de obter acesso privilegiado à consola.
|
|
Manter a PS5 numa rede isolada, não usar a conta principal e conservar backups dos
|
|
dados.
|
|
|
|
## Evidência do teste Y2JB / Relapse
|
|
|
|
O teste controlado em PS5 Pro 13.20, incluindo versões e hashes, caminhos FTP,
|
|
regras temporárias, resultado e limitações, está em
|
|
[`Y2JB_TEST_2026-10-02.md`](Y2JB_TEST_2026-10-02.md). Em especial, o teste confirmou
|
|
o ELF loader na porta 9021, mas não comprovou estabilidade prolongada nem a
|
|
segurança ao fechar YouTube neste firmware. Reiniciar normalmente antes de
|
|
repetir a cadeia de exploit.
|