La faille XSS (pour « Cross Site Scripting ») est sans aucun doute le problème le plus répandu en cybersécurité. Une offensive par une attaque XSS peut être redoutable car l’attaquant sera capable de modifier le comportement d’un site web dans le navigateur même de l’utilisateur. Il peut ainsi extraire des données personnelles stockées dans des cookies ou encore rediriger l’utilisateur à son insu vers un autre site par exemple. L’intégration de la recherche des risques XSS lors d’un test d’intrusion orienté Web est donc essentielle.
Découvrez les différents types de test d’intrusion orientés web.
Qu’est-ce qu’une faille XSS ?
Les vulnérabilités XSS sont très répandues sur le web et donc très utilisées par les pirates. Bien qu’elles soient connues, elles existent toujours car elles demandent un travail non négligeable pour être corrigées.
Il existe plusieurs types d’attaques XSS mais le principe de base reste le même : utiliser une vulnérabilité XSS afin d’exécuter un code malicieux dans le navigateur de l’utilisateur. Une fois le défaut détecté et exploité, les possibilités pour le pirate sont quasiment infinies. Il peut lire les informations stockées dans les cookies de l’utilisateur, afficher des informations erronées ou encore rediriger l’utilisateur à son insu vers un site malveillant (imitant à la perfection par exemple le site d’une banque ou d’un site de e-commerce afin d’obtenir des informations confidentielles). Le pirate pourra alors essayer de se faire passer pour l’utilisateur et usurper son identité.
Quelles sont les différentes variantes possible ?
Les trois attaques XSS les plus courantes sont les suivantes.
Stored XSS attack (attaque XSS stockée)
Pour cette attaque, le pirate va préalablement stocker sont code malicieux dans une application web. Il va ensuite faire en sorte que ce code puisse être chargé et exécuté par d’autres utilisateurs à leur insu. L’exemple le plus classique est d’ajouter un lien vers cette application web dans un message posté sur un blog, sur un forum, dans un commentaire. Ainsi, toute personne affichant cette page chargera sans s’en rendre compte le code malicieux qui s’exécutera dans le navigateur.
Reflected XSS attack (attaque XSS reflétée)
Contrairement à une attaque stockée, le code malicieux n’est plus stocké. Il est envoyé directement à la cible via l’url utilisée dans le navigateur. L’url contient l’adresse du site à afficher, qui est souvent suivie de paramètres (après le point d’interrogation « ? » et séparés par le caractère « & »). Le pirate ajoutera directement son code malicieux à la suite des paramètres dans l’URL. De cette façon, le contenu demandé par l’utilisateur s’affichera normalement, mais le code malicieux envoyé va quant à lui pouvoir s’exécuter dans le navigateur.
DOM based XSS attack (attaque XSS basée sur le DOM)
Une attaque XSS basée sur le DOM est redoutablement efficace, en revanche elle est plus complexe à mettre en place.
Tous les navigateurs sont capables d’exécuter du code, JavaScript étant le langage le plus répandu. La plupart des sites web utilisent du code JavaScript en quantité pour fournir aux utilisateurs une interface plus interactive. Là encore, le hacker va injecter son code malicieux qui, lorsqu’il sera exécuté par le navigateur, pourra voler les cookies ou réaliser toutes sortes d’actions.
Comment protéger son site ?
Pour un site web existant, un pentest doit permettre d’identifier les vulnérabilités XSS. Mais rien ne vaut la prévention. La faille la plus facile à corriger est celle qui n’existe pas. Il est donc primordial de prendre en compte la sécurité informatique d’un site ou d’une application web dès sa conception et son développement. Les règles sont toujours les mêmes. « Ne jamais faire confiance à un contenu provenant de l’utilisateur ». Il faut toujours filtrer les données reçues, s’assurer qu’elles sont bien ce qu’elles sont censées être. Les données doivent être « échappées » (afin d’éliminer tout code pouvant potentiellement être exécuté) et validées avant d’être utilisées. Les attaques de type DOM sont plus complexes à contrer et cela nécessite d’encoder correctement tout contenu avant qu’il ne soit utilisé par l’application.
Vous pourriez également être intéressé par les articles suivants :
Pentest Web – Faille CSRF
Les attaques Web cherchant à utiliser une faille CSRF sont plutôt courantes, bien qu’elles puissent assez facilement être contrées. L’existence d’une vulnérabilité de type CSRF
Pentest Web – Faille injection SQL
Le test d’intrusion, ou pentest, permet de rechercher et d’identifier les failles de sécurité informatique d’un système ou d’une application. L’une des failles couramment utilisée