Mozilla va s'attaquer au chargement des URI de données dans la barre de navigation de l'URL,
pour combattre le phishing sur Firefox

Data-URI est un schéma d'URI (Uniform Resource Identifier, identifiants uniformes de ressources) contenant directement les données qu'il identifie, contrairement à la plupart des autres schémas. Data-URI est aujourd'hui utilisable en production, bien souvent appelé pour augmenter légèrement les performances de vos sites Web à l'aide de données embarquées via data: et encodées en base64.

Il ne faut pas faire l'amalgame entre un URI et une URL : une URL (Uniform Resource Locator) est seulement un sous-ensemble d'un URI. En effet, alors qu'une URL est un localisateur de ressource, un URI est plus largement un identifiant de ressource. Cela signifie qu'un URI sert à identifier une ressource, sans nécessairement indiquer l'emplacement de celle-ci. Ainsi, un URI ne pointe pas nécessairement vers une ressource à télécharger.

Le schéma data URI (RFC 2397) a été déployé en 1998 lorsque les développeurs cherchaient des moyens d'incorporer des fichiers dans d'autres fichiers. Ce qu'ils ont trouvé était le schéma data URI qui permet à un développeur de charger un fichier représenté sous la forme d'un flux d'octets codé en ASCII dans un autre document.

Depuis, le schéma URI est devenu très populaire auprès des développeurs de sites, car il leur permet d'intégrer des fichiers texte (CSS ou JS) ou des fichiers image (PNG, JPEG) dans des documents HTML au lieu de charger chaque ressource via une requête HTTP séparée.

Cette pratique est devenue extrêmement populaire parce que les moteurs de recherche ont commencé à classer les sites Web en fonction de la vitesse de chargement de leur page et plus les requêtes HTTP d'un site Web étaient longues, plus cela affectait la position SERP (Search Engine Result Page, page de résultats des moteurs de recherche) d'un site.

Cependant, vers la fin des années 2000, les chercheurs en sécurité se sont rendu compte que les URI de données pourraient également être utilisées pour des attaques de phishing et XSS (cross-site scripting), une technique plus tard perfectionnée et mieux expliquée en 2012 par un chercheur de l'Université d'Oslo.

Depuis lors, les campagnes de phishing qui s’appuient sur les URI de données sont devenues monnaie courante. D’ailleurs, comme l’expliquaient des chercheurs en sécurité d’Easy Solutions, ce type d’attaque est intéressant pour quelques raisons :
  • les attaques d'URI de données sont relativement faciles à mettre à l'échelle avec l'utilisation de services gratuits de raccourcissement de lien ;
  • les attaques d'URI de données sont relativement faciles à automatiser ;
  • les attaques d'URI de données ne sont pas « hébergées » dans le sens typique, elles ne peuvent donc pas être mises sur liste noire.

Ces URI de données peuvent également être chargés dans la barre de navigation du navigateur pour rendre le fichier directement, puis utiliser un code malveillant supplémentaire pour masquer l'URL réelle.

Le schéma, qui avait été développé au départ pour « incorporer des fichiers dans d'autres fichiers », est alors devenu une « méthode de navigation » dans les navigateurs modernes.

Halte aux abus !

Des navigateurs comme Google Chrome et Microsoft Edge ont vu cet abus et ont agi en bloquant le chargement des URI de données dans la barre de navigation de l'URL. Mozilla a décidé à son tour de faire de même pour Firefox.

« Nous voulons seulement bloquer les navigations URI de données de haut niveau qui sont principalement utilisées pour le phishing », a précisé Christoph Kerschbaumer, l'un des ingénieurs de Mozilla qui ont travaillé sur cette nouvelle fonction de sécurité. « Je ne vois aucun cas d'utilisation réel pour ces navigations (en dehors des tentatives de phishing réelles). »

À partir de Firefox 59, les ingénieurs de Mozilla prévoient de déployer une série de fonctions de sécurité qui empêcheront le rendu d'URI de données HTML, JS et SVG dangereux dans certains cas:
  • un lien URL de données sur une page est cliqué manuellement ou par programmation ;
  • une page tente de charger une URL de données via des fonctions JavaScript telles que location.href, location.assign () ou location.replace () ;
  • une page tente de charger une URL de données dans un nouvel onglet avec la fonction JavaScript window.open () ;
  • le contenu interne d’un frame tente de charger une URL de données dans la fenêtre de niveau supérieur ou dans un nouvel onglet.

Les URI de données qui affichent des images non SVG, des fichiers PDF, JSON et des fichiers en texte brut ne seront pas affectés, car elles ne peuvent pas être utilisées pour des attaques de phishing.

Source : BC, Easy Solutions