bug facebook
Produits et Services PRODUITS & SERVICES

Un bug Facebook permettant la prise de contrôle de votre compte !

Un expert anglais en cybersécurité, qui se fait appeler fin1te, vient de publier l’histoire fascinante d’un bug Cross-Site Scripting (XSS) qu’il a trouvé au sein du Content Delivery Network (CDN) de Facebook.

Fin1te (qui a pour véritable nom Jack Whitton), a signalé ce bug Facebook en Juillet 2015, et aurait apparemment reçu 7500$ pour ses efforts. Il aurait toutefois attendu jusqu’à la semaine dernière avant de rendre sa découverte publique.

Il a écrit que ce bug Facebook avait été résolu en quelques heures seulement. Cependant il a attendu 6 mois pour le rendre public, afin de laisser assez de temps à Facebook pour finaliser et renforcer le fix en question.

Le bug Facebook XSS : quelques explications !

Nous avons déjà eu l’occasion de décrire des attaques de type XSS auparavant.

Pour simplifier, le terme XSS désigne un type de bug qui permet d’envoyer du contenu vers un site web, comprenant un JavaScript malveillant, lequel site web ultérieurement (et de manière erronée) intégrera le contenu piégé en question, dans ses futures réponses.

Par exemple, vous avez probablement visité beaucoup de sites qui affichent votre nom d’utilisateur en haut de chaque page, une fois que vous vous êtes identifiés et connectés.

Cette méthode est très pratique, tant que votre nom reste plutôt assez inoffensif comme johndoe, et pas quelque chose d’étrange comme : <scr­ipt>ReadSomeCookie()</scr­ipt>.

Si le site web en question, envoie de manière erronée, à votre navigateur un script en lieu et place d’un texte classique ou d’un HTML, votre navigateur l’exécutera au lieu de l’afficher, ce qui résultera en une attaque de type Remote Code Execution (RCE).

A chaque fois qu’un site web affiche, ou fourni, un contenu provenant de l’extérieur, soit caché à l’intérieur d’un fichier uploadé, soit inclus dans une URL, ce dernier doit être très prudent en filtrant les caractères à risque.

Les caractères dangereux concernent en particulier les signes suivants : < et >, car ils sont utilisés pour designer des sous-parties de pages web, qui devront être traités comme des images, des liens, des scripts, etc.

La partie “Cross-Site”

Le hack complet de fin1te est en fait assez compliqué.

Comme beaucoup d’exploits efficaces, plusieurs étapes sont nécessaires, pour permettre au contenu malveillant, uploadé à un endroit, d’être détourné pour réapparaître à un autre endroit.

Il s’agit de la partie “Cross-Site” de l’attaque.

Fin1te a trouvé comment uploader du JavaScript caché au niveau du CDN de Facebook, où des fichiers tels que des vidéos, images, et autres données sont stockées.

Cependant les fichiers CDN, transitent via des noms de domaine tels que fbcdn.net ou akamaihd.net. Ainsi, même si vous arrivez à introduire des scripts malveillants à ce niveau, au moment du rechargement de ces scripts, ils ne pourront pas lire des données telles que des cookies de session à partir de facebook.com, du fait de la mesure de sécurité implantée au niveau du navigateur appelée : la same-origin policy.

La same-origin policy m’empêche d’incorporer du code, au sein de mon site web, qui vise à récupérer des données web privées présentes au niveau de votre site web. Il s’agit ici d’un composant essentiel de la sécurité sur internet.

Contourner la same-origin policy

Fin1te a trouvé une manière de créer une URL, au niveau du domaine photos.facebook.com, qui une fois redirigée, délivre son fichier malveillant à partir du CDN.

En résumé, il dispose à présent d’une méthode pour uploader un script caché au niveau du CDN, et ensuite récupérer ce script via un lien semblant inoffensif, sur lequel un utilisateur dupé finira bien par cliquer, à partir d’un domaine facebook.com.

Son script se mettra à fonctionner, au sein du navigateur de la victime, comme s’il s’agissait d’un script Facebook officiel.

Si l’utilisateur était connecté, le script d’attaque pourra, du moins en théorie, effectuer à peu près tout ce que l’utilisateur lui-même pourrait faire, y compris poster des messages de statuts et récupérer des données privées.

Bien sûr, si je peux envoyer, de façon furtive, des messages à vos amis, en y incluant le même lien malveillant pointant vers le script caché au sien du CDN, alors ces derniers diffuseront à leur tour, lors de l’ouverture du message, le lien auprès de leurs amis, et ainsi de suite.

Une attaque XSS qui peut être manipulée de cette manière est connue sous le nom de wormable, car elle peut être utilisée pour se répandre elle-même automatiquement à travers le réseau, la transformant en un Worm ou un Virus réseau, à l’image des tristement célèbres Morris Worm en 1988, et Slammer en 2003.

La partie la plus géniale de ce bug Facebook !

La partie la plus géniale de cette vulnérabilité ?

Pour uploader ce script caché, fin1te l’a dissimulé à l’intérieur de la partie data d’une image au format PNG. Ainsi, le CDN de Facebook le reconnaîtra comme un fichier image, et de manière incorrecte, le traitera de façon classique, comme un élément sans danger apparent.

Pour ce faire, il a dû créer un fichier image impeccable, pouvant être chargé et affiché correctement dans le cas où il serait traité comme une image, mais dans le cas où il serait traité sous sa forme brute, comme un simple HTML, il contiendra le texte suivant : <scr­ipt>DOBADSTUFF()</scr­ipt>.

Cependant, la partie data de l’image PNG est compressée, avec un algorithme appelé Deflate (la même compression que celle utilisée dans les fichiers ZIP). Ainsi, fin1te a dû trouver des données qui lorsque utilisées comme entrée au niveau de Deflate produiraient, en sortie compressée, un JavaScript.

Comme beaucoup de recherches dans le domaine de la sécurité informatique, cela semble évident et simple, seulement lorsque vous avez trouvé !


Billet inspiré de “This Facebook bug could have allowed hackers to take over your account” par Paul Ducklin de Naked Security

Lire des articles similaires

Qu’en pensez-vous ? Laissez un commentaire.

Your email address will not be published. Required fields are marked *