# 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. 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: 1. kstuff-lite v1.11; 2. confirmação de `app.db` patching e patch SceShellUI Trophy bem-sucedido; 3. espera superior a quatro segundos; 4. 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: ```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 - 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: ```text 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: ```text 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: ```text 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: ```text 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.