Home Homebrew Aggiornato l’exploit nel kernel “ipv6 uaf” Cex To Dex

[Scena PS5] Aggiornato l’exploit nel kernel “ipv6 uaf” Cex To Dex

459
0

L’ultima implementazione del PoC LibHijacker sembra aver motivato lo sviluppo dell’exploit nel kernel “ipv6 uaf” sulla console PlayStation 5. Questo ha reso possibile l’installazione di file PKG e fPKG sulla console, anche se attualmente non è possibile eseguirli.

I due progetti si distinguono tra loro. Il PoC originale sviluppato da astrelsky impiega Redis come parte del suo processo.

Redis è un sistema di memorizzazione e caching dei dati in memoria, e in questo caso specifico viene utilizzato per creare un processo “daemon” separato dallo stack utilizzato sulla console PS5.

Questo processo “daemon” viene generato tramite il server Redis in esecuzione sulla console e viene dedicato all’esecuzione dell’applicazione homebrew.

L’uso di Redis in questo contesto permette di creare un ambiente isolato e separato per l’esecuzione dell’applicazione homebrew, prevenendo qualsiasi interferenza con altri processi o stack di sistema.

L’implementazione sperimentale del WebKit ROP per un exploit nel kernel della console PS5, invece, si basa su IPV6 Use-After-Free (UAF) identificato da TheFlow e segnalato su HackerOne.

La strategia dell’exploit è in gran parte derivata dal PoC BSD/PS4 di TheFlow, ma con alcune modifiche per adattarsi alla complicata struttura della memoria della PS5.

Questo exploit crea una primitiva di lettura arbitraria e scrittura (semi-arbitraria). Tuttavia, le capacità di questo exploit sono limitate e quindi è principalmente indirizzato a sviluppatori interessati a sperimentare l’ingegneria inversa su parti specifiche del sistema.

Grazie agli ultimi miglioramenti in termini di stabilità, l’affidabilità dell’exploit è ora attorno all’80%. L’exploit dovrebbe supportare i seguenti firmware:

  • 3.00
  • 3.10
  • 3.20
  • 3.21
  • 4.00 (da fare)
  • 4.02
  • 4.03
  • 4.50
  • 4.51

Attualmente incluso

  • Permette la lettura/scrittura arbitraria e può eseguire un server RPC di base per letture/scritture (o un server di dump per letture di grandi dimensioni) (è necessario modificare il proprio indirizzo/porta nel file di exploit alle righe 673-677).
  • Abilita il menu delle impostazioni di debug (nota: dovrai uscire completamente dalle impostazioni e rientrare 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 impone 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).
    • Tuttavia, a causa del lavoro più recente che utilizza le pipe, ora è possibile la lettura/scrittura completamente arbitraria.

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 (non più necessario).
  • Fare in modo che il caricatore ELF supporti le rilocazioni.
    • Aggiungere il supporto per ulteriori spostamenti e possibilmente un collegamento dinamico completo?

Utilizzo dell’ELF Loader

Per utilizzare l’ELF Loader, l’utente deve eseguire l’exploit fino al completamento. Una volta completato, verrà avviato un server sulla porta :9020.

L’utente deve connettersi e inviare l’ELF alla PS5 tramite quella porta, dopodiché verrà eseguito. A meno che l’ELF non causi un crash del browser, è possibile continuare ad eseguire ELF in modo continuativo.

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 simularlo con uno spray ip6_rthdr contenente una overlap tclass etichettata.
  3. Passaggio di 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.
  6. Eseguire il server di caricamento ELF che accetterà e caricherà/eseguirà ELF. Attualmente WIP, al momento non supporta i trasferimenti.

Note di stabilità

La stabilità per questo exploit è tra l’80%~90% e presenta due potenziali punti di errore. In ordine di probabilità decrescente osservata:

  • Lo Stage 1 non riesce a recuperare l’UAF, causando un arresto anomalo immediato o una corruzione latente che provoca un arresto anomalo..
  • Lo Stage 4 non riesce a trovare un socket della vittima.

Appunti di ricerca

  • Sembra che, in base a vari test e dump con la primitiva di lettura, la PS5 sia tornata a utilizzare una dimensione di pagina di 0x1000 rispetto ai 0x4000 della PS4.
    • Tuttavia, dopo ulteriori indagini, la dimensione della pagina è effettivamente ancora 0x4000. Ciò nonostante, a causa di alcune modifiche apparentemente prive di senso all’allocatore, è possibile assegnare porzioni diverse all’interno della stessa pagina virtuale.
  • Inoltre, sembra che su PS5 le pagine adiacenti appartengano raramente alla stessa “slab”, poiché si ottengono dati molto diversi dalle pagine vicine. Il layout della memoria sembra più disperso.
  • Spesso, quando la PS5 va in modalità panic (almeno nel contesto di WebKit), si verifica un output audio terribile a causa del danneggiamento del buffer audio in qualche modo.
  • In alcuni casi, questa corruzione audio persiste anche dopo il successivo avvio, senza una causa chiara.
  • Analogamente a quanto accadeva su PS4, sulla PS5 è necessario premere manualmente il pulsante di accensione sulla console due volte per riavviarla dopo un panico.
  • È normale che la PS5 impieghi un tempo notevolmente lungo per riavviarsi in caso di panico se non è connessa a Internet (purtroppo). L’avvio dovrebbe richiedere da 3 a 4 minuti.

Download: Source code PS5 4.03/4.50/4.51 Kernel Exploit

Fonte: twitter.com

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.