Faille XSS, explications et comment s’en protéger ?

La faille XSS.
Explications et comment s’en protéger ?

La faille XSS de son vrai nom Cross Site Scripting (CSS) est l’une des failles les plus courantes sur le web. Mais comment s’en protéger ?

Cette faille permet de nombreuses possibilités comme détourner des informations sensibles enregistrées dans des formulaires de contact, rediriger des visiteurs vers des sites malveillants ou encore modifier à la volée le CSS et/ou le HTML d’un site web (comme par exemple faire apparaître une belle page blanche).

Et s’il existait une solution ?

Attention, nous ne sommes pas là pour vous apprendre à hacker mais au contraire pour vous apprendre à protéger et sécuriser vos infrastructures, (Réseau, sites web, systèmes etc…).

Qu’est-ce que la faille XSS ?

Le nom CSS à été remplacé par XSS afin d’éviter les amalgames avec le langage CSS (Cascading Style Sheet) qui lui permet de mettre en forme votre site et non de le hacker.

“Cross” peut ici se traduire en français par traverser puisque l’un des objectifs de cette faille est de transmettre les données d’un site vers une personne malveillante.

D’ailleurs, cette faille permet principalement de :

  • Détourner des formulaires et ainsi voler des données sensibles (login, mot de passe, adresse e-mail, contenus sensibles, cookies etc…).
  • Rediriger les visiteurs vers des sites malveillants.
  • Modifier le CSS ou le HTML d’un site comme par exemple faire apparaître une page blanche à la place du contenu ou créer une alerte avec une boite de dialogue.

En effet, le principe de cette faille consiste à injecter un code malveillant dans une page afin de provoquer une action bien définie dans un site web vulnérable. (Souvent, les autres utilisateurs exécutent le script dès l’ouverture de la page, et ce, sans s’en rendre compte).

A savoir que la faille XSS exécute les scripts uniquement côté client. C’est-à-dire que le script en question s’exécutera chez l’utilisateur qui lance le script (inconsciemment) et non directement sur le serveur.

C’est pour cette raison que les morceaux codes malveillants utilisant la faille XSS sont principalement programmé en JavaScript. Notez cependant que la faille XSS peut tout de même être exploitée par d’autres langages de programmation.

Pour finir, la protection contre cette faille est extrêmement simple car il s’agit simplement d’ajouter un morceau de code dans vos fichiers de traitement des données récoltées.

Comment détecter la présence d’une faille XSS ?

Afin de détecter la présence d’une faille XSS sur votre site web, vous pouvez simplement entrer un script Javascript dans un champ de formulaire sur celui-ci. Par exemple dans un commentaire, une barre de recherche ou un formulaire de contact.
post exemple formulaire avec possible faille xss 768x31

Exemple de script pour détecter la présence d’une faille XSS sur votre site web :

<script type="text/javascript">alert('Votre site est vulnérable à la faille XSS. Attention !');</script>

Si une boîte de dialogue apparaît avec le texte suivant :

“Votre site est vulnérable à la faille XSS. Attention !”

alors votre site web est faillible aux failles XSS et si c’est le cas, je vous invite soit :

  • A sécuriser votre site web avec le correctif proposé plus bas dans l’article.
  • De contacter un consultant en CyberSécurité pour vous aider à résoudre vos problèmes de sécurité.

XSS permanentes et non permanentes

Voyons la différence entre les failles XSS permanentes et non permanentes.

Failles XSS permanentes :

Ici, le script est stocké dans la base de données du site. Il peut donc être exécuté à tout moment sur le site par un utilisateur.

Quelques exemples possibles :

  • Le script est écrit dans un commentaire sur un article de blog, il est ensuite enregistré en base de données et exécuté à chaque visite de l’article par un utilisateur.
  • Le script est écrit dans un formulaire de contact, il est ensuite enregistré en base de données et récupère des informations à chaque soumission d’un formulaire par un utilisateur.
  • Le script permet une redirection d’une page vers un site malveillant.
  • Le script vole les cookies des utilisateurs.
  • Le script rend le site inaccessible en envoyant des alertes en boucle.

Failles XSS non permanentes :

Le script est exécuté (souvent ajouté dans url) sans être stocké dans une base de données. Une autre personne visitant la même page quelques secondes après votre injection n’aura pas ce résultat.

C’est à dire qu’il faut une action volontaire d’un utilisateur pour utiliser le code malveillant et se faire voler ses propres données.

Faites donc attention à cela quand un individu louche (ou non) vous demande de faire des manipulations sur votre site !

  • La faille XSS de son vrai nom Cross Site Scripting (CSS) est l’une des failles les plus courantes sur le web. (si ce n’est la faille).
  • Et pratique, cette faille permet de nombreuses possibilités comme détourner des informations sensibles enregistrées dans des formulaires de contact, rediriger des visiteurs vers des sites malveillants ou encore modifier à la volée le CSS et/ou le HTML d’un site web (comme par exemple faire apparaître une belle page blanche).
  • Cette faille consiste à injecter un code malveillant dans une page (via une entrée utilisateur comme un formulaire) afin de provoquer une action bien définie dans un site web vulnérable. (Souvent, les autres utilisateurs exécutent le script dès l’ouverture de la page, et ce, sans s’en rendre compte.)

Faille XSS, comment s’en protéger ?

Comment les pirates exploitent-ils la faille ?

Dans notre exemple, nous allons prendre un script Php/Html permettant de faire des recherches sur un site e-commerce qui vend des fruits par exemple.

Ici, le code complet est sur un seul fichier et il est simplifié à 100000% pour les besoins de l’article. Il se contente d’afficher le résultat que vous avez tapé et non de faire des recherches dans une base de données pour vous montrer tous les produits en lien avec les fruits rouges par exemple. Cependant, cela suffit amplement pour l’exemple.

Prenons donc le script PHP suivant :

<!DOCTYPE html>
<html lang="fr">
    <head>
      <meta charset="utf-8" />
    </head>
    <body>

        <?php
        if(!empty($_GET['keyword']))
        {
            echo "Résultat(s) pour le mot-clé : ".$_GET['keyword'];
        } 
        ?>

        <h1>Barre de recherche :</h1>

        <form type="get" action="">
            <input type="text" name="keyword" />
            <input type="submit" value="Rechercher" />
        </form>
    </body>
</html>

Ce qui donne ceci :

post exemple barre de recherche faille xss

Un utilisateur normal et bienveillant tapera des mots clés comme : article sur les fruits, banane ou encore fruits rouges.

A l’inverse, un autre utilisateur malveillant peut utiliser le Script vu précédemment dans la partie comment détecter la présence d’une faille XSS :

<script type="text/javascript">alert('Votre site est vulnérable à la faille XSS. Attention ! ');</script>

Voici donc ce qu’il va s’afficher à la place du résultat souhaité :

post exemple faille xss

Ici, la faille XSS est non permanente puisque aucune donnée n’est enregistrée en base de données. Si c’était le cas, chaque visiteur visitant cette page verra la boîte de dialogue avec le message suivant :

“’Votre site est vulnérable à la faille XSS. Attention !”

Htmlentities ou Htmlspecialchar

Afin d’éviter les failles XSS vous devez utiliser les fonctions PHP htmlspecialchars() ou htmlentities() afin de filtrer les entrées et éviter qu’un script puisse être exécuté.
Dans notre exemple, il faudra ajouter l’une des deux fonctions dans notre code Php à l’endroit où celui-ci doit afficher la requête utilisateur.

<?php
if(!empty($_GET['keyword']))
{
echo "Résultat(s) pour le mot-clé : ".htmlspecialchars($_GET['keyword'], ENT_QUOTES);
}
?>

Comme cela, si un utilisateur malveillant ajoute un script JavaScript dans votre barre de recherche, le script sera affiché au format texte et n’exécutera pas le script.

Comme par exemple :

post exemple faille xss protege par htmlspecialchars

Ces fonctions doivent être utilisées sur toutes les entrées utilisateurs. N’oubliez jamais, internet est peuplé de personnes malveillantes et par mesure de précaution, vous ne devez faire confiance à personne !

Quoi choisir ?

Htmlentities encode tous les caractères spéciaux (< > « …) mais aussi les é è à ù…

Htmlspecialchars se contente des caractères spéciaux ce qui suppose donc que vous utilisez un charset supportant les caractères comme é è à ù sinon vous aurez probablement des � à la place.

Pour finir, le paramètre ENT_QUOTES est ajouté à la fonction htmlentities ou htmlspecialchars pour préciser d’échapper également les simples guillemets car cela peut être problématique, notamment si, par exemple, vous utilisez la chaîne vulnérable dans un attribut d’une balise HTML qui est sous la forme attribut=’valeur’ : le simple guillemet n’étant pas échappé, il est donc encore possible de fermer cet attribut. Le ENT_QUOTES empêchera cela.

Et WordPress dans tout cela ?

Que vous utilisez WordPress ou un autre CMS, il faut noter une différence importante : vous n’avez pas totalement la main sur votre code et vous ne pouvez pas forcément modifier tous vos fichiers. Surtout que le but d’utiliser un CMS ou un outil no-code, c’est tout de même de ne pas coder…
Normalement, les CMS sont censés être bien codés et sécurisés. Ou pas… Voici une photo prouvant le contraire.

post faille xss wordpress

Alors comment faire ?

Pour moi, il existe deux solutions principales : utiliser un plugin pour optimiser la sécurité de votre CMS et mettre en place des bonnes pratiques de cybersécurité.

SecuPress, un plugin pour tout régler ?

On peut dire que SecuPress est une sorte d’anti-virus pour votre Site WordPress. Il permet notamment de :

  • Scanner votre site.
  • Sécuriser votre espace Administration (Bloquer les tentatives de connexions, changer l’url de la page etc…).
  • Verrouiller les réglages sensibles de WordPress.
  • Interdire l’envoi de .zip pour les thèmes et extensions.
  • Faire les mises à jour WordPress automatiquement.
  • Bloquer les mauvais robots.
  • Sauvegarder vos fichiers et votre base de données.
  • Et beaucoup, beaucoup d’autres.

Ici je vous parle de SecuPress puisque c’est celui que j’utilise (en plus il est français), cependant, de très nombreux plugins similaires existent.

Si vous souhaitez en savoir plus, je vous invite à aller directement sur leur site web : SecuPress.

Quelles bonnes pratiques mettre en place ?

Nous avons pu constater que la faille XSS utilise les formulaires de contact, les barres de recherche, les commentaires dans les blogs etc…

De toutes évidences, vous pouvez faire un minimum confiance au cœur de votre CMS. Ce serait tout de même impensable que nous puissions aller sur tous les sites WordPress, poster un commentaire avec un script JavaScript et exploiter une faille XSS. Cependant, avec les plugins que vous ajouter à votre site, c’est une autre histoire.

Les plugins sont créés par des entreprises ou des membres de la communauté WordPress. Le problème est double car certains ne sont pas toujours bien codés et donc faillibles ou alors ils ne sont plus à jour depuis longtemps et n’ont pas de patch de sécurité…

Donc si vous souhaitez éviter les mauvaises surprises, faites très attention aux plugins que vous installez sur votre site WordPress ou vos CMS de manière générale. Regardez les avis, s’il y a des mises à jour régulières, s’ils sont utilisés par beaucoup de monde et ce que disent les autres sur celui-ci. (Une petite recherche Google ne fait jamais de mal).

Pour finir, vous pouvez toujours tester vos plugins en utilisant le script vu dans la partie : “Comment détecter la présence d’une faille XSS ?“

Du fait de sa simplicité d’utilisation, la faille XSS est l’une des failles web les plus populaires sur le web. Si certaines failles nécessitent beaucoup de connaissances dans le domaine de la cybersécurité, celle-ci est très répandue. Ce qui veut dire que n’importe qui avec un minimum de connaissance en web pourrait attaquer votre site. (Par exemple un concurrent peu scrupuleux, un salarié malveillant ou tout autres personnes voulant vous causer du tort).

Je vous invite donc à prendre cette menace très au sérieuse et de prendre le temps de sécuriser votre site web afin de vous protéger.

Pour résumer, 

la Faille XSS :

  • La faille XSS de son vrai nom Cross Site Scripting (CSS) est l’une des failles les plus courantes sur le web. (si ce n’est la faille).
  • Et pratique, cette faille permet de nombreuses possibilités comme détourner des informations sensibles enregistrées dans des formulaires de contact, rediriger des visiteurs vers des sites malveillants ou encore modifier à la volée le CSS et/ou le HTML d’un site web (comme par exemple faire apparaître une belle page blanche).
  • Cette faille consiste à injecter un code malveillant dans une page (via une entrée utilisateur comme un formulaire) afin de provoquer une action bien définie dans un site web vulnérable. (Souvent, les autres utilisateurs exécutent le script dès l’ouverture de la page, et ce, sans s’en rendre compte.)

Pour se protéger de la faille XSS il faut :

  • Ne jamais faire confiance à vos utilisateurs.
  • Utiliser une fonction PHP comme Htmlentities ou Htmlspecialchar 

Tiri

Je suis un développeur web qui cherche à résoudre les problèmes du monde réel. J'ai la passion d'apprendre et de partager mes connaissances avec les autres, aussi publiquement que possible.