12 KiB
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:
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:
/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.
Depois de o utilizador fechar YouTube, uma sondagem TCP sem payload confirmou que a consola permaneceu acessível e o ELF loader continuou ativo na porta 9021. Não foi observado crash imediato durante este fecho controlado em 13.20.
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. Este teste acrescenta apenas ausência de crash imediato e persistência da
9021 após um fecho em 13.20; não demonstra estabilidade prolongada. Não executar
outro exploit de kernel nesta sessão. Reiniciar normalmente antes de repetir.
Cadeia homebrew após fechar YouTube
Com a porta 9021 ainda acessível, foram descarregados novamente e verificados os artefactos registados abaixo. O envio ocorreu na ordem requerida:
- kstuff-lite v1.11;
- confirmação de
app.dbpatching e patch SceShellUI Trophy bem-sucedido; - espera superior a quatro segundos;
- ShadowMountPlus 1.7beta3.
ShadowMountPlus identificou FW 13.20 e confirmou controlo runtime KStuff, hooks
SceShellCore, watcher de ciclo de vida, quatro flags de sistema monitorizadas,
localização pt-PT, leitura de 58 títulos em app.db, biblioteca sincronizada
com zero jogos e API HTTP/JSON em 127.0.0.1:10101. A configuração observada
manteve mounts read-only, force/persistent desativados e atualização AMPR
automática desativada. Foi criado /data/.kstuff_noautomount pela cadeia.
O teste demonstra o arranque KStuff → ShadowMountPlus a partir do loader obtido
por YouTube/Y2JB/Relapse. Não montou jogos ou imagens e não testou API, gameplay,
suspend/resume, shutdown, reboot ou estabilidade prolongada. As cópias em
/var/tmp foram removidas depois do envio.
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:
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
- Montagem read-only de uma imagem conhecida e teste de gameplay/lifecycle.
- Suspend/resume, shutdown e reboot com a cadeia ativa.
- 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.
Integração proposta: Y2JB Autoloader e Payload Manager
O desenho preferido mantém responsabilidades separadas:
YouTube
→ Y2JB Autoloader
→ Relapse para FW 13.20
→ ELF loader TCP 9021
→ Payload Manager no net-utils01
→ kstuff-lite
→ espera e confirmação
→ ShadowMountPlus
O Y2JB Autoloader fica responsável apenas pelo exploit userland, seleção do
exploit de kernel, execução do Relapse e arranque do ELF loader. O Payload
Manager externo continua responsável pelo catálogo, fontes, releases, versões,
compatibilidade, downloads, tamanho, SHA-256, dependências, ordem, envio e logs.
KStuff e ShadowMountPlus não devem ser colocados no autoload.txt quando esta
arquitetura estiver ativa, porque isso contornaria a política e os registos do
manager.
Loader loopback e acesso externo
O autoloader usa por defeito um ELF loader que aceita ligações apenas da própria
PS5. Essa opção é segura para payloads carregados internamente, mas impede o
manager em 192.168.20.30 de enviar para 192.168.40.14:9021. A integração
externa exige uma variante revista do loader que escute na interface LAN. A
proteção passa então a depender da firewall existente, limitada a:
192.168.20.30 → 192.168.40.14 TCP 9021
Nenhum outro host deve alcançar essa porta. Antes de adotar a variante LAN, confirmar o binário, o hash, o bind efetivo e o comportamento após fechar YouTube. Não iniciar dois ELF loaders concorrentes nem reenviar Relapse no mesmo boot.
Perfil de execução no manager
O perfil inicial deve representar explicitamente a cadeia validada:
1. kstuff-lite v1.11
2. aguardar confirmação de arranque
3. esperar no mínimo 4000 ms
4. ShadowMountPlus 1.7beta3
O manager deve rejeitar qualquer artefacto cujo tamanho ou SHA-256 não coincida
com o registo aprovado. enabled e favorite são preferências do utilizador e
ficam separados da evidência imutável da fonte. ShadowMountPlus declara KStuff
como dependência e não pode ser enviado se a etapa anterior não tiver confirmação.
Estado da consola e sessões
Uma porta 9021 aberta prova apenas que existe um listener. A primeira versão do manager deve combinar o output recebido no envio, padrões de sucesso conhecidos e confirmação manual quando não existir uma API de estado fiável. Estados úteis:
offline
loader-disponivel
kstuff-confirmado
shadowmount-confirmado
cadeia-concluida
estado-desconhecido
O estado runtime deve pertencer a uma sessão/boot da consola. Depois de reboot,
perda de ligação ou resultado ambíguo, o manager limpa as afirmações de payloads
ativos e volta a estado-desconhecido ou offline. Histórico e evidência de
execuções permanecem, mas não servem como prova do boot atual.
Cada tentativa deve guardar timestamp, consola, firmware, payload, versão, digest, origem final do download, resultado e operador. Não guardar credenciais nos logs. O manager deve apresentar claramente que o autoloader v1.0.0-dev é experimental e que o fluxo manual documentado continua a ser a referência de comparação para o primeiro teste A/B.
Este registo é documental; não exigiu rebuild nem deployment do runtime Docker.