Faille d’exécution de code à distance sur l’application de bureau de Discord
Une faille grave d’exécution de code à distance dans l’application de bureau de Discord a été découverte par un chercheur en cybersécurité. Ce problème critique dans la version desktop de Discord a été corrigé. Le bug rendait les utilisateurs vulnérables aux attaques par exécution de code à distance (RCE). Quelques mois auparavant, l’expert en cyber sécurité Masato Kinugawa avait déjà décrit cette faille.
Ce dernier a publié un billet de blog incluant les détails techniques de cette typologie d’attaque, avec la combinaison de plusieurs failles. Le premier souci de sécurité a été repéré dans Electron, le framework utilisé par l’application de bureau Discord. Cette application n’est certes pas open source, mais le code JavaScript utilisé par Electron qui est un projet open source permettant la création d’applications multiplateformes capables d’exploiter JavaScript, HTML et CSS, a été enregistré localement et a pu être extrait et examiné.
Cependant, il s’avère que l’un des paramètres de la construction électronique de Discord, « contextIsolation », est réglé sur « faux », permettant à du code JavaScript extérieur à l’application d’influencer le code interne, comme la fonction Node.js. Le but de cette fonction est d’introduire des contextes séparés entre les pages Web et le code JavaScript.
Le chercheur nécessitait un moyen d’exécution du JavaScript sur l’application, ce qui lui a permis de découvrir un problème de cross-site scripting (XSS) dans la fonction d’intégration iframe, utilisée pour afficher de la vidéo dans le chat lors de la publication d’une URL, comme celle de YouTube. Ce qui l'a conduit à Sketchfab, une visionneuse de contenu en 3D. Sketchfab figure sur la liste blanche de la politique de sécurité du contenu de Discord et peut être intégré dans l'iframe, mais un XSS basé sur un DOM découvert dans la page d'intégration pourrait être utilisé de manière abusive.
Une telle découverte a seulement permis au chercheur d’exécuter JavaScript dans l’iframe, sans permettre l’exécution du code à distance sur l’application desktop de Discord. En tout cas, pas avant que le chercheur ne trouve un procédé de contournement de restriction de navigation dans le code d’événement « will-navigate » d’Electron.
Cette erreur de traitement référencée CVE-2020-15174 combinée à deux autres failles a permis au chercheur de réaliser une attaque par exécution de code à distance en contournant les restrictions de navigation et en utilisant la faille XSS de l’iframe, afin d’avoir accès à une page web qui contient la charge utile RCE.
Par la suite, Masato Kinugawa a partagé ses conclusions à travers le programme Bug Bounty de Discord. Ceci a permis aux développeurs de désactiver l’intégration de Sketchfab et ajouter un attribut « sandbox » à l’iframe.