top of page
  • Laurent MOULIN

Resources Rot : des centaines de millions de sites web à risque

Dernière mise à jour : 20 avr. 2022

Que se passerait-il si le domaine www[.]google-analytics[.]com présent sur des milliards de sites venait à expirer et à ne pas être renouvelés ? Les sites non mis à jour serviraient alors du code obsolète qui tenteraient en vain de charger et d'exécuter des scripts. Un tiers pourrait s'emparer du domaine expiré et diffuser du code malveillant sous ce domaine. On parle alors en sécurité offensive de détournement de lien (Broken Link Hijacking).


Dans le cas le plus favorable, un lien cassé entraîne simplement une mauvaise expérience pour l'utilisateur ou voir se révèle inutile. Mais dans le cas le plus défavorable, il va constituer une menace pour la cybersécurité de toute personne visitant le site web.


Selon la façon dont le lien est utilisé dans le code du site web, il existe plusieurs façons d'exploiter la vulnérabilité, avec des niveaux de risque variables.


Un peu de contexte


La problématique des liens brisés (ou lien mort) est un phénomène du web observé depuis les années 1990. A cette époque, 3% de tous les liens hypertextes devenaient brisés après un an (Nelson et Allen, 2002). En moyenne, tout lien URL confondu, la durée de vie moyenne est de deux ans (Hans van der Graaf, 2017).


La problématique a surtout été couverte dans le domaine de la recherche académique. En effet, une publication scientifique qui cite ses sources au travers de liens hypertextes pourrait poser des problèmes de crédibilité, de vérification par les pairs et de reproductibilité des résultats.


En revanche, le statut des liens hypertextes (code d'erreur des ressources externes appelées par un site web pour rendre un service à l’utilisateur) est moins voire pas étudié. Cela peut concerner le stockage d’une image, d’une vidéo, d’un code javascript ou d’une feuille de style (CSS) par exemple. Suivant la nature de l’indisponibilité de la ressource, des questions de sécurité informatique se posent, notamment par la militarisation de ces anomalies à des fins malveillantes.


Les liens brisés vers des ressources


Les liens hypertextes sont par définition la base même du web. Ils relient les ressources web entre elles et permettent aux visiteurs de naviguer entre les pages, d’avoir un contenu dynamique et un rendu ergonomique.


Voici un exemple de liens pouvant exister sur un site correctement configuré:



Voici ce que cela donne sur un site comportant un nombre important de liens brisés:



Toutefois, bien que valide lors de la création du site web, ces ressources évoluent au cours du temps et peuvent disparaître: des bibliothèques ne sont plus maintenues, les domaines sont volés ou non renouvelés, des serveurs sont fermés. Le web est dynamique et les ressources qui sont disponibles aujourd'hui ne le seront peut être pas demain.


Mais certains liens brisés peuvent l’être dès la mise en ligne d’un site internet, à cause d'erreurs de programmation ou de coquilles dans les adresses invoquées.


Ci-dessous un lien cassé provenant d’une erreur du programmeur ayant oublié un point pour le chargement de ce script qui est donc chargé sur “wwwbleepstatic[.]com” au lieu de “www[.]bleepstatic[.]com”.



Dans le site ci-dessous un slash a été oublié entre le domaine en “.fr” et la ressource à charger, le navigateur essaye donc de résoudre un domaine avec une extension en ".frundefined".



Broken links hijacking


Dans le cas le plus favorable, un lien cassé entraîne simplement une mauvaise expérience pour l'utilisateur ou voir se révèle inutile. Mais dans le cas le plus défavorable, il va constituer une menace pour la cybersécurité de toute personne visitant le site web.


Les attaques typiques par détournement de liens sont les suivants :

  • Library Hijacking : Des liens vers des bibliothèques supprimées et remplacées par une autre homonyme

  • Domain Hijacking : Des liens vers des domaines expirés qui peuvent être enregistrés ou achetés.

  • Subdomain Hijacking : Des liens vers des sous-domaines qui ne sont plus utilisés et qui sont vulnérables à une prise de contrôle.

Ci après un exemple de lien cassé dans un footer de page résultant en un chargement d’une image impossible par le navigateur, ce dernier le signale en affichant une image cassée :




Même dans le domaine de la sécurité certains sites sont touchés, comme celui de la tristement célèbre faille OpenSSL hearthbleed qui essaie de charger une feuille de style CSS sur “heartbleed.css” qui bien sur n’est pas un site valide.


Si un acteur malveillant arrive à prendre la main sur des ressources externes appelées, il pourrait y injecter des scripts exécutés par le navigateur de la victime et porter préjudice aux sites qui l'utilisent. Un lien brisé d’image ou de CSS pourrait être utilisé pour défigurer un site web (Defacement). Plus grave un lien brisé permettant d'exécuter du code ouvrirait la porte à du vol de données, à la prise de contrôle du serveur ou au piratage de ses visiteurs.


Abandon de noms de domaine à fort trafic


Un cas particulier de causes de liens brisés est le non renouvellement d’un nom de domaine par son propriétaire. Tel le bail d’une location, chaque nom de domaine est attribué à son propriétaire pour une période donnée. En cas de non paiement ou renouvellement du bail, le nom de domaine est de nouveau accessible à l'achat. Ce non renouvellement peut être un oubli, ou bien un abandon pure et simple suite à une Fusion-Acquisition par exemple.


Un des premiers cas célèbre est le non renouvellement du domaine appartenant à Microsoft, passport[.]com, fin 1999. Ce domaine servait à l’authentification sur la messagerie Hotmail. Le nom de domaine a été renouvelé par un utilisateur vigilant, remboursé peut après par Microsoft. La même histoire se répète en octobre 2003 avec le domaine hotmail[.]co[.]uk.


D’autres organisations, des plus modestes à des géants de la Tech comme FourSquare en 2010 ou Google Argentine en avril 2021 ont échoué à gérer proprement leur renouvellement de nom de domaine, sans effet néfaste bien heureusement.


En 2020, des chercheurs de l’Unit42 de la société de sécurité Palo Alto ont découvert que des domaines “parking” (achetés pour être simplement mis en vente) précédemment expirés étaient utilisés pour propager le logiciel malveillant Emotet. Selon leur analyse, 1% des domaines en parking étaient utilisés à des fins malveillantes, soit un potentiel de 3000 domaines par jour.


En 2021, les chercheurs de la société de sécurité Sucuri ont mis au jour une attaque exploitant le domaine non renouvelé tidioelements[.]com du défunt plugin WordPress “visual-website-editor”. Des pirates ont enregistré ce nom de domaine pour y injecter du code malveillant javascript.


La réutilisation à des fins malveillantes de domaines abandonnés peut également s'avérer un vecteur très efficace pour les phishing ou la fraude, utilisant la marque et la réputation de l’organisme originellement détenteur du nom de domaine.


Méthodologie


Notre hypothèse principale est que des sites à très fort trafic peuvent avoir des liens brisés. Nous pensons également que certains de ces liens sont brisés pour cause d’expiration de nom de domaine et donc sujet à des attaques par détournements de liens.


A des fins d’investigation, nous avons développé un crawler visant à scanner les sites de la même manière que le ferait un utilisateur visitant le site avec son navigateur.


Ce robot est spécifique à un scan de surface : il vient parcourir une liste de domaine issue des listes d’Alexa, inspecte les références externes appelées par le code HTML des pages d’accueil visitées et récupère les informations sur les liens brisés.



Le fonctionnement de l’analyse des pages HTML par le robot est le suivant: pour chaque page d’accueil visitée, le robot enregistre l’ensemble des dépendances, leur type (script, img, css, ), leur taille ainsi que les codes HTTP de réponses (200, 302, 404, …).


Si le domaine de la ressource n’existe pas et est un nom de domaine valide, le robot récupère alors l'enregistrement whois si il existe.


Le code du robot a dû être adapté à plusieurs reprises suite à la découverte de nouveaux cas de blocage comme les limitations sur le nombre de requêtes whois, les sites qui chargent des dépendances en continue ou des sites trop long à répondre.


Résultats


Nous avons analysé 88 000 pages d’accueil extraites depuis le Majestic et Alexa. Nous avons identifié un total de 6 325 915 liens vers des ressources externes, dont 30 960 sont brisés (0.5%).



Les images ainsi que les codes javascript représentent un peu plus de 70% des ressources externes.




Sur les 88 000 pages d’accueil, 30960 ont au moins un lien brisé (35,2%).

Les images ainsi que les objets XMLHttpRequest, et les codes javascript représentent un peu plus de 70% des ressources externes invalides.

Les causes d’erreurs les plus fréquentes sont les mixed-content, les ressources non trouvées (HTTP 404 et javascript net::ERR_ABORTED) et les ressources sous restrictions d’accès (HTTP 403) représente près de 70% des erreurs :




En moyenne, nous avons déterminé que la page d’accueil d’un site à 72 dépendances. 60% sont internes et 40% externes.


La distribution ainsi principalement observée est une loi gamma. Ce point est intéressant et permet de modéliser partiellement la répartition du nombre de dépendances par site. On remarque aussi que le début de la distribution ne correspond pas à une loi gamma : notre hypothèse est que cette distribution serait la somme d’au moins deux distributions différentes. De par le faible nombre de points, il ne nous est pas possible de la déterminer. On constate qu'elle est simplement strictement monotone et décroissante.



Un autre résultat intéressant est le TOP 10 des domaines référencés :

Domain

Number

https://facebook.com

42731

https://twitter.com

36992

https://instagram.com

28528

https://youtube.com

24369

https://linkedin.com

16401

https://google.com

9165

https://pinterest.com

6273

https://wordpress.org

3373

https://apple.com

3300

https://vk.com

1398

Interprétation


Au regard de notre analyse, on constate que 0.8% des pages d’accueil ont au moins un lien brisé, quel que soit le type d’erreur. Si ce pourcentage semble faible, il faut le ramener à l’ordre de grandeur du web. Selon le World Economic Forum, en 2021, il y aurait 1,88 milliards de sites web. Ainsi, près de 662 millions de sites web pourraient être affectés par des liens de ressources morts et présenter un risque.


En prenant quelques échantillons, pour une approche qualitative, nous avons remarqué que les erreurs de programmation sont souvent à l’origine de ces liens cassés (impossible à évaluer automatiquement) : les points mal placés, des lettres inversées, des séparateurs “/” oubliés entre le domaine et la ressource, ou encore la ressource prise pour le domaine (example : chargement de https://ressource[.]js au lieux de https://<domain>/ressource.js (sic)). Cela signifie que ces anomalies sont présentes avant la mise en production et cela traduit une implémentation lacunaire voire inexistante des phases de tests.


Une autre catégorie d’anomalie très présente concerne les noms de domaines non renouvelés par des régies publicitaires ou des agences de webdesign(impossible à dire automatiquement). Cela pourrait s’expliquer par un mauvais suivi des dates d’expiration des domaines ou par la cessation des activités de l’entreprise.


Si certains sites ne nécessitent que peu de ressources, d’autres peuvent en avoir plusieurs centaines. Notamment, les régies publicitaires jouent pour beaucoup dans ce nombre de requêtes.

La valeur moyenne de ressource par page web est une métrique intéressante à observer, car chaque ressource est un vecteur de risque supplémentaire pour le site. Certaines de ces ressources externes peuvent être critiques pour le bon fonctionnement du site. Si certaines anomalies peuvent être très visibles rapidement, d'autres touchant des ressources de tâches de fond sont plus difficiles à détecter.


Limitations


La non exhaustivité de nos listes de domaines implique nécessairement l’introduction d’un biais d'échantillonnage. En effet, les sites analysés relèvent nécessairement d’un domaine intéressant les masses grands publics (e.g e-commerce, blog, etc.), mais c’est le choix assumé de cette étude de se concentrer sur l’impact maximal possible en cas d’usage malveillant. En revanche, ces sites à très fort trafic peuvent reposer plus que les autres sur des CMS. Ainsi notre analyse pourrait ne pas être celle des sites à fort trafic, mais celle des technologies et méthodologies sous-jacentes utilisées pour les développeurs.


Il est aussi primordial de tenir compte de l’aspect temporel du web et de sa volatilité : ce qui est vrai aujourd’hui ne peut plus l’être demain. Si nous venions à l’avenir à refaire la même expérience avec la même infrastructure et le même protocole, nous trouverions peut-être des résultats statistiques différents.



Opportunités de recherches


Pour aller plus loin dans notre exploration du web nous pourrions scanner ces mêmes sites à fort trafic (ex : Majestic Million) en profondeur pour en analyser le pourcentage de liens cassés sur l’ensemble du site, et non plus uniquement sa page d’accueil.


Nous pourrions également reproduire le test tous les six mois ou tous les ans, afin d’analyser les tendances sur les références externes et leurs anomalies associées.


Dans l’immédiat, notre prochaine recherche s’intéresse à un cas particulier : les domaines expirés achetables présents dans les liens brisés. Étant disponible à l’achat, il est ainsi possible de les récupérer et d’analyser l’ensemble du trafic hérité de l’ancien service.


Il devrait ainsi être possible de faire des statistiques sur ce trafic (bot, user agent, OS, etc) de manière complètement passive.


Conclusion


En conclusion nous avons pu voir que des liens cassés sont omniprésents sur le web et notamment concernant les ressources externes. Si des recherches existent sur le phénomène des liens morts dans les textes et architecture de site web, ainsi que sur l’usage de librairies externes vulnérables, nous n’avons pas trouvé de références académiques sur notre sujet particulier des liens morts dans les références de ressources externes.


Nos recherches préliminaires indiquent que potentiellement des centaines de millions de sites sont touchés par ce problème. Ils peuvent présenter un risque pour le visiteur de se voir distribuer du contenu malveillant et un risque pour l’entreprise hébergeant le site d’atteinte à son image.


Nous allons poursuivre nos recherches, en achetant des noms de domaines expirés et en analysant le trafic afin de mieux comprendre quelles populations pourraient être visées dans le cas d’une opérationnalisation malveillante de cette anomalie endémique du web.


A propos des auteurs


Nicolas et Laurent sont deux passionnés de DIY et de cybersécurité, ayant décidé de créer chacun leur entreprise de sécurité numérique : X-Rator et Spartan conseil, respectivement.


Ayant chacun des compétences complémentaires, ils ont décidé de se mettre à quatre mains et d’écrire une série d'articles sur la cybersécurité, pour le plus grand plaisir des lecteurs.


Un grand merci à Ronan pour son aide et son expérience rédactionnelle.

129 vues0 commentaire
bottom of page