Ryan M ha pubblicato la seconda parte della serie di articoli dedicati all’hacking dell’hypervisor su console Xbox 360, intitolata “The Bad Update”, in cui illustra il processo di individuazione e sfruttamento delle vulnerabilità dell’hypervisor per ottenere l’esecuzione completa di codice.
Lo sviluppatore sottolinea che questa parte fa frequentemente riferimento alla prima, consigliando di leggerla per una migliore comprensione.
Here's part 2 of my Hacking the Xbox 360 Hypervisor blog series, where I find and exploit bugs in hypervisor code to create the "Bad Update" exploit: https://t.co/fI8btgzByP
— Ryan M (@Grimdoomer) March 3, 2025
Ryan considera l’hypervisor della Xbox 360 uno dei software più sicuri sviluppati da Microsoft, con un solo bug noto derivante da un problema del compilatore.
Nonostante anni di ricerche senza successo, la sua esperienza come ingegnere della sicurezza gli ha permesso di sviluppare una nuova mentalità nell’analisi dei target e nella ricerca di bug, spingendolo a testare le sue capacità su quello che riteneva il “boss finale” dell’hacking delle console.
Il suo obiettivo era sfruttare un bug nel salvataggio di Tony Hawk’s American Wasteland per eseguire una catena di exploit fino all’esecuzione di codice in modalità hypervisor.
Per farlo, ha utilizzato una console Xbox 360 già modificata con funzionalità di debug, consentendogli di eseguire test in linguaggio C e monitorare lo stato interno dell’hypervisor.
Questa configurazione gli ha permesso di individuare e verificare rapidamente eventuali vulnerabilità.
Nella prima parte, Ryan aveva analizzato la superficie di attacco esposta dall’hypervisor alla modalità kernel, che inizialmente contava 65 system call, aumentate a 120 nel corso della vita della console.
Queste chiamate, utilizzabili in qualsiasi momento dal kernel, supportavano varie funzionalità del sistema operativo e presentavano rigidi controlli di sicurezza.
Ryan ha scelto di rianalizzarle con un approccio di code review, eseguendo un reverse engineering approfondito. Sebbene non abbia trovato exploit immediatamente sfruttabili, ha individuato un comportamento interessante nella system call HvxKeysExecute, che eseguiva codice firmato Microsoft in modalità hypervisor.
Analizzando 85 pacchetti di aggiornamento di sistema, ha estratto 25 payload XKE, ma senza trovare vulnerabilità dirette. Tuttavia, ha notato un payload con un potenziale di exploit, legato alla gestione della memoria criptata.
Non avendo trovato bug diretti, Ryan ha spostato l’attenzione sulla memoria criptata dell’hypervisor, che poteva essere modificata esternamente poiché priva di checksum CRC.
Microsoft sembrava consapevole della sua vulnerabilità, evitando di rileggerla, ma il payload XKE che aveva individuato lo faceva, aprendo una possibile via d’attacco.
Per testare il suo approccio, ha tentato di manipolare il codice in modalità kernel scrivendo assembly personalizzato, come la modifica del colore dei LED della console.
La memoria criptata utilizzava un valore di whitening a 10 bit, una chiave di cifratura per ogni avvio e l’indirizzo della cache line, impedendo manipolazioni dirette.
Ryan ha sviluppato una tecnica per ottenere il ciphertext necessario, sfruttando alcune system call dell’hypervisor che permettevano di criptare e riservare memoria in indirizzi arbitrari.
Successivamente, ha mirato alla sovrascrittura della memoria di sola lettura, utilizzando le API HvxKeysExGetKey e HvxKeysExSetKey per creare una primitiva di memcpy che trasferiva il ciphertext nella memoria target.
Questo gli ha permesso di ottenere l’esecuzione di codice in modalità kernel su una console già modificata, verificata con la modifica dei LED della console.
Tornando al payload XKE di aggiornamento del bootloader, Ryan ha scoperto che decomprimeva dati dalla modalità kernel con LZX, utilizzando un buffer di contesto situato in memoria criptata.
Questo buffer conteneva puntatori cruciali, come dec_malloc e dec_output_buffer, offrendo una potenziale via d’attacco.
Tentando di sovrascrivere dec_malloc con un puntatore a shellcode, ha incontrato ostacoli dovuti alla gestione della cache L2, che rendeva l’attacco poco affidabile.
Ha quindi puntato a dec_output_buffer, permettendogli di scrivere dati decompressi direttamente nella memoria dell’hypervisor e ottenere una primitiva di scrittura arbitraria.
Per trasformare questa scrittura in esecuzione di codice, ha identificato una sequenza di istruzioni nel codice dell’hypervisor che gli permetteva di modificare la tabella delle system call e inserire uno shellcode.
Dopo aver sincronizzato il payload con la gestione della memoria, è riuscito a eseguire codice in modalità hypervisor, dimostrando il successo dell’exploit modificando i LED della console.
Ryan ha poi ottimizzato il processo per renderlo più affidabile, migliorando il thread scheduling e riducendo la cache L2 con XLockL2.
Analizzando le dinamiche della memoria, ha trovato il modo di aumentare le probabilità di successo, garantendo che il suo attacco avesse effetto in tempi rapidi.
L’exploit finale, denominato Bad Update, è stato implementato in quattro fasi: un primo ROP per ottenere esecuzione in modalità kernel, un secondo ROP per caricare codice C in kernel, un exploit per attaccare il payload XKE e un assembly finale per stabilizzare l’hypervisor e rimuovere i controlli RSA.
Dopo settimane di ottimizzazione, il primo test con un eseguibile Nyan Cat modificato ha avuto successo in pochi minuti sulla versione di sistema 17559.
L’exploit Bad Update funziona fino alla versione 17559, è puramente software e non persistente, ma non offre la stessa esperienza utente dell’RGH.
Dopo due mesi e mezzo di lavoro, Ryan ha completato il suo percorso nell’hacking delle console e ha annunciato il suo ritiro, lasciando aperta la possibilità di una terza parte per esplorare dettagli tecnici aggiuntivi.
Il codice dell’exploit è stato pubblicato su GitHub con il nome Xbox360BadUpdate.
Fonte: x.com