Aller au contenu

Généralités

Description

Les failles d'inclusion de fichiers locaux (LFI) se produisent lorsqu'une application web inclut des fichiers locaux sans validation adéquate des entrées utilisateur. Cela permet à un attaquant d'inclure des fichiers arbitraires du serveur dans l'application, pouvant entraîner la divulgation de fichiers sensibles, l'exécution de code malveillant, et d'autres conséquences graves.


Exemple d'Attaque LFI

Scénario d'attaque :

  • Une application web inclut dynamiquement un fichier en fonction des paramètres fournis par l'utilisateur via une URL, par exemple https://example.com/index.php?page=home.

Exemple de code vulnérable :

1
2
3
4
<?php 
$page = $_GET['page']; 
include($page . ".php"); 
?>

Exploitation :

  • Un attaquant peut manipuler le paramètre page pour inclure des fichiers sensibles ou des fichiers de configuration, par exemple https://example.com/index.php?page=../../../../etc/passwd.
GET /index.php?page=../../../../etc/passwd HTTP/1.1 
Host: example.com

Prévention des Attaques LFI

Validation et Sanitation des Entrées :

  • Valider et assainir toutes les entrées utilisateur pour s'assurer qu'elles ne contiennent pas de caractères spéciaux ou de chemins relatifs.
1
2
3
4
5
6
$whitelist = ['home', 'about', 'contact']; 
$page = $_GET['page']; 
if (!in_array($page, $whitelist)) { 
die("Page non autorisée."); 
} 
include($page . ".php");

Utilisation de Chemins Absolus :

  • Utiliser des chemins absolus pour les fichiers inclus afin d'empêcher les manipulations de chemins relatifs.
$page = basename($_GET['page']); 
include("/var/www/html/pages/" . $page . ".php");

Configuration du Serveur :

  • Configurer le serveur pour restreindre l'accès aux fichiers critiques et sensibles.
1
2
3
4
5
# Exemple de configuration Apache 
<Directory /var/www/html> 
Options -Indexes 
AllowOverride None 
</Directory>

Détection des Failles LFI

Revue de Code :

  • Examiner le code source pour identifier les inclusions de fichiers basées sur des entrées utilisateur sans validation adéquate.

Tests Manuels :

  • Effectuer des tests manuels en manipulant les paramètres de requêtes pour inclure des fichiers arbitraires et vérifier la présence de vulnérabilités.

Utilisation d'Outils de Sécurité :

  • Utiliser des outils de sécurité tels que Burp Suite, OWASP ZAP, ou des scanners spécifiques pour détecter les failles LFI.

Exemples de Prévention

Validation stricte des Entrées :

1
2
3
4
5
6
$allowed_pages = ['home', 'about', 'contact']; 
$page = $_GET['page']; 
if (!in_array($page, $allowed_pages)) { 
die("Page non autorisée."); 
} 
include($page . ".php");

Utilisation de Fonctions Sécurisées :

1
2
3
4
5
6
$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_STRING); 
$allowed_pages = ['home', 'about', 'contact']; 
if (!in_array($page, $allowed_pages)) { 
die("Page non autorisée."); 
} 
include(__DIR__ . "/pages/" . $page . ".php");

Contrôle des Chemins :

1
2
3
4
5
6
$page = realpath(__DIR__ . "/pages/" . $_GET['page'] . ".php"); 
$base_dir = realpath(__DIR__ . "/pages/"); 
if (strpos($page, $base_dir) !== 0 || !file_exists($page)) { 
die("Page non autorisée."); 
} 
include($page);

Catégorie Information
TTP Technique d'injection de fichier local
CWE CWE-98 (Improper Control of Filename for Include/Require Statement in PHP Program ('PHP Remote File Inclusion'))
Description de l'attaque LFI permet à un attaquant d'inclure des fichiers sur un serveur via le navigateur web. Cela se produit souvent lorsque les pages utilisent une entrée non validée pour charger des fichiers dynamiquement.
Impacts potentiels - Divulgation d'informations sensibles
- Exécution de code à distance
- Compromission du serveur web
Comment la détecter - Analyse des journaux de serveur web pour les chemins de fichiers suspects
- Utilisation de scanners de vulnérabilités
- Audits de code pour les inclusions de fichiers non sécurisées
Remédiations/mitigations - Validation stricte des entrées utilisateur
- Utilisation de la liste blanche pour les chemins de fichiers
- Mise à jour et sécurisation des scripts PHP
- Désactivation de la directive allow_url_include dans PHP
Lien de référence OWASP - Local File Inclusion