Come un bug del driver grafico sul Samsung Galaxy S6 ha fatto trapelare i dati della scheda di Google Chrome

Ti sei mai chiesto come vengono individuate le vulnerabilità della sicurezza? L'azienda britannica GraphicsFuzz spiega come si sono imbattuti in un bug del driver grafico sul Samsung Galaxy S6 che potevano sfruttare per vedere i dati dalle schede aperte in Google Chrome.

Alla fine di marzo, una start-up con sede nel Regno Unito specializzata in test sull'affidabilità delle GPU si è rivolta a noi con un Bug della GPU che hanno scoperto che causa il Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ per riavviare quando si visita una pagina web. L'azienda, ha chiamato GraficaFuzz, ha collaborato con noi per segnalare il problema a Qualcomm E SAMSUNG. Alcuni dei nostri lettori erano interessati a sapere come piace un'azienda GraficaFuzz è in grado di individuare queste vulnerabilità, quindi abbiamo collaborato con l'azienda per mostrare come hanno scoperto una vecchia vulnerabilità della GPU. Questa vulnerabilità già corretta ha consentito a un utente malintenzionato di "spiare" da remoto il contenuto di Google Chrome schede del browser sul SamsungGalaxy S6.

Questo utente stava visualizzando il sito Web della propria banca prima di visitare la pagina Web dannosa. I contenuti sono stati catturati e caricati su un server remoto. Fonte: GraficaFuzz.

Come GraphicsFuzz trova i bug della GPU

Un driver grafico funziona prendendo un programma shader e inviandolo alla GPU per essere eseguito e quindi eseguire il rendering dell'immagine. Prima di inviare lo shader alla GPU, il driver grafico lo traduce in una forma comprensibile alla GPU; una traduzione errata può portare a errori di rendering, arresti anomali del programma o del dispositivo, immagini errate e persino problemi di sicurezza. GraficaFuzz ha un suite di test automatizzati ciò consente loro di trovare questi bug in base a una serie di shader di riferimento. Quando un utente esegue il loro test, si suppone che tutte le immagini risultanti abbiano lo stesso aspetto. Qualsiasi immagine che appare diversa significa che si è verificato un bug.

Risultati di diversi dispositivi popolari che eseguono la suite di test GraphicsFuzz. Samsung Galaxy S6, Samsung Galaxy S7 e Samsung Galaxy S8 sono inclusi in questi grafici. Fonte: GraficaFuzz.

Per il Samsung Galaxy S6, GraficaFuzz ha scoperto che le immagini in una delle righe mostravano immagini che avrebbero dovuto trovarsi in un'altra tabella. Ciò significa che le immagini dei test precedenti filtravano nei test successivi. Il team ha quindi eseguito nuovamente la suite di test in Google Chrome e ha scoperto che parti della pagina web apparivano nell'immagine. Inoltre, hanno scoperto che l'apertura di un'altra scheda faceva sì che l'immagine mostrasse parti di altre schede. In sostanza, questo bug ha consentito a una scheda di Google Chrome di divulgare informazioni su un'altra scheda di Chrome! La squadra dietro GraficaFuzz non stavano cercando intenzionalmente bug di sicurezza, ma alla fine ne hanno trovato uno come risultato dei loro test. (Va notato che il team ha riprodotto il bug sul browser Samsung di serie anche sul Galaxy S6 Mozilla Firefox.)

Come funziona l'errore

Immagine utilizzata per attivare il bug di lunga data sul Samsung Galaxy S6. Fonte: GraficaFuzz.

La pagina web "dannosa" creata da GraficaFuzz utilizza WebGL per tentare di disegnare una scena spaziale all'interno di una tela come mostrato sopra. Il colore di ciascun pixel è determinato da un frammento shader, un programma fornito dalla pagina web da eseguire sulla GPU. IL GraficaFuzz framework ha modificato lo shader del frammento che ne ha causato l'esecuzione per un tempo molto lungo. Quando uno shader viene eseguito per troppo tempo, il browser o il sistema operativo in genere interrompe il rendering. Tuttavia, anche se la GPU ha interrotto il rendering dopo aver disegnato alcuni pixel, il driver della GPU non ha segnalato questo fatto a Google Chrome. (Se dai un'occhiata all'immagine in cima all'articolo che mostra la memoria video spazzatura, puoi effettivamente vedere parti della scena spaziale in alto a sinistra.) Ciò significa che i pixel renderizzati prima dell'interruzione vengono lasciati intatti, il che significa che l'immagine finale renderizzata è per lo più video spazzatura memoria. Poiché la memoria video viene continuamente utilizzata per eseguire il rendering di altre pagine Web, i dati "spazzatura" contengono in realtà rendering precedenti di altre pagine Web. Pertanto, altre pagine Web finiscono per essere visualizzate sulla pagina Web "dannosa". Fondamentalmente, WebGL consente alla pagina Web di acquisire il contenuto di qualunque cosa venga renderizzata; questa immagine viene quindi caricata su un server remoto.

Diagramma che spiega il bug della GPU di lunga durata che causa la "perdita" dei dati della scheda Chrome. Fonte: GraficaFuzz.

Google Chrome utilizza più processi, quindi le diverse schede sono spesso isolate, il che fa sembrare questo exploit impossibile in superficie. Tuttavia, Chrome interagisce con la GPU utilizzando un singolo "processo GPU", il che significa che tutte le schede condividono la stessa memoria GPU, consentendo così il funzionamento di questo exploit. Il diagramma sopra mostra questo in modo più dettagliato.

Il bug è dimostrato in questo video durante i primi 22 secondi. Vengono inoltre dimostrati altri problemi di sicurezza rilevati da GraphicsFuzz.

Lezioni da imparare

Una GPU che si comporta in modo anomalo può aggirare tutte le misure di sicurezza di Google Chrome e Android poiché WebGL consente a qualsiasi pagina Web dannosa di inviare codice alla GPU per l'esecuzione. Google non può correggere i bug della GPU poiché l'azienda non controlla l'hardware e i driver. In questo caso, spetta al fornitore della GPU (in questo caso ARM) correggere il bug e all'OEM i cui dispositivi sono interessati (in questo caso Samsung) integrare la correzione in un aggiornamento. Aggiungi gli operatori al mix ed è facile capire come un bug come questo possa richiedere molto tempo per essere risolto: ci è voluto almeno 5 mesi affinché la maggior parte degli utenti Samsung Galaxy S6 ricevano la patch.

GraficaFuzz aiuta i fornitori di GPU a individuare bug difficili da rilevare, come bug di compilazione errata che causano la generazione e l'esecuzione di codice errato sulla GPU. Il loro framework di test automatizzato consente loro di trovare bug come quello mostrato in questo articolo. È stato dimostrato che il loop di lunga durata causato dalla pagina web "dannosa" causa problemi anche su altri dispositivi come HTC One M7 e più recentemente il Samsung Galaxy S9. GraficaFuzz testa gli smartphone di punta e pubblica a tabella dei risultati che classifica questi dispositivi in ​​base alle loro prestazioni in un sottoinsieme dei loro test. Centinaia di arresti anomali ed errori di rendering sono stati trovati durante i test, ma la maggior parte non viene indagata per vedere se rappresenta una minaccia alla sicurezza. Tuttavia, come dimostrato da questo exploit, una GPU che si comporta in modo anomalo rappresenta un rischio per la sicurezza ed è possibile che una o più vulnerabilità critiche della sicurezza siano in attesa di essere scoperte. GraficaFuzz spera che i fornitori di GPU diano priorità al miglioramento della qualità dei driver in futuro.

Affidabilità comparativa dei driver grafici, ordinati in base al numero di problemi totali. Fonte: GraficaFuzz.

Cronologia della divulgazione

  • Nel dicembre 2016, GraficaFuzz segnalato il bug al Localizzatore di bug di Google Chromium perché era idoneo per il programma Chrome Reward. Dopo che GraphicsFuzz ha inviato il bug al bug tracker di Google Chromium, il bug è stato accettato da Google e lo ha inoltrato ad ARM e Samsung per l'applicazione delle patch.
  • Google inoltrato la relazione ai contatti di ARM e Samsung.
  • Samsung ha risolto silenziosamente il bug e ha implementato la correzione nell'aggiornamento Android 7.0 Nougat rilasciato tra marzo e giugno 2017. Sebbene non sia stato creato alcun CVE da Samsung, Google o ARM e né Samsung né ARM abbiano rilasciato alcuna informazione sulla patch, tieni presente che GraficaFuzz non ho segnalato il bug tramite il processo adeguato.
  • Dopo, GraficaFuzz è stato in grado di confermare che sia Samsung che ARM avevano visto il rapporto e che ARM era stata in grado di risolvere il problema grazie al rapporto.
  • Nell'agosto 2017, GraficaFuzz è stato premiato con $ 2.000 da Google per la segnalazione del bug.
  • Nel novembre 2017, la segnalazione del bug è stata resa pubblica.