Me contacter :

Nicolas Kerschenbaum

Opera et les attaques de Cross-Site Scripting (XSS) via les flux RSS


Les flux RSS sont de plus en plus utilisés sur Internet. Ayant largement participé à la révolution du web 2.0, ce système permet aux utilisateurs de s'abonner afin d'être prévenu de tout nouveau contenu sur un site Internet, la plupart du temps s'agissant d'un nouvel article (je vous invite d'ailleurs à vous abonner à mon flux RSS =)

Les flux RSS sont souvent diffusés au format RSS ou Atom. Ces deux formats ne sont pas spécialement concurrents, ils offrent un même contenu, mais en utilisant une structure différente.
Le RSS 2.0, format le plus répandu, demeure figé dans son développement et n'est pas assez souple dans certains cas spécifiques. C'est cette souplesse qui a été apportée au format Atom qui propose plus d'innovation.

Ces flux RSS peuvent contenir des informations affichées au format HTML au sein d'une architecture XML.

De nos jour, quasiment tous les navigateurs Internet proposent un lecteur de flux RSS, nous pouvons donc nous demander si l'ensemble du code HTML contenu dans ces flux est interprété par le navigateur lors de la visualisation... et la réponse est parfois oui, comme le montre la récente vulnérabilité dans Opera.

En février dernier, c'était Safari qui souffrait d'une faille de type "Cross-Site Scripting" (XSS) [1]. Lorsque le flux RSS contenait du code JavaScript, celui-ci était exécuté par le navigateur, il était alors possible de voler des fichiers stockés sur l'ordinateur...

La preuve de concept suivante permettait de récupérer le contenu du fichier C:/WINDOWS/win.ini en incitant simplement un utilisateur à visualiser un flux RSS 2.0 :


Code source d'un flux RSS malicieux pour le navigateur Safari 

Le code est disponible sur pastebin à l'adresse suivante : http://pastebin.com/f133c1f70


Aujourd'hui c'est Opera qui est également touché par une vulnérabilité XSS [2], mais cette fois via les flux Atom. Cette faille de sécurité affecte les versions 10.00 du navigateur, mais après quelques recherches, la faille de sécurité a mal été corrigée et est toujours exploitable sur les dernières versions (10.10b1)... Notons d'ailleurs que les versions 9.5.x sont également vulnérables.

La faille de sécurité provient d'un manque de contrôle sur certaines balises et attributs HTML. Il est possible de placer du code JavaScript afin que ce dernier soit exécuté par le navigateur. Des requêtes Ajax (via l'objet XMLHttpRequest), ou l'appel à des fonctions internes du navigateur peuvent donc être réalisés.

En incitant un utilisateur à visualiser un flux RSS Atom malicieux, un pirate peut forcer le lecteur RSS d'Opera à s'abonner à des flux RSS sans même demander confirmation à l'utilisateur, ceci grâce à la fonction opera.feeds.subscribeNative().

Quatre manières d'exécuter du code JavaScript par le biais d'un flux Atom ont été découvertes et sont présentées ci-dessous:


Flux Atom malicieux permettant d'ajouter des flux RSS à l'insu d'un utilisateur

Le code est disponible sur pastebin à l'adresse suivante : http://pastebin.com/f63c2fdfb


Une vidéo présentant cette faille de sécurité est disponible ci-dessous et permet de visualiser le déroulement de l'attaque:




Bien que le fait d'ajouter des flux RSS à un utilisateur n'ait peu d'intérêt en soi, d'autres attaques plus poussées peuvent être dramatiques. Un pirate pourrait voler des documents stockés sur un ordinateur, visualiser le contenu des pages web ouvertes dans d'autres onglets, ou encore changer la configuration du navigateur.

On sous-estime souvent la portée des attaques XSS non permanente, qui une fois exécutées avec les droits de la zone locale, contournent les principales restrictions de sécurité, ce qui laisse libre court à l'imagination du pirate...



Webographie

[1] http://xs-sniper.com/blog/2009/02/13/stealing-more-files-with-safari/
      http://xs-sniper.com/blog/2009/06/09/safari-322-feed-protocol-handler-issues/
[2] http://securethoughts.com/2009/10/hijacking-operas-native-page-using-malicious-rss-payloads/

0 commentaires:

Enregistrer un commentaire