Ricordate l’aggiornamento 11.12.0-44 che Nintendo ha pubblicato per le console portatili 2DS e 3DS all’inizio di Novembre? Ebbene, tale aggiornamento è servito per correggere un kernel exploit contenuto all’interno del modulo StreetPass.
L’exploit è stato rivelato durante il primo giorno della conferenza 36c3 (Chaos Communication Congress). Allo stato attuale per poter eseguire questo exploit, oltre al firmware 11.12 bisogna riuscire ad eseguire codice in un qualsiasi servizio Arm11.
Per chi non ha familiarità con l’architettura hardware e software della console portatile 3DS, ecco un breve riassunto:
- La console portatile 3DS monta due processori principali: un Arm11 MPCORE (a 2 o 4 core), che esegue il sistema principale, i giochi, ecc.. e un Arm9TDMI, che gestisce gli accessi al dispositivo di archiviazione e le attività di sicurezza
- Entrambi i processori eseguono lo stesso sistema operativo, Horizon OS. Il kernel è un microkernel e i driver sono implementati in userland (in “sysmodules”).
- Ogni processo Arm11 ha una whitelist per le chiamate di sistema, un elenco di accesso al servizio e un elenco di accesso MMIO:
- I giochi e le altre applicazioni hanno i privilegi minimi.
- I “servizi” hanno più privilegi, compresa ovviamente la possibilità di rispondere alle richieste di servizio.
- Arm9 esegue una versione ridotta del sistema operativo. Esiste un solo processo di userland in esecuzione su Arm9, chiamato
Process9
, al quale è consentito eseguire codice in modalità supervisore!
- Ogni processo Arm11 ha una whitelist per le chiamate di sistema, un elenco di accesso al servizio e un elenco di accesso MMIO:
- Entrambi i processori comunicano tra loro attraverso i registri MMX
PXI
(che sono fondamentalmente due FIFO).- Il sysmodule Arm11
pxi
(che è anche un driver) comunica conProcess9
in questo modo. Inoltra tutte le richieste IPC e le risposte che riceve così come sono.
- Il sysmodule Arm11
Ciò significa che spetta al kernel Arm11 esporre i buffer provenienti dai processi Arm11 dell’utente come blocchi di memoria fisica con le rispettive dimensioni; il kernel Arm11 deve garantire anche la coerenza della cache (tramite operazioni cache pulite e/o non valide).
Ciò è ottenuto dai driver Arm11 che inviano uno speciale tipo di descrittore di buffer IPC. I descrittori PXI richiedono al processo Arm11 di destinazione di impostare buffer allineati alla pagina in cui le coppie di metadati “indirizzo fisico” e “dimensione” verranno scritte dal kernel Arm11.
Questo particolare tipo di descrittore di buffer viene utilizzato solo quando si inviano comandi al sysmodule pxi (che poi li inoltra a Process9
) e da Process9
su una risposta.
Ciò significa che molto probabilmente la gestione del codice del kernel è stata molto meno testata e rivista rispetto a tipi di descrittori più comuni ed è più soggetta a bug.
Da qui è successo che il codice che gestisce i descrittori del buffer PXI in una richiesta (non una risposta) presentava effettivamente criticità alla sicurezza!
Per ulteriori informazioni e il download dei file riguardanti l’exploit LazyPixie, visitare la repository a questo indirizzo.
Quindi creeranno un metodo più veloce?
Non credo sarà possibile eseguire la modifica del 3DS tanto facilmente, ci sono una serie di passaggi da seguire e tanti file da caricare all’interno della scheda SD, per maggiori delucidazioni fare sempre riferimento alla guida ufficiale presente su: https://3ds.hacks.guide/