ProtoPwn è un exploit per le console PlayStation 2 con kernel Protokernel (modelli SCPH-10000, SCPH-15000 e DTL-H10000(S)) che sfrutta una vulnerabilità nel codice di aggiornamento del browser OSDSYS, permettendo l’esecuzione di codice arbitrario.
Come Funziona ProtoPwn?
ProtoPwn è composto da un payload a due stadi e uno strumento di packing:
1. Sostituzione di MBROWS
-
Viene eseguito all’indirizzo
0x7a0000
. -
Modifica il codice di OSDSYS per eseguire una funzione personalizzata nel thread principale.
-
Applica una patch al kernel EELOAD.
-
Disattiva OSDSYS.
-
Cerca l’ELF target nella memory card (
mc0
omc1
). -
Esegue un ELF loader integrato.
2. Embedded ELF Loader
-
Pulisce i residui di OSDSYS.
-
Carica l’ELF target.
-
Resetta l’IOP (Input/Output Processor).
-
Esegue l’ELF desiderato.
3. Packer Script
-
Esegue il minimo necessario per far accettare a OSDSYS il payload.
-
Aumenta leggermente la dimensione del file.
Come Usare ProtoPwn
-
Compilazione:
make
-
Copia su Memory Card:
-
Copia
BIEXEC-SYSTEM
nella root della memory card. -
Copia il payload che vuoi eseguire in
BOOT/BOOT.ELF
.
-
-
Avvio:
-
Inserisci la memory card nella PS2 e avvia la console.
-
Personalizzazione del Percorso del Payload
È possibile modificare il percorso dell’ELF target passando l’argomento BOOT_PATH
al comando make
:
make BOOT_PATH="BOOT/MIO_PAYLOAD.ELF"
Il percorso deve essere relativo a mc0
o mc1
.
Il Meccanismo dell’Exploit: Browser Update
Durante l’avvio, OSDSYS cerca un aggiornamento del browser (MBROWS) nel percorso:
-
mc1:/BIEXEC-SYSTEM/
-
mc0:/BIEXEC-SYSTEM/
Il file manifesto si chiama OSBROWS
e contiene tre righe:
101 # Versione del modulo (deve essere >100) PROTPWN # Nome del file (max 7 caratteri) 007a0000 # Indirizzo di caricamento
Se questo file esiste, OSDSYS lo analizza, carica il modulo specificato a 0x1000000
, lo decomprime e lo esegue all’indirizzo indicato.
Perché è Possibile l’Exploit?
A differenza degli aggiornamenti di sistema, l’aggiornamento del browser:
-
Non è cifrato.
-
Non ha controlli di integrità.
-
Usa uno schema di compressione debole che può essere bypassato facilmente.
Questo permette di eseguire codice arbitrario semplicemente creando un payload personalizzato che viene eseguito nel thread del browser.
Compressione dei Moduli OSD
I moduli OSD sono sempre compressi con questo schema:
<4 byte: lunghezza del payload non compresso (little-endian)> <4 byte: descrittore del blocco> <30 byte: blocco di dati> <4 byte: descrittore del blocco> <30 byte: blocco di dati> ...
Il descrittore del blocco indica se i byte sono compressi e contiene lo shift e la maschera per decomprimerli.
Bypass della Compressione
Per evitare la compressione, il payload può essere scritto così com’è, con:
-
Un header di lunghezza all’inizio.
-
4 byte nulli prima di ogni blocco da 30 byte.
Per maggiori dettagli, consulta il codice su GitHub:
🔗 https://github.com/pcm720/protopwn
ProtoPwn è un esempio affascinante di come vulnerabilità nei sistemi legacy possano essere sfruttate per scoprire nuove possibilità di homebrew e modding sulla PlayStation 2. Se possiedi una delle prime PS2, prova questo exploit e sperimenta con il codice! 🚀