Actualités

Zoom : quand deux vulnérabilités permettaient une ex-filtration de données et un dépassement de mémoire-tampon !

Désormais comblées depuis le 24 Novembre 2021, le PoC de ces deux failles vient d’être publié, depuis quelques jours : grâce aux mises en lumière de Natalie Silvanovich (Google Project Zero), ces failles ont ainsi révélées des manquements importants voire critiques, selon le degré assigné, depuis le client-même voire ses serveurs MMR.

 

 

En analysant le client Linux dans IDA, j’ai trouvé ce que je croyais être le point d’entrée RTP vidéo et je l’ai fuzzé à l’aide de afl-qemu. Cela a entraîné plusieurs plantages, principalement dans le traitement des extensions RTP. J’ai essayé de modifier le RTP envoyé par un client pour reproduire ces bogues, mais il n’a pas été reçu par l’appareil de l’autre côté et j’ai suspecté que le serveur le filtrait. J’ai essayé de contourner ce problème en activant le cryptage de bout en bout, mais Zoom ne crypte pas les en-têtes RTP, uniquement le contenu des paquets RTP (comme c’est généralement le cas dans la plupart des implémentations RTP) […] Les déploiements Zoom sur site se composent de deux hôtes : le contrôleur et le routeur multimédia (MMR). En analysant le trafic vers chaque serveur, il est devenu clair que le MMR est l’hôte qui transmet le contenu audio et vidéo entre les clients Zoom“, est-il ainsi détaillé.

Au détour, notamment, de l’analyse-trafic RTP (CVE-2021-34423) et après plusieurs observations des paquets (hors RTP et XMPP), une bibliothèque est apparue exploitable du fait qu’elle possédait une activité notable en terme de sérialisation (libssb_sdk.so). En cherchant à l’intérieur (classes : méthodes load_from, save_to, qui avait des caractères commun) au niveau des configurations-paramètres (depuis la classe msg_db_t), il a été possible d’identifier les étapes de sérialisation-désérialisation, un exploit, par logicisme, s’est dégagé via un dépassement de la mémoire-tampon (plafond : 0x1FFF octets) en modifiant ainsi cette limite d’allocation-mémoire, en terme de longueur.

Concernant la seconde faille, assignée CVE-2021-34424, le plantage-système pouvait se produire en détournant le trafic du serveur MMR, en détournant également les lignes de désérialisation qui s’incarnait, en grande partie, lors des webinaires Zoom : “en regardant le code du serveur MMR, j’ai remarqué que ssb::conf_send_msg_req::load_from, la classe dans laquelle la vulnérabilité se produit était également présente sur le serveur MMR. Étant donné que le MMR transfère le trafic de réunion Zoom d’un client à un autre, il est logique qu’il puisse également désérialiser ce type de paquet. J’ai analysé le code MMR dans IDA et j’ai constaté que la désérialisation de cette classe ne se produit que pendant les webinaires Zoom. J’ai acheté une licence Zoom Webinar et j’ai pu planter mon propre serveur Zoom MMR en envoyant ce paquet. Je n’étais pas disposé à tester une vulnérabilité de ce type sur les serveurs MMR publics de Zoom, mais il semble raisonnablement probable que le même code se trouvait également sur les serveurs publics de Zoom“. En cherchant un peu plus loin, il a été constaté que ces désérialisations étaient, en réalité, regroupées sous la forme d’une table de données (ssb::dyna_para_table_t) ou ce type de propriété-champ était jointé à des objets (variables) avec une possibilité d’intégrer un ensemble de noms (strings). Une incohérence ou cyber-attaque par confusion (données) a été décelé dans le traitement de ces objets et noms avec un cas qui pouvait renvoyer potentiellement à 0 en valeur voire une autre valeur, ce qui pouvait conduire à une traduction (dans le code, par le code) en pointeur ou en valeur numérique. Si cette première analyse a permis, selon le chercheur, de ne trouver aucun exploit viable, en revanche, les objets variables (qui se transforment en chaîne) issus de cette table ne sont pas tous vérifiés pour contrôler que l’ensemble (caractère) est nul. “Cela signifiait que si ces variantes étaient converties en chaînes, la chaîne pouvait contenir le contenu d’une mémoire non initialisée […] lorsqu’un utilisateur se connecte à Zoom dans un navigateur, le navigateur ne peut pas traiter les paquets sérialisés, donc le MMR doit les convertir en chaînes pour pouvoir y accéder via des requêtes Web […] si je supprimais le terminateur nul de la variante user_name, il serait converti en chaîne et envoyé au navigateur en tant que nom d’affichage de l’utilisateur“, précise la chercheuse.

Une fois de plus, il a été souligné que contrairement à ce qui est dit ou rappelé par l’éditeur, l’ensemble du code n’est pas, en l’état, optimisé pour un chiffrement de bout-en-bout, notamment pour certains “modes de fonctionnement“. De plus, il a été observé que certaines lignes de codes (très nombreuses), même pour la chercheuse, étaient peu compréhensibles avec un usage ou un besoin vraisemblablement peu essentiel. Enfin – et outre le prix onéreux de Zoom Webinar (licence : 1 500 dollars USD…) qui peut être un frein, notamment dans le domaine de la recherche sécuritaire ce qui amène peu de remontés-erreurs vers Zoom potentiellement – il est souligné que Zoom devrait intégrer, en atténuation (ressources, outils), l’ASLR (Address Space Layout Randomization), une technique permettant d’aléatoiriser la donnée dans la mémoire virtuelle, ce qui peut permettre d’éviter des cyber-attaque comme le dépassement de la mémoire-tampon. En point ultime et à tout cela, il est ajouté que l’usage de logiciels “à sources fermées” n’a pas facilité le PoC et les mises en lumière gravitant autour ; et, donc, les éventuelles analyses sécuritaires ou de veille que pourraient prodiguer les développeurs-chercheurs… A veiller !

 

 

 

Source : Google Project Zero – 18 Janvier 2022 – Exploit 0-clic sur Zoom : deux vulnérabilités (corrigées + manquements sécuritaires à rectifier : chiffrement non de bout-en-bout, pas de techniques d’atténuation de type ASLR, entre-autres).




  • 0% J'apprécieVS
    100% Je n'apprécie pas
    Pas de commentaire

    Laisser un commentaire

    ;) :zzz: :youpi: :yes: :xmas: :wink: :whistle: :warning: :twisted: :sw: :sleep: :sg1: :schwarzy: :sarko: :sante: :rollol: :roll: :rip: :pt1cable: :popcorn: :pff: :patapai: :paf: :p :ouch: :oops: :o :non: :na: :mrgreen: :mdr: :macron: :love: :lol: :kissou: :kaola: :jesuisdehors: :jap: :ilovesos: :idea: :houra: :hello: :heink: :grumpy: :fume: :frenchy: :fouet: :fouet2: :first: :fessee: :evil: :dispute: :demon: :cryy: :cry: :cpignon: :cool: :cassepc: :capello: :calin: :bug: :boxe: :bounce: :bluesbro: :bisou: :babyyoda: :assassin: :arrow: :annif: :ange: :amen: :D :??: :?: :/ :-| :-x :-o :-P :-D :-? :-8 :-1: :+1: :) :( 8-O

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

    Copyright © Association SOSOrdi.net 1998-2022 - v1.11.6