### 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 `page` pour inclure des fichiers sensibles ou des fichiers de configuration, par exemple `https://example.com/index.php?page=../../../../etc/passwd`. ```http 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. ```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<br>- Exécution de code à distance<br>- Compromission du serveur web | | **Comment la détecter** | - Analyse des journaux de serveur web pour les chemins de fichiers suspects<br>- Utilisation de scanners de vulnérabilités<br>- Audits de code pour les inclusions de fichiers non sécurisées | | **Remédiations/mitigations** | - Validation stricte des entrées utilisateur<br>- Utilisation de la liste blanche pour les chemins de fichiers<br>- Mise à jour et sécurisation des scripts PHP<br>- Désactivation de la directive `allow_url_include` dans PHP | | **Lien de référence** | [OWASP - Local File Inclusion](https://owasp.org/www-community/attacks/Local_File_Inclusion) |