> Exit 0;

Le blog d'un développeur qui de 0 devient un 1.

Web, sécurité et Laravel : exemples et cas d'usage [2/3] image

SÉCURITÉ

Web, sécurité et Laravel : exemples et cas d'usage [2/3]

Par Aubin Puyoou, publié le 22/09/2021 à 00:46.

Toujours muni de ma machine de test, voici aujourd'hui quelques exemples relatifs aux failles de Cross-Site Scripting (XSS) et de téléversement non contrôlé de fichiers. Nous verrons également quelques exemples classiques d'exploitation de ces failles et des vulnérabilités qu'elles peuvent engendrer.

XSS

Injection de code Javascript

Ce type de faille pourtant bien connu est encore présent dans grand nombre de sites. Certes les frameworks modernes fournissent pour la plupart des outils de maquettage HTML, et incluent directement un nettoyage des chaînes de caractères pour s'en prémunir. Mais lorsqu'il est possible d'en exploiter, celles-ci peuvent s'avérer redoutables : récupération de cookies de session, exécution d'actions non souhaitées par l'utilisateur principal, validation de formulaires ...

Exemple de détection de faille

Exemple de détection de faille

La plupart du temps, lorsqu'il est possible de saisir des valeurs depuis des formulaires, des données mal nettoyées peuvent laisser place à de l'injection de code. Ainsi, en manipulant leur contenu, il est facile d'y ajouter certaines commandes. La meilleure façon de vérifier cela est d'ajouter une balise script qui nous permettrait d'effectuer des traitements à l'insu d'un l'utilisateur, où même d'un administrateur de site.

Dans notre exemple ci-dessus, la donnée saisie ici est ensuite stockée dans une base de données de façon à fournir une liste affichables aux yeux de tous les utilisateurs. Ainsi, le champ stocké étant du code Javascript, celui-ci se retrouvera interprété sur chaque page où notre valeur apparaîtra à l'écran.

Exemple de détection de faille

Ainsi, suite à notre injection de code, le champ texte précédemment stocké est interprété par le navigateur, et nous affiche donc les cookies de notre session. Pouvoir les afficher grâce à un formulaire reste un moyen de démontrer qu'un site est vulnérable aux failles XSS.

Exemple de détection de faille

Il est ainsi facile d'imaginer un scénario où ces cookies sont ensuite envoyés via une requête HTTP à un site tiers, ou même d'aisément transmettre d'autre types d'informations plus importantes

Templates Blade contre PHP natif

Laravel fournit directement des outils permettant de contrer ce type de faille, en nettoyant systématiquement les variables qu'il affiche. Contrairement au système PHP natif, qui nous obligerait à contrôler chaque variable, les directives Blade "{{ }}" incluent directement des fonctionnalités de purification de variables, contre les failles XSS.

Dans de rares cas, il peut être voulu d'interpréter du code directement dans notre page. Dans ces cas précis, mieux vaut s'assurer que les variables traitées ainsi n'aient pas été ajoutées par un tiers. Ce type de failles pouvant mener à diverses exploitations malicieuses, suivant le niveau de connaissance de votre site par celui-ci.

Import de fichiers non contrôlé

Import et exploitation de fichiers contenant du code source

L'import de fichier dans une application peut donner accès à des vulnérabilités critiques de votre système. Il est ainsi primordial de contrôler systématiquement les fichiers entrants, en analysant au miminum leur taille, leur type, et en s'assurant de leur contenu.

Petit exemple d'exploitation d'une telle faille...

En déposant un peu de code PHP

En déposant un peu de code PHP

Pour cet exemple, l'exploitation de la faille a été grandement simplifié pour la démonstration. De manière à bien démontrer l'étendue de la vulnérabilité. Le formulaire ci-contre nous permet d'importer un fichier vers notre serveur, tentons donc d'y insérer un fichier PHP, avec le contenu suivant :

<?php
    print_r(file_get_contents('/etc/passwd'));

Une fois le fichier déposé, il nous reste encore à trouver où celui-ci a été placé dans notre système de fichiers, et s'il est accessible. Dans notre cas, l'exercice est facilité, le chemin étant directement indiqué.

Exploitation du fichier

Rendons-nous donc à l'emplacement du fichier :
http://localhost/hackable/uploads/hacked.php

Certes récupérer le contenu du fichier /etc/passwd ne permet pas d'affecter directement la machine en soi, mais cela permet d'indiquer qu'une machine est vulnérable.

Exploitation du fichier

Protection par validation

De manière à pouvoir éviter ce type de faille, Laravel inclue un validateur permettant d'évaluer facilement les fichiers envoyés. Lorsqu'un formulaire inclue un fichier, assurez-vous systématiquement que le contrôleur en amont vérifie ses propriétés.

Validator::make($request->all(), [
    'photo' => 'mimes:jpg,bmp,png|max:10240' //de manière à vérifier type et taille
]);

Évidemment, même malgré tous les bons outils, il est toujours recommandé de s'assurer soi-même de la validité d'un fichier téléversé, via d'autres bibliothèques adaptées aux types de fichiers que vous traitez; l'exploitation de ce type de faille pouvant être la porte vers une attaque directe à votre système.