Lo avevano promesso e ci sono riusciti, alla fine l’exploit “ipv6 uaf” è stato trascinato sul firmware 4.50 della console PlayStation 5. Il reverse engineering è stato eseguito dai due veterani Chendochap e SpecterDev.
Questo exploit funziona in modo diverso rispetto alla catena di exploit BD-JB, è stato largamente utilizzato per il jailbreak della console PlayStation 4 sui precedenti firmware 6.72 e 7.0~7.02.
Thanks to some RE work by ChendoChap, repo should now have support for 4.50. If you're on that fw give it a try. If you're on lower, you should probably stay lower 😛
— Specter (@SpecterDev) October 4, 2022
Attualmente incluso
- Ottieni lettura/scrittura arbitraria e può eseguire un server RPC di base per letture/scritture (o un server dump per letture di grandi dimensioni) (devi modificare il proprio indirizzo/porta nel file exploit alle righe 673-677).
- Abilita il menu delle impostazioni di debug (nota: dovrai uscire completamente dalle impostazioni e tornare indietro per vederlo).
- Ottiene i privilegi di root.
Limitazioni
- Questo exploit ottiene la lettura/scrittura, ma non l’esecuzione del codice. Questo perché al momento non è possibile eseguire il dump del codice del kernel per i gadget, poiché le pagine
.text
del kernel sono contrassegnate come eXecute Only Memory (XOM). Il tentativo di leggere i puntatori.text
del kernel andrà in panic. - Come per quanto sopra + l’hypervisor (HV) che applica la protezione da scrittura del kernel, anche questo exploit non può installare patch o hook nello spazio del kernel, il che significa che per il momento nessun codice correlato all’homebrew.
- L’integrità del flusso di controllo (CFI) a grana fine basata su Clang è presente e applicata.
- La prevenzione/esecuzione dell’accesso in modalità supervisore (SMAP/SMEP) non può essere disabilitata a causa dell’alta tensione.
- La primitiva di scrittura è alquanto vincolata, poiché i byte 0x10-0x14 devono essere zero (o un’interfaccia di rete valida).
- La stabilità dell’exploit è attualmente scarsa. Maggiori informazioni su questo di seguito.
- In caso di esecuzione riuscita, uscire dal browser con il pulsante circolare, il pulsante PS va in panic per un motivo attualmente sconosciuto.
Come usare
- Configurare fakedns tramite
dns.conf
per puntaremanuals.playstation.net
all’indirizzo IP del tuo PC. - Eseguire fake dns:
python fakedns.py -c dns.conf
- Eseguire il server HTTPS:
python host.py
- Accedere alle impostazioni di rete avanzate della console PS5 e impostare il DNS primario sull’indirizzo IP del tuo PC e lasciare il secondario su
0.0.0.0
.- A volte il manuale non si carica ancora ed è necessario un riavvio, incerto sul motivo per cui è davvero strano.
- Vai al manuale dell’utente nelle impostazioni e accettare la richiesta del certificato non attendibile.
- Facoltativo: Eseguire gli script del server rpc/dump (nota: indirizzo/porta deve essere sostituito in formato binario in
exploit.js
).
Prossimamente
Riparare i socket per uscire dal browser in modo pulito (priorità top).- Scrivere alcune patch di dati (seconda priorità).
Abilitare le impostazioni di debug.Patch cred per uid0.- Jailbreak con sovrascrittura di cr_prison.
- Migliorare l’affidabilità UAF.
- Migliorare l’affidabilità del socket della vittima (terza priorità).
- Utilizzare un obiettivo di perdita migliore/più coerente rispetto a kqueue.
Utilizzo di RPC e dumping del kernel .data
RPC
RPC è una configurazione molto semplice e limitata.
- Modificare l’indirizzo IP + la porta (se modificato) in
exploit.js
. - Eseguire il server tramite
python rpcserver.py
, consentire alla console PS5 di connettersi al termine dell’exploit. La PS5 invierà l’indirizzo di base del kernel.data
in ASCII e potrai quindi inviare comandi di lettura e scrittura. L’esempio è sotto.
[RPC] Connection from: ('10.0.0.169', 59335)
[RPC] Received kernel .data base: 0x0xffffffff88530000
> r 0xffff81ce0334f000
42 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
> w 0xffff81ce0334f004 0x1337
Wrote qword.
Questa configurazione è un po’ ingannevole e presto sarà implementato un sistema migliore.
Dump
- Modificare l’indirizzo IP + la porta (se modificato) in
exploit.js
. - Commentare il codice RPC in
exploit.js
e decommentare il codice dumper. - Eseguire il server tramite
python dumpserver.py
, consentire alla PS5 di connettersi e avviare il dump al termine dell’exploit. Continuerà a scaricare i dati dalla base del kernel fino a quando non andrà in panic a causa della memoria non mappata. Nota: La lettura è alquanto lenta a circa 200 kbps, quindi potrebbero essere necessari circa 10 minuti per il completamento.
Fasi dell’exploit
Questo exploit funziona in 5 fasi e per la maggior parte segue la stessa strategia di exploit del poc di theflow.
- Attivare l’UAF iniziale su
ip6_pktopts
e fare in modo che due socket puntino agli stessipktopts
/ overlap (master socket <-> overlap spray socket). - Liberare i
pktopts
sul socket principale e simulalo con uno sprayip6_rthdr
contenente una overlaptclass
etichettata. - Passaggio Infoleak. Utilizzare
pktopts
/rthdr
overlap per perdere una kqueue dallo slab 0x200 epktopts
dallo slab 0x100. - Fase di lettura/scrittura arbitraria. Falsare nuovamente i
pktopts
e trovare il socket di overlap per utilizzareIPV6_RTHDR
come primitiva di lettura/scrittura. - Fase di pulizia + patch. Aumentare il refcount sui socket danneggiati per l’uscita dal browser corretta + dati patch per abilitare il menu di debug e patchare ucreds per uid0.
Note di stabilità
La stabilità per questo exploit è di circa il 30% e presenta più potenziali punti di errore. In ordine di probabilità discendente osservata:
- Lo Stage 1 provoca più di un UAF a causa della mancata cattura di uno o più nel reclamo, causando una corruzione latente che provoca il panic qualche tempo dopo.
- Lo Stage 4 trova il socket di sovrapposizione/vittima, ma il pktopts è lo stesso del socket principale, facendo sì che la primitiva “lettura” rilegga semplicemente il puntatore che tenti di leggere invece del contenuto di quel puntatore. Questo ha bisogno di alcuni miglioramenti e deve essere risolto se possibile perché è davvero fastidioso.
- Il tentativo dello Stage 1 di rivendicare l’UAF fallisce e qualcos’altro ruba il puntatore, provocando un panic immediato.
- La perdita di kqueue fallisce e non riesce a trovare un puntatore
.data
del kernel riconosciuto. - Lasciare il browser con mezzi “insoliti” come il pulsante PS, il pulsante di condivisione o il crash del browser, provocherà un panic nel kernel. Ha bisogno di essere indagato.
Appunti di ricerca
- Sulla base di vari test e dumping con la primitiva di lettura, sembra che la PS5 sia tornata alla dimensione della pagina 0x1000 rispetto allo 0x4000 della PS4.
- Sembra anche che su PS5 le pagine adiacenti appartengano raramente allo stesso slab, poiché otterrai dati molto diversi nelle pagine adiacenti. Il layout della memoria sembra più disperso.
- Spesso quando la PS5 va in panic (almeno nel contesto del webkit), ci sarà un output audio terribile poiché il buffer audio viene danneggiato in qualche modo.
- A volte questo danneggiamento dell’audio persiste fino all’avvio successivo, senza sapere perché.
- Simile alla PS4, su PS5 richiederà la pressione manuale del pulsante di accensione sulla console due volte per riavviarsi dopo un panic.
- È normale che la PS5 impieghi un tempo assurdo per riavviarsi dal panic se è isolata da Internet (purtroppo). Aspettati che l’avvio richieda 3-4 minuti.
Download: Source code PS5 4.03/4.50 Kernel Exploit
Fonte: twitter.com
Qual e’ l’ultimo fw uscito su psV?
Il firmware 22.02-06.00.01 rilasciato questa mattina
Sperando che se me ne acaparro una,non abbia un fw superiore al 4.50.
Grazie