Home Homebrew ProtoPwn sblocca la PS2 originale: homebrew avviabili da memory card su...

[Scena PS2] ProtoPwn sblocca la PS2 originale: homebrew avviabili da memory card su tutti i modelli, anche prototipo

4262
0

ProtoPwn è un nuovo exploit rilasciato dal developer pcm720, figura storica della scena homebrew, che apre nuove possibilità per l’utilizzo della console PlayStation 2.

Pensato specificamente per i primi modelli della console con kernel Protokernel (SCPH-10000, SCPH-15000 e DTL-H10000(S)), questo exploit consente l’esecuzione di codice non autorizzato sfruttando una vulnerabilità nel codice di aggiornamento del browser OSDSYS.

Il risultato è la possibilità di avviare applicazioni homebrew direttamente da una memory card, senza necessità di dischi, modifiche hardware o supporto MagicGate.

Il cuore tecnico di ProtoPwn è un payload a due stadi, unito a uno strumento di impacchettamento. L’exploit fa leva su un file di aggiornamento del browser non cifrato e privo di controlli d’integrità, che viene caricato all’indirizzo 0x7a0000 della memoria.

Una volta in esecuzione, il payload apporta modifiche a OSDSYS, applica una patch al kernel EELOAD, disattiva il sistema principale e cerca sulla memory card un file BOOT.ELF da eseguire.

Il tutto si rende compatibile con qualsiasi tipo di memory card, incluse quelle non ufficiali, rendendo la procedura particolarmente semplice e accessibile.

L’importanza di ProtoPwn è storica, si tratta del primo metodo a rendere vulnerabili via memory card anche i modelli più antichi e prototipici della PlayStation 2, finora esclusi da exploit come FreeMCBoot.

Con questo rilascio, l’intera famiglia PS2 (compresi i modelli destinati a sviluppatori o arcade) può finalmente accedere al mondo homebrew, offrendo nuove opportunità a sviluppatori indipendenti, collezionisti e appassionati di retroconsole.

Utilizzo

  • Eseguire il comando make.
  • Copiare il file BIEXEC-SYSTEM nella directory principale della memory card.
  • Copiare il payload che si desidera eseguire nel percorso BOOT/BOOT.ELF.

Come funziona

  • ProtoPwn è composto da un payload a due stadi relativamente semplice e da uno strumento di packing.

Sostituzione di MBROWS

  • Viene eseguito a partire dall’indirizzo 0x7a0000.
  • Applicare la patch al codice OSDSYS per eseguire una funzione personalizzata nel thread principale.
  • Applicare la patch al kernel EELOAD.
  • Disattivare OSDSYS.
  • Cercare il file ELF di destinazione su mc0 o mc1.
  • Eseguire il loader ELF incorporato.

Loader ELF incorporato

  • Puliere la memoria lasciata da OSDSYS.
  • Caricare il file ELF di destinazione.
  • Reimpostare l’IOP.
  • Eseguire il file ELF di destinazione.

Script di packing semplice

  • Esegue il minimo indispensabile per fare in modo che OSDSYS accetti e “decomprima” il payload.
  • In realtà aumenta la dimensione del file.
  • Il percorso del file ELF di destinazione può essere modificato in fase di compilazione passando l’argomento BOOT_PATH al comando make.
  • BOOT_PATH deve essere relativo a mc0 o mc1, ad esempio: BOOT/BOOT.ELF.

Aggiornamento del browser

Durante l’inizializzazione, il sistema operativo OSDSYS dei modelli con protokernel verifica la presenza di un file di aggiornamento del browser (MBROWS) nelle directory mc1:/BIEXEC-SYSTEM/ e mc0:/BIEXEC-SYSTEM/.

Il file manifest dell’aggiornamento si chiama OSBROWS ed è composto semplicemente da tre righe:

  1. 101 — versione del modulo; deve essere superiore a 100.
  2. PROTPWN — nome del file del modulo, relativo alla cartella BIEXEC-SYSTEM. Non può superare i 7 caratteri.
  3. 007a0000 — indirizzo di caricamento del modulo.

Quando questo file è presente, OSDSYS lo analizza, carica il file specificato all’indirizzo 0x1000000 e lo “decomprime” all’indirizzo di caricamento indicato. Il modulo così caricato viene poi eseguito come funzione del thread del browser OSD.

Similmente a __mbr, questo modulo deve essere privo di intestazione (headerless), con il punto di ingresso situato all’inizio del payload.

Per qualche ragione, a differenza degli aggiornamenti di sistema, l’aggiornamento del browser è completamente non cifrato, senza controlli di integrità o validità, e utilizza uno schema di compressione molto semplice, che può essere facilmente bypassato.

Grazie a queste caratteristiche, è possibile ottenere l’esecuzione di codice personalizzato semplicemente creando un payload da far girare nel thread del browser.

Compressione del modulo

I moduli OSD vengono sempre compressi. Lo schema di compressione è basato su blocchi e ha la seguente struttura:

  • 4 byte che indicano la lunghezza del payload non compresso, in little endian.
  • 4 byte di descrittore del blocco.
  • 30 byte di dati del blocco.
  • 4 byte di descrittore del blocco successivo.
  • 30 byte di dati.
  • …e così via.

Il descrittore del blocco indica se i byte del blocco sono compressi e contiene le informazioni su shift e mask da applicare per decomprimere i dati.

L’utility di decompressione di OSDSYS interrompe l’elaborazione una volta raggiunta la lunghezza del payload dichiarata, ignorando tutti i byte successivi.

Per bypassare la compressione, è sufficiente scrivere il payload non compresso così com’è, anteponendo l’intestazione con la lunghezza all’inizio del file e quattro byte nulli prima di ogni blocco da 30 byte. Per maggiori dettagli, si può consultare il codice di osdpack.

Download: ProtoPwn v1.0.0

Download: Source code ProtoPwn v1.0.0

Fonte: x.com