Home Homebrew L’exploit “ipv6 uaf” ora può essere eseguito anche sul firmware 4.50...

[Scena PS5] L’exploit “ipv6 uaf” ora può essere eseguito anche sul firmware 4.50 della console PlayStation 5

1037
3

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.

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

  1. Configurare fakedns tramite dns.conf per puntare manuals.playstation.net all’indirizzo IP del tuo PC.
  2. Eseguire fake dns: python fakedns.py -c dns.conf
  3. Eseguire il server HTTPS: python host.py
  4. 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.
    1. A volte il manuale non si carica ancora ed è necessario un riavvio, incerto sul motivo per cui è davvero strano.
  5. Vai al manuale dell’utente nelle impostazioni e accettare la richiesta del certificato non attendibile.
  6. 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.

  1. Attivare l’UAF iniziale su ip6_pktopts e fare in modo che due socket puntino agli stessi pktopts / overlap (master socket <-> overlap spray socket).
  2. Liberare i pktopts sul socket principale e simulalo con uno spray ip6_rthdr contenente una overlap tclass etichettata.
  3. Passaggio Infoleak. Utilizzare pktopts/rthdr overlap per perdere una kqueue dallo slab 0x200 e pktopts dallo slab 0x100.
  4. Fase di lettura/scrittura arbitraria. Falsare nuovamente i pktopts e trovare il socket di overlap per utilizzare IPV6_RTHDR come primitiva di lettura/scrittura.
  5. 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