Il developer ChendoChap, uno dei più talentuosi collaboratori di SpecterDev, ha introdotto il supporto per il firmware 4.00 della PlayStation 5 nell’exploit Webkit+Kernel, permettendo finalmente il jailbreak di questa versione di firmware.
Fino a oggi, il firmware 4.00 è stato considerato il “brutto anatroccolo” tra i firmware PS5 vulnerabili. Era l’unico tra le versioni comprese tra la 3.00 e la 4.51 che non funzionava correttamente con la variante Webkit dell’exploit PS5.
Chendo added support for 4.00 Webkit ps5 bug from @SpecterDev
— Jose Coixao (@notnotzecoxao) September 12, 2023
La ragione di ciò era che non si conosceva la posizione corretta delle funzioni kernel critiche, spesso chiamate “offset”, per quel firmware. Tuttavia, questa situazione è cambiata oggi.
Gli “offset” fanno riferimento alla posizione specifica delle funzioni kernel nella memoria della console, in relazione all’inizio della libreria a cui appartengono.
Questi valori cambiano tra i diversi firmware a causa delle modifiche apportate al codice di determinate librerie o a causa di effetti collaterali durante la compilazione del firmware.
Nel passato, trovare gli offset era una “formalità” su PS4, ma la PS5 ha introdotto nuove sfide. La memoria del kernel (.text
) è di sola esecuzione, il che significa che non può essere letta.
Teoricamente, gli offset potrebbero essere trovati tramite la forza bruta, ma in questo caso, sembra che gli sviluppatori siano riusciti a individuarli grazie a una recente scoperta che consente di decrittare i file sprx/self.
La teoria è che i file sprx necessari siano stati copiati su un altro firmware vulnerabile, decriptati e che, in seguito, sia stato possibile individuare manualmente gli offset nel file decriptato.
Non sorprendentemente, gli offset per il firmware 4.00 risultano molto simili a quelli delle versioni 4.02 e 4.03. Tuttavia, la mappa dei “gadget” necessaria per eseguire le prime fasi dell’exploit (catena rop) è significativamente diversa. Senza queste modifiche, era impossibile far funzionare il firmware 4.00.
Per coloro che utilizzano altri firmware, questa notizia non comporta alcun cambiamento. Tuttavia, se si è tra coloro che utilizzano il firmware 4.00, ora è possibile scaricare i file necessari per eseguire l’exploit.
Attualmente l’exploit si rende compatibile con i seguenti firmware:
- 3.00
- 3.10
- 3.20
- 3.21
- 4.00
- 4.02
- 4.03
- 4.50
- 4.51
Attualmente incluso
- Ottiene letture e scritture arbitrarie e può eseguire un semplice server RPC per letture e scritture (o un server di dump per letture di grandi dimensioni) (è necessario modificare il proprio indirizzo/porta nel file di exploit alle linee 673-677).
- Abilita il menu delle impostazioni di debug (nota: dovrai uscire completamente dalle impostazioni e rientrare per vederlo).
- Ottiene privilegi di root.
Limitazioni
- Questo exploit consente letture e scritture, ma non l’esecuzione di codice. Ciò avviene perché al momento non è possibile estrarre il codice kernel per i gadget, poiché le pagine del kernel
.text
sono contrassegnate come Memoria di sola esecuzione (XOM). Tentare di leggere i puntatori del kernel.text
provocherà un blocco del sistema! - A causa delle limitazioni sopra citate e dell’applicazione della protezione della scrittura nel kernel da parte dell’hypervisor (HV), questo exploit non può installare patch o hook nello spazio kernel, il che significa che al momento non è possibile eseguire codice homebrew correlato.
- Viene applicata e rispettata un’Integrità del Flusso di Controllo (CFI) granulare basata su Clang.
- Supervisor Mode Access Prevention/Execution (SMAP/SMEP) non può essere disabilitata a causa dell’hypervisor.
- La primitiva di scrittura è in parte vincolata, poiché i byte 0x10-0x14 devono essere zero (o corrispondere a un’interfaccia di rete valida). Tuttavia, grazie a lavori più recenti che utilizzano le pipe, è ora possibile effettuare letture e scritture arbitrarie complete.
Come utilizzare
- Configurare
fakedns
tramitedns.conf
in modo da indirizzaremanuals.playstation.net
all’indirizzo IP del proprio computer. - Eseguire fake DNS:
python fakedns.py -c dns.conf
- Avviare il server HTTPS:
python host.py
- Andare nelle impostazioni avanzate di rete della PS5 e impostare il DNS primario all’indirizzo IP del proprio computer, lasciando il DNS secondario a
0.0.0.0
.- A volte il manuale potrebbe non caricarsi ancora e potrebbe essere necessario riavviare, non è chiaro perché succeda, è davvero strano.
- Andare al manuale utente nelle impostazioni e accettare il prompt per il certificato non attendibile, quindi eseguire.
- Facoltativo: Eseguire gli script del server RPC/dump (nota: l’indirizzo/porta deve essere sostituito in forma binaria in
exploit.js
).
Sviluppi futuri
Risolvere i problemi con le socket per uscire pulitamente dal browser (priorità massima).Scrivere alcune patch dati (seconda priorità).Abilitare le impostazioni di debug.Applicare patch per le credenziali con uid0.Effettuare il jailbreak con sovrascrittura di cr_prison.
Migliorare l’affidabilità dell’UAF (Use-After-Free).Migliorare l’affidabilità della socket vittima (terza priorità).Utilizzare un obiettivo di fuga migliore o più coerente rispetto a kqueue (ora non più necessario).- Rendere il caricatore ELF in grado di gestire le rilocazioni.
- Aggiungere il supporto per ulteriori rilocazioni e possibilmente per una completa linkage dinamica.
Utilizzo ELF Loader
- Eseguire l’exploit fino al termine.
- Al completamento, verrà avviato un server sulla porta
:9020
. - Connettersi al server tramite la porta
:9020
. - Inviare il file ELF alla PS5 tramite questa connessione.
- L’ELF verrà eseguito sulla PS5.
Assicurarsi che il file ELF non provochi il crash del browser, in tal caso, èpossibile continuare a inviare ELF senza problemi.
Fasi dell’exploit
Questo exploit funziona in 5 fasi e segue per la maggior parte la stessa strategia dell’exploit di TheFlow.
- Scatena il primo UAF (Use-After-Free) su ip6_pktopts e ottieni due socket che puntano alla stessa
pktopts
/ overlap (master socket <-> overlap spray socket). - Libera la
pktopts
sul socket master e falsificala con uno spray diip6_rthdr
contenente una sovrapposizione contclass
etichettato. - Passo di infoleak. Utilizza la sovrapposizione di
pktopts
/rthdr
per rilevare un kqueue dallo slab 0x200 epktopts
dallo slab 0x100. - Passo di lettura/scrittura arbitraria. Falsifica nuovamente
pktopts
e trova il socket di sovrapposizione per utilizzareIPV6_RTHDR
come primitiva di lettura/scrittura. - Passo di pulizia + patch. Aumenta il conteggio dei riferimenti sui socket corrotti per un’uscita riuscita del browser + patch dati per abilitare il menu di debug e patch di ucreds per uid0.
- Esegui un server di caricamento ELF che accetterà e caricherà/eseguirà i file ELF. Attualmente in fase di sviluppo, al momento non supporta le rilocazioni.
Note sulla stabilità
La stabilità di questo exploit è di circa il 30% – 80-90% e ha due potenziali punti di fallimento, in ordine di probabilità decrescente osservata:
- Stage 1 non riesce a recuperare l’UAF, causando un crash immediato o una corruzione latente che provoca il crash.
- Stage 4 non riesce a trovare un socket vittima.
Note di ricerca
Sembra che, basandosi su vari test e dump con la primitiva di lettura, la PS5 sia tornata a una dimensione di pagina di 0x1000 rispetto ai 0x4000 della PS4.- Dopo ulteriori ricerche, la dimensione della pagina è ancora di 0x4000, ma a causa di alcuni cambiamenti incredibili nell’allocazione, diverse slab possono essere allocate nella stessa pagina virtuale.
- Sembra anche che sulla PS5 le pagine adiacenti raramente appartengano alla stessa slab, poiché si otterranno dati molto diversi in pagine adiacenti. La disposizione della memoria sembra più dispersa.
- Spesso, quando la PS5 va in crash (almeno nel contesto di Webkit), ci sarà una terribile uscita audio poiché il buffer audio viene in qualche modo corrotto.
- A volte questa corruzione audio persiste al riavvio successivo, non si sa perché.
- Similmente alla PS4, la PS5 richiederà che il pulsante di accensione sia premuto manualmente due volte sulla console per riavviarsi dopo un crash.
- È normale che la PS5 impieghi un tempo incredibilmente lungo per riavviarsi da un crash se è isolata dalla connessione internet (sfortunatamente). Prevedi che il riavvio possa richiedere 3-4 minuti.
Download: Source code PS5 IPv6 Kernel Exploit
Fonte: wololo.net