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 :
php
<?php
$page = $_GET['page'];
include($page . ".php");
?>Exploitation :
- Un attaquant peut manipuler le paramètre
pagepour inclure des fichiers sensibles ou des fichiers de configuration, par exemplehttps://example.com/index.php?page=../../../../etc/passwd.
http
GET /index.php?page=../../../../etc/passwd HTTP/1.1
Host: example.comPré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.
php
$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.
php
$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.
apache
# 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 :
php
$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 :
php
$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 :
php
$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 |