Add an ALLOWED_CLIENTS source-address filter to the DNS service so it only answers queries from the authorized PS5 VLAN (192.168.40.0/28 by default). Queries from any other source address are dropped and logged as "denied" on both UDP and TCP. The value accepts a comma-separated mix of individual addresses and CIDR ranges, and an empty value disables the filter. Record the two authorized consoles (PS5PRO 192.168.40.14, PS5FAT 192.168.40.13) and the stale 192.168.10.x workstation address in the docs. Co-Authored-By: Claude Opus 4.8 <[email protected]>
397 lines
14 KiB
Markdown
397 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`.
|
|
- consolas autorizadas (VLAN `192.168.40.0/28`): PS5PRO `192.168.40.14`,
|
|
PS5FAT `192.168.40.13`.
|
|
|
|
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;
|
|
- responda apenas a clientes na VLAN das consolas (`192.168.40.0/28` por
|
|
defeito, via `ALLOWED_CLIENTS`), descartando consultas de qualquer outra
|
|
origem;
|
|
- 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 gateway só responde a consultas DNS vindas das redes listadas em `ALLOWED_CLIENTS`
|
|
(por defeito `192.168.40.0/28`, a VLAN das consolas). O valor aceita uma lista
|
|
separada por vírgulas de endereços individuais e/ou intervalos CIDR — por exemplo,
|
|
`192.168.40.13,192.168.40.14` para trancar apenas às duas PS5 autorizadas (PS5FAT e
|
|
PS5PRO). Um valor vazio desativa o filtro e serve todos os clientes. Consultas de
|
|
origens não permitidas são descartadas e registadas como `denied`.
|
|
|
|
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.
|