Aller au contenu

LFI Local File Inclusion

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 
$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.
$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.
# 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 :

$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 :

$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 :

$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