Home Modding Corretta recentemente una vulnerabilità su console PlayStation 5

[Scena PS5] Corretta recentemente una vulnerabilità su console PlayStation 5

824
2

Sony potrebbe aver corretto recentemente una vulnerabilità su console PlayStation 5, stando ad un recente rapporto apparso sulla piattaforma di bug bounty HackerOne.

Ad aver rivelato la vulnerabilità il ricercatore di sicurezza m00nbsd, Sony ha valutato la gravità della vulnerabilità come medio-bassa assegnando al ricercatore un premio di tremila dollari.

Secondo il rapporto, la vulnerabilità permetterebbe di bypassare la funzione di sicurezza SMAP (Supervisor Mode Access Prevention) utilizzata dalla CPU x86 della console PlayStation 5.

Sommario

SMAP è una funzionalità di sicurezza sulle CPU x86, che impedisce a ring0 di leggere/scrivere su pagine ring3, rendendo più difficile lo sfruttamento di intere classi di vulnerabilità.

C’è una vulnerabilità in FreeBSD 12 che permette a SMAP di essere aggirato in userland. C’è un’alta probabilità che riguardi la PS5, ma non sono riuscito ad accedere a un firmware PS5 per confermarlo.

Questa vulnerabilità riduce le proprietà di sicurezza del sistema operativo ed è un elemento costitutivo per le catene di sfruttamento.

Dettagli

Con SMAP abilitato, quando %RFLAGS.AC viene cancellato, il kernel eseguirà un errore di pagina se tenta di accedere a una pagina contrassegnata come “user page”. Quando %RFLAGS.AC è impostato, il kernel può accedere alle pagine utente come se SMAP non fosse abilitato.

Nel kernel di FreeBSD esistono alcune funzioni che impostano temporaneamente %RFLAGS.AC per accedere alle pagine utente: le funzioni copyin() e copyout().

Queste funzioni sono utilizzate in tutte le chiamate di sistema e sono gli unici modi in cui il kernel può copiare dati da/a userland.

Queste funzioni gestiscono gli errori con grazia, cioè se userland passa un indirizzo non mappato e il kernel tenta di copiare i dati da esso, le funzioni restituiranno semplicemente un errore senza kernel panic.

C’è un bug nella gestione degli errori di queste funzioni. Tipicamente copyin() è implementato come segue:

Il gestore degli errori copy_fault viene registrato in pcb_onfault all’inizio, quindi viene impostato %RFLAGS.AC, viene eseguita la copia e %RFLAGS.AC viene cancellato.

Se la copia fallisce per qualsiasi motivo, viene sollevata un’eccezione, il gestore trap() vede che pcb_onfault ha un puntatore registrato e semplicemente IRET torna al puntatore che è stato registrato.

Il problema è che il gestore degli errori copy_fault non cancella %RFLAGS.AC, il che significa che rimane impostato dopo il ritorno di copyin()/copyout(). Il resto della syscall verrà quindi eseguito con SMAP effettivamente disabilitato, fino a quando il kernel non ritorna nell’area utenti dove lo stato SMAP viene ripristinato alla normalità.
Questa disabilitazione di SMAP sopravvive ai cambi di contesto, quindi un utente che disabilita SMAP durante una delle sue syscall può anche disabilitare SMAP in altri thread user/kernel se si verifica una riprogrammazione dopo/durante la syscall (prendendo un mutex per esempio).

Fix

Aggiungere un’istruzione clac in copy_fault per cancellare %RFLAGS.AC:

Impatto

Userland può aprire finestre in cui il kernel viene eseguito con SMAP disabilitato. La mancanza di SMAP rende lo sfruttamento delle vulnerabilità comuni facile/banale.

Fonte: hackerone.com