docs: record PS5 payload and Y2JB tests

This commit is contained in:
2026-10-02 20:14:53 +01:00
parent bb6b46969f
commit 38e68cf165
6 changed files with 662 additions and 6 deletions
+161
View File
@@ -0,0 +1,161 @@
# Teste YouTube → Y2JB → Relapse (2026-10-02)
Resultado: Y2JB e Relapse completaram o arranque em PS5 Pro firmware 13.20; o
ELF loader na porta TCP 9021 ficou acessível. O teste não mede estabilidade
prolongada nem segurança ao fechar a app neste firmware.
## Ambiente
- PS5 Pro: `192.168.40.14`, firmware 13.20.
- Servidor: `net-utils01`, `192.168.20.30`.
- DNS normal: gateway local restritivo neste repositório.
- Conta de teste: `PLAYER1`, utilizador local slot 2, separada da conta PSN pessoal.
- Não houve alterações ao submódulo ou ao runtime Docker.
## Ativação offline
ActRemoteLink identificou o slot 2 como utilizador atual, com account ID zero,
tipo vazio e flags `0x10000`. Com autorização explícita, foi executado `SETID`
apenas no slot 2, com ID fictício, tipo `np`, flags `0x1002` e Remote Play
ativado para o utilizador e globalmente. Retornos de escrita e releitura foram
zero/sucesso. O ID não foi associado à conta PSN pessoal.
Não foi executado fake sign-in. A revisão do código mostrou escritas de estado
de registo base para além das chaves por slot; não ficou provado que o efeito
fosse isolado da conta principal. Y2JB arrancou sem fake sign-in. Remote Play
está habilitado no registo, mas não foi emparelhado nem testado. O agente de
controlo foi terminado com `QUIT`.
## PKG YouTube e localização do ficheiro
O PKG analisado em Linux foi
`YouTube.app.PPSA01652.version.EUR.01.000.030.pkg`. Strings de metadados
confirmaram:
```text
Title ID: PPSA01652
Content ID: JA0004-PPSA01652_00-YOUTUBESIEJA0000
ContentVersion: 01.000.030
```
Apesar de `EUR` no nome, o prefixo do Content ID é `JA`; não inferir a região
apenas pelo nome. O ecrã Informações da PS5 confirmou versão `1.000.030`. Não
foi feito hash do PKG instalado nem comprovada a sua proveniência Sony.
O Y2JB 1.6 foi primeiro colocado em `/user/download/PPSA01650/`, diretório
incorreto para este Title ID. Surgiu um loop de avisos PSN/DNS (`NW-102312-9`).
Trocar temporariamente o DNS primário para `127.0.0.2`, sem secundário, mudou
o erro para `NW-102249-8`, mas o loop permaneceu. O DNS local foi reposto; a
consola nunca foi ligada à PSN para este diagnóstico.
Depois de confirmar o suporte a Title IDs regionais no autoloader upstream,
foi corrigido para `/user/download/PPSA01652/download0.dat`. Esse diretório
já continha um ficheiro diferente; foi preservado antes da cópia:
```text
/user/download/PPSA01652/download0.dat.before-y2jb-20261002T150112Z
SHA-256: dc553ea85aab9da884316c0fe9bb222da3e8d384ddf2c1fd119779b11c8a79c1
```
O ficheiro final tinha 336789504 bytes. A cópia de origem e a releitura FTP
no destino coincidiram com SHA-256
`946fb64427d340a1a302d260e0cc448b50fe15cfcff8ea167a0d33d3aa76f39d`.
O ficheiro em PPSA01650 ficou intacto. Não apagar a cópia de segurança sem
autorização. Como o caminho e o ficheiro anterior diferiam, não foi isolado
qual alteração resolveu o loop.
Depois de reinício normal, sem executar o exploit do Manual no mesmo boot,
YouTube mostrou Y2JB 1.6, FW 13.20, Title ID PPSA01652, AppVer 01.000.030,
popups desativados e Remote JS Loader em `192.168.40.14:50000`.
## Relapse
Release edisnord v1.0.0, asset `relapse.js`, 261458 bytes, SHA-256
`f85129b861f43a19f6810be5182aecdcf82a25e59ee5fbcd0604e4a4e2a40d69`.
O digest correspondeu ao publicado na release. O binário/script foi enviado
uma vez à porta 50000, depois de confirmada a ligação. Uma sondagem TCP anterior
sem conteúdo gerou `No valid data received`, esperado para uma ligação vazia.
Saída do teste confirmou offsets FW 13.20, self-test de workers, kernel
read/write, privilégios prontos, kexp de 18912 bytes com retorno zero,
descritores eboot restaurados e ambos os buffers reais dos pipes restaurados
com 10/10 escritas verificadas. O teardown terminou, apareceu `relapse complete`
e o ELF loader ficou à escuta na 9021. Uma sondagem TCP posterior à porta 9021
teve sucesso. O utilizador enviou foto que confirma `Executed successfully` e
`Awaiting connection` na porta JS.
O payload deixa OIDs de sysctl alterados até reboot; `kern.smp.cpus` devolve um
endereço de kernel em vez do número de CPUs. O texto do payload indica que a app
pode fechar com os pipes restaurados, mas essa segurança foi medida upstream em
12.60, não nesta consola 13.20. Não houve teste de estabilidade prolongada,
fecho da app, Remote Play ou homebrew neste boot. Não executar outro exploit de
kernel nesta sessão. Reiniciar normalmente antes de repetir o teste.
## Artefactos verificados
| Ficheiro | Origem/versão | SHA-256 |
| --- | --- | --- |
| `actremotelink_agent.elf` | commit `e61a46eed4832ae563b65810685401ddadee2f9b` | `201ba90445e1ca1210237318f106724de238a2c629e16a0f190096319d263c4f` |
| `pkg-manager_v1.4.1.elf` | itsPLK v1.4.1 | `09adaff13b858bb3db519faaea673ee3fa67298081e608d32f6501ed6e9f706e` |
| `ftpsrv-ps5.elf` | v0.21.1 | `7d4b31c83eae4e056580482a3a074e1db25922efc74ac1e439473b45d71a5938` |
| `Y2JB_download0_1.6.zip` | Gezine 1.6 | `d032954033c17acda47c41179a22fa09016ddd40a274f4e9afbb051e5d08d3bd` |
| `download0.dat` | extraído do ZIP | `946fb64427d340a1a302d260e0cc448b50fe15cfcff8ea167a0d33d3aa76f39d` |
| `relapse.js` | edisnord v1.0.0 | `f85129b861f43a19f6810be5182aecdcf82a25e59ee5fbcd0604e4a4e2a40d69` |
Hash confirma identidade/integridade face à fonte indicada, não segurança
intrínseca. Não foi provado build reproduzível do agente nem reconstruído o JS
byte a byte nesta sessão.
## Rede e FTP
Regras foram limitadas a origem/destino nas VLANs, sem NAT, acima dos bloqueios:
| Origem → destino | TCP | Finalidade |
| --- | --- | --- |
| net-utils01 → PS5 | 9021 | ELF loader, regra habitual |
| net-utils01 → PS5 | 31337 | ActRemoteLink temporário, sem autenticação |
| net-utils01 → PS5 | 2121 | controlo FTP temporário |
| net-utils01 → PS5 | 49152–65535 | dados FTP passivos temporários |
| PS5 → net-utils01 | 20212 | tentativa FTP ativo; obsoleta |
| net-utils01 → PS5 | 50000 | loader JavaScript deste arranque |
| net-utils01 → PS5 | 8844, 18842 | PKG Manager e Direct Install |
ftpsrv v0.21.1 em modo ativo aceitou `PORT`, mas falhou com `550 Bad file
descriptor`; revisão do código encontrou socket fechado antes de connect.
Modo passivo foi funcional e cada porta anunciada foi validada no intervalo
aberto. FTP foi encerrado com `KILL`. Desativar regras temporárias 31337, 2121,
49152–65535, 20212 e 50000 quando já não necessárias; o estado final do pfSense
não foi verificado remotamente.
## Memória do net-utils01
O host tem aproximadamente 1.9 GiB RAM, sem swap; `/tmp` é tmpfs. Guardar ZIP
mais ficheiro extraído (cerca de 622 MiB) causou pressão severa de memória,
SSH sem banner e HTTP sem resposta. PSI `memory full` chegou a ~54%. Apagar os
dois downloads recuperou SSH. Não foi observado OOM kill confirmado.
Os testes seguintes usaram `/var/tmp`, verificado em ext4 `/dev/sda1`, com ~70
GiB disponíveis. Antes de staging grande, verificar:
```sh
findmnt -T /var/tmp
df -h /var/tmp
free -h
```
Não limpar `/tmp` indiscriminadamente: diretórios privados de serviços systemd
foram preservados. Os ficheiros exatos dos testes foram removidos após uso.
## Pendentes
- Fecho controlado do YouTube em FW 13.20 e confirmação de que 9021 persiste.
- Teste homebrew neste boot; evidências anteriores de kstuff-lite/ShadowMount+
estão em [payload-evidence](payload-evidence/README.md).
- Teste Remote Play, após rever uma forma de fake sign-in que não afete slot 1.
- Autoloader itsPLK v0.9.1 não tem kernel exploit para 13.20. v1.0.0-dev
integra Relapse 10.20–13.60 mas é experimental, não instalado; rever hash,
cadeia automática e elfldr loopback-only antes de o testar.
- PKG Manager corre em memória (8844 UI, 18842 Direct Install) e precisa de
reenvio depois de reboot. A UI respondeu HTTP 200 antes do reboot deste teste.
Este registo é documental; não exigiu rebuild nem deployment do runtime Docker.