Sono passati poco più di 4 mesi dall’ultimo aggiornamento del kernel exploit della console PlayStation 5 “ipv6 uaf”. L’implementazione sperimentale sfrutta una strategia di exploit utilizzata in principio dal PoC BSD/PS4 di TheFlow.
L’aggiornamento porta il funzionamento corretto dei trasferimenti relativi nel caricatore ELF dell’ultima catena di exploit basata sul webkit per PS5. Anche gli script delle build e simili sono stati aggiornati in PS5SDK.
Relative relocations should work now in the ELF loader of the latest PS5 webkit-based exploit chain. Build scripts and such have also been updated in PS5SDK.https://t.co/yxAQQLFdgZ
— Specter (@SpecterDev) February 15, 2023
L’exploit dovrebbe supportare i seguenti firmware:
- 3.00 (parzialmente).
- 3.10 (parzialmente).
- 3.20.
- 3.21.
- 4.00 (potenzialmente parzialmente).
- 4.02 (potenzialmente parzialmente).
- 4.03.
- 4.50.
- 4.51.
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).
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à).Utilizza un obiettivo di perdita migliore/più coerente di kqueue. (non più necessario)- Effettuare trasferimenti di supporto del caricatore ELF.
- Aggiungere il supporto per più rilocazioni e possibilmente un collegamento dinamico completo?
Utilizzo ELF Loader
Per utilizzare ELF Loader, eseguire l’exploit fino al completamento. Al termine, verrà eseguito un server sulla porta :9020
. Collegare e inviare il file ELF alla console PS5 su quella stessa porta che lo eseguirà.
Supponendo che il file ELF non arresti in modo anomalo il browser, può continuare ad iniettare gli ELF per sempre.
Fasi dell’exploit
Questo exploit funziona in 5 fasi e per la maggior parte segue la stessa strategia di exploit del poc di theflow.
- Attiva l’UAF iniziale su
ip6_pktopts
e fa in modo che due socket puntino agli stessipktopts
/ overlap (master socket <-> overlap spray socket). - Libera i
pktopts
sul socket principale e lo simula con uno sprayip6_rthdr
contenente una overlaptclass
etichettata. - Passa a Infoleak. Utilizza
pktopts
/rthdr
overlap per perdere una kqueue dallo slab 0x200 epktopts
dallo slab 0x100. - Fase di lettura/scrittura arbitraria. Falsa nuovamente i
pktopts
e trova il socket di overlap per utilizzareIPV6_RTHDR
come primitiva di lettura/scrittura. - Fase di pulizia + patch. Aumenta il refcount sui socket danneggiati per l’uscita dal browser corretta + dati patch per abilitare il menu di debug e patcha ucreds per uid0.
- Esegue il server ELF Loader che accetterà e caricherà/eseguirà file ELF. Attualmente WIP, al momento non supporta i trasferimenti.
Note di stabilità
La stabilità per questo exploit è di circa il 30% 80-90% e presenta due potenziali punti di errore. In ordine di probabilità discendente osservata:
- La fase 1 non riesce a recuperare l’UAF, causando un arresto anomalo immediato o un danneggiamento latente che causa l’arresto anomalo.
- La fase 4 non riesce a trovare una presa per la vittima.
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.- Dopo ulteriori ricerche, la dimensione della pagina è effettivamente ancora 0x4000, tuttavia, a causa di alcune folli modifiche all’allocatore, è possibile allocare lastre diverse nella stessa pagina virtuale.
- Sembra anche su PS5 che le pagine adiacenti appartengano raramente alla stessa lastra, 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 a PS4, 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 panico se è isolata da Internet (purtroppo). Aspettati che l’avvio richieda 3-4 minuti.
Changelog
- Aggiunto il supporto per i trasferimenti relativi.
- Corretti vari bug minori/errori di battitura (grazie a John Tornblom).
Download: PS5 IPV6 Kernel Exploit v1.03
Download: Source code PS5 IPV6 Kernel Exploit v1.03
Fonte: twitter.com