ChromeOS est considéré comme sûr par rapport aux anciens systèmes Windows et MacOS, mais Microsoft a récemment découvert un méchant bogue exploitable à distance dans le serveur audio de ChromeOS, avec un score de gravité de 9,8 sur 10.
ChromeOS est le système d’exploitation propriétaire de Google basé sur le système open-source ChromiumOS, lui-même basé sur Linux. Jonathan Bar Or, chercheur en sécurité chez Microsoft, a découvert le bogue dans le serveur audio de ChromiumOS (CRAS), un service qui achemine le son vers des périphériques tels que des haut-parleurs USB et des casques Bluetooth.
Jonathan Bar Or a découvert un problème de corruption de mémoire locale qui pouvait être déclenché à distance en manipulant les métadonnées audio, soit dans le navigateur, soit via Bluetooth.
« Les attaquants auraient pu inciter les utilisateurs à remplir ces conditions, par exemple en jouant simplement une nouvelle chanson dans un navigateur ou à partir d’un périphérique Bluetooth couplé, ou exploiter les capacités de « adversary-in-the-middle » (AiTM) pour exploiter la vulnérabilité à distance », explique-t-il dans un billet de blog.
Signalement en avril, correctif en juin
Microsoft a signalé le problème à Google en avril. Google a attribué le bogue CVE-2022-2587 et a publié un correctif à la mi-juin, mais travaillait déjà sur des correctifs dans la semaine suivant le signalement du problème. Google l’a décrit comme une faille de haute gravité due à une écriture hors limites dans CRAS.
Or a examiné ChromeOS à la recherche de problèmes similaires aux bogues D-Bus qu’il avait découverts en analysant Linux au début de l’année.
ChromeOS, étant basé sur Linux, pourrait également être vulnérable à des bogues similaires. Mais, note-t-il, ChromeOS nécessite généralement qu’un attaquant enchaîne plusieurs vulnérabilités en raison des mesures de renforcement exclusives de Google. Les failles découvertes sont donc moins nombreuses que dans Windows ou MacOS.
Le bogue du serveur audio était une vulnérabilité de corruption de mémoire spécifique à ChromeOS, que Jonathan Bar Or a découverte après avoir inspecté la fonction de traitement appelée « SetPlayerIdentity », qui appelait la fonction de la bibliothèque C « [strcpy] ».
« Pour l’ingénieur en sécurité expérimenté, la mention de la fonction strcpy déclenche immédiatement des signaux d’alarme », note Jonathan Bar Or. « La fonction strcpy est connue pour provoquer diverses vulnérabilités de corruption de mémoire, car elle n’effectue aucun contrôle des limites et est donc considérée comme non sûre. Comme il n’y a pas de contrôle de limites sur l’argument d’identité fourni par l’utilisateur avant d’invoquer strcpy (outre les limites de longueur de message par défaut pour les messages D-Bus), nous étions sûrs de pouvoir déclencher un dépassement de tampon basé sur le tas, déclenchant ainsi une vulnérabilité de corruption de mémoire. »
Une réponse rapide
Les dépassements de tampon basés sur le tas peuvent conduire à l’exécution de code arbitraire, mais pour rendre l’attaque plus dangereuse, il lui fallait un moyen de la déclencher à distance, ce qu’il a découvert en modifiant les métadonnées audio. Cela peut se faire via le navigateur lorsqu’une nouvelle chanson est jouée, ou via Bluetooth lorsqu’une nouvelle chanson est jouée à partir d’un périphérique Bluetooth couplé. La fonction vulnérable est cras\_bt\_player\_update\_identity.
Jonathan Bar Or a félicité Google pour sa rapidité à résoudre le problème après qu’il a été signalé. Il note que, bien qu’il ne soit pas facile à exploiter, son impact sur un appareil ChromeOS – qui pourrait inclure de vieux Macs et PCs justifiait une telle réponse de la part de Google.
« Nous avons été impressionnés par la rapidité de la correction et l’efficacité du processus global. En moins d’une semaine, le code a été validé et, après plusieurs fusions, mis à la disposition des utilisateurs. Nous remercions l’équipe de Google et la communauté Chromium pour les efforts qu’ils ont déployés pour résoudre ce problème », écrit Jonathan Bar Or.
Source : ZDNet.com
(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/fr_FR/all.js#appId=243265768935&xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));