Vous êtes-vous déjà demandé comment détecter les failles de sécurité? La société GraphicsFuzz, basée au Royaume-Uni, explique comment elle a rencontré un bug du pilote graphique sur le Samsung Galaxy S6 qu'elle a pu exploiter pour afficher les données des onglets ouverts dans Google Chrome.
Fin mars, une start-up basée au Royaume-Uni et spécialisée dans les tests de fiabilité des GPU nous a approchés avec une Bug GPU qu'ils ont découvert qui provoque le Qualcomm Snapdragon 845SamsungGalaxy S9/S9+ pour redémarrer lors de la visite d'une page Web. L'entreprise, appelée GraphiquesFuzz, a travaillé avec nous pour signaler le problème à Qualcomm et Samsung. Certains de nos lecteurs souhaitaient savoir comment une entreprise comme GraphiquesFuzz est capable de trouver ces vulnérabilités, nous avons donc collaboré avec la société pour montrer comment elle a découvert une ancienne vulnérabilité GPU. Cette vulnérabilité déjà corrigée permettait à un attaquant d'« espionner » à distance le contenu de Google Chrome onglets du navigateur sur le SamsungGalaxy S6.
Cet utilisateur consultait le site Web de sa banque avant de visiter la page Web malveillante. Le contenu a été capturé et téléchargé sur un serveur distant. Source: GraphiquesFuzz.
Comment GraphicsFuzz trouve les bugs du GPU
Un pilote graphique fonctionne en prenant un programme de shader et en l'envoyant au GPU pour qu'il soit exécuté et ainsi restituer l'image. Avant d'envoyer le shader au GPU, le pilote graphique le traduit sous une forme que le GPU peut comprendre; une traduction défectueuse peut entraîner un échec de rendu, des pannes de programme ou de périphérique, des images erronées et même des problèmes de sécurité. GraphiquesFuzz a un suite de tests automatisés cela leur permet de trouver ces bugs sur la base d'un ensemble de shaders de référence. Lorsqu'un utilisateur fait son test, toutes les images résultantes sont censées se ressembler. Toute image différente signifie qu’il y a eu un bug.
Résultats de plusieurs appareils populaires exécutant la suite de tests GraphicsFuzz. Le Samsung Galaxy S6, le Samsung Galaxy S7 et le Samsung Galaxy S8 sont inclus dans ces graphiques. Source: GraphiquesFuzz.
Pour le Samsung Galaxy S6, GraphiquesFuzz a découvert que les images de l'une des lignes montraient des images qui étaient censées se trouver dans une autre table. Cela signifie que les images des tests précédents ont été divulguées dans les tests ultérieurs. L'équipe a ensuite réexécuté la suite de tests dans Google Chrome et a découvert que des parties de la page Web apparaissaient dans l'image. De plus, ils ont constaté que l’ouverture d’un autre onglet provoquait l’affichage de parties d’autres onglets sur l’image. Essentiellement, ce bug a permis à un onglet de Google Chrome de divulguer des informations sur un autre onglet Chrome! L'équipe derrière GraphiquesFuzz ne recherchait pas intentionnellement des bogues de sécurité, mais ils ont fini par en trouver un à la suite de leurs tests. (Il est à noter que l'équipe a reproduit le bug sur le navigateur Samsung d'origine du Galaxy S6 ainsi que Mozilla Firefox.)
Comment fonctionne le bug
Image utilisée pour déclencher le bug de longue date sur le Samsung Galaxy S6. Source: GraphiquesFuzz.
La page web « malveillante » créée par GraphiquesFuzz utilise WebGL pour tenter de dessiner une scène spatiale à l'intérieur d'un canevas, comme indiqué ci-dessus. La couleur de chaque pixel est déterminée par un fragment shader, un programme fourni par la page Web à exécuter sur le GPU. Le GraphiquesFuzz Le framework a modifié le fragment shader, ce qui l'a fait fonctionner très longtemps. Lorsqu'un shader s'exécute trop longtemps, le navigateur ou le système d'exploitation abandonne généralement le rendu. Cependant, même si le GPU a interrompu le rendu après avoir dessiné quelques pixels, le pilote du GPU ne l'a pas signalé à Google Chrome. (Si vous regardez l'image en haut de l'article montrant une mémoire vidéo inutile, vous pouvez réellement voir des parties de la scène spatiale en haut. à gauche.) Cela signifie que les pixels qui ont été rendus avant l'abandon restent intacts, ce qui signifie que l'image finale rendue est principalement une vidéo inutile. mémoire. Étant donné que la mémoire vidéo est utilisée en permanence pour restituer d’autres pages Web, les données « inutiles » contiennent en réalité des rendus antérieurs d’autres pages Web. Ainsi, d'autres pages Web finissent par s'afficher sur la page Web « malveillante ». Fondamentalement, WebGL permet à la page Web de capturer le contenu de tout ce qui est rendu; cette image est ensuite téléchargée sur un serveur distant.
Schéma expliquant le bug GPU de longue date provoquant une « fuite » des données de l'onglet Chrome. Source: GraphiquesFuzz.
Google Chrome utilise plusieurs processus, de sorte que différents onglets sont souvent isolés, ce qui rend cet exploit apparemment impossible. Cependant, Chrome interagit avec le GPU en utilisant un seul « processus GPU », ce qui signifie que tous les onglets partagent la même mémoire GPU, permettant ainsi à cet exploit de fonctionner. Le diagramme ci-dessus le montre plus en détail.
Le bug est démontré dans cette vidéo pendant les 22 premières secondes. D'autres problèmes de sécurité découverts par GraphicsFuzz sont également démontrés.
Leçons à tirer
Un GPU qui se comporte mal peut contourner toutes les mesures de sécurité de Google Chrome et Android puisque WebGL permet à toute page Web malveillante d'envoyer du code au GPU pour exécution. Google ne peut pas corriger les bugs du GPU puisque l'entreprise ne contrôle pas le matériel et les pilotes. Dans ce cas, c'est au fournisseur de GPU (dans ce cas, ARM) de corriger le bug et à l'OEM dont les appareils sont concernés (dans ce cas, Samsung) d'intégrer le correctif dans une mise à jour. Ajoutez des opérateurs au mix et il est facile de voir à quel point un bug comme celui-ci peut prendre beaucoup de temps à corriger - il a fallu au moins 5 mois pour que la plupart des utilisateurs de Samsung Galaxy S6 reçoivent le correctif.
GraphiquesFuzz aide les fournisseurs de GPU à trouver les bogues difficiles à détecter, tels que les bogues de mauvaise compilation qui entraînent la génération et l'exécution d'un code incorrect sur le GPU. Leur cadre de tests automatisés leur permet de trouver des bugs tels que celui présenté dans cet article. Il a également été démontré que la boucle de longue durée provoquée par la page Web « malveillante » provoque des problèmes sur d'autres appareils tels que le HTC Un M7 et plus récemment le SamsungGalaxy S9. GraphiquesFuzz teste les smartphones phares et publie un tableau des résultats qui classe ces appareils en fonction de leurs performances sur un sous-ensemble de leurs tests. Des centaines de crashs et d'erreurs de rendu ont été trouvés lors de leurs tests, mais la plupart ne font pas l'objet d'une enquête pour voir s'ils constituent une menace pour la sécurité. Cependant, comme le montre cet exploit, un GPU qui se comporte mal constitue un risque pour la sécurité, et il est possible qu'une ou plusieurs vulnérabilités de sécurité critiques attendent d'être découvertes. GraphiquesFuzz espère que les fournisseurs de GPU donneront la priorité à l’amélioration de la qualité des pilotes à l’avenir.
Fiabilité comparative des pilotes graphiques, triés par nombre total de problèmes. Source: GraphiquesFuzz.
Chronologie de la divulgation
- En décembre 2016, GraphiquesFuzz a signalé le bug au Suivi des bugs de Google Chromium car il était éligible au programme Chrome Reward. Après que GraphicsFuzz ait soumis le bogue au outil de suivi des bogues de Google Chromium, le bogue a été accepté par Google et l'a transmis à ARM et Samsung pour correction.
- Google a transmis le rapport aux contacts chez ARM et Samsung.
- Samsung a corrigé le bug en silence et a déployé le correctif dans la mise à jour Android 7.0 Nougat publiée entre mars et juin 2017. Bien qu'aucun CVE n'ait été créé par Samsung, Google ou ARM et que ni Samsung ni ARM n'aient publié d'informations sur le correctif, notez que GraphiquesFuzz n'a pas signalé le bug via le processus approprié.
- Plus tard, GraphiquesFuzz a pu confirmer que Samsung et ARM avaient vu le rapport et qu'ARM était en mesure de résoudre le problème grâce au rapport.
- En août 2017, GraphiquesFuzz a été récompensé de 2 000 $ par Google pour le rapport de bug.
- En novembre 2017, le rapport de bug a été rendu public.