Comprendre une vulnérabilité XXE

La vulnérabilité XXE (XML External Entity) est une faille de sécurité qui permet à un attaquant d'exploiter une application Web qui utilise une entrée XML en vue d'injecter du code malveillant. L'exploitation de cette vulnérabilité peut conduire à des attaques par injection de code ou à des fuites d'informations sensibles.

L'une des méthodes courantes d'exploitation de la vulnérabilité XXE est l'inclusion d'un fichier. Cette technique consiste à exploiter la capacité d'un document XML à inclure des entités externes dans sa structure. En utilisant une entité externe bien conçue, un attaquant peut inclure un fichier malveillant dans le document XML et l'envoyer à l'application Web.

Exemple d’exploitation d’une vulnérabilité XXE


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE menu [ 
<!ENTITY badReference SYSTEM "file:///etc/passwd" > ]>
<menu>
&badReference;

	<food>
		<name>Belgian Waffles</name>
		<price>$ 5,95</price>
		<description>Two of our famous Belgian Waffles with plenty of real maple syrup</description>
		<calories>65</calories>
	</food>
	<food>
		<name>French Toast</name>
		<price>$ 4,50</price>
		<description>Thick slices made from our homemade sourdough bread</description>
		<calories>60</calories>
	</food>
	<food>
		<name>Homestyle Breakfast</name>
		<price>$ 6.95</price>
		<description>Two eggs, bacon or sausage and toast</description>
		<calories>95</calories>
	</food>
</menu>

Lorsque l’application traite le document XML, elle tente d’analyser les entités externes et de les incorporer dans sa structure. Si l’entité externe inclut un fichier malveillant, l’application peut l’exécuter, provoquant ainsi une attaque par injection de code ou une fuite d’informations sensibles.

Pour éviter l’exploitation de cette vulnérabilité, il est recommandé de restreindre l’accès aux fichiers externes et de valider soigneusement les entrées XML de l’application. Les développeurs doivent également utiliser des bibliothèques XML sûres et à jour qui prennent en charge les dernières fonctionnalités de sécurité.

Code sécuritaire en php

code php sécuritaire pour éviter les failles XXE

Dans cet exemple, le contenu XML est récupéré depuis une entrée utilisateur, puis analysé à l’aide de la bibliothèque XML de PHP, DOMDocument. Avant l’analyse, la fonction libxml_disable_entity_loader est appelée pour désactiver l’analyse des entités externes, ce qui empêche toute exploitation de la vulnérabilité XXE.

En désactivant l’analyse des entités externes, la bibliothèque XML ne chargera pas de fichiers externes ni n’exécutera de code malveillant inclus dans le contenu XML. Cela permet de traiter en toute sécurité le contenu XML sans risque de vulnérabilité XXE.

Il est important de noter que cette technique ne doit être utilisée que lorsque l’application Web n’a pas besoin d’analyser les entités externes. Si les entités externes sont nécessaires à l’application, il est recommandé d’utiliser une méthode de validation et de filtrage pour éviter toute exploitation de la vulnérabilité XXE.

En outre, les administrateurs système doivent surveiller de près les journaux d’activité de l’application Web pour détecter toute tentative d’exploitation de la vulnérabilité XXE. En cas de détection d’une telle tentative, il est recommandé de prendre des mesures immédiates pour bloquer l’attaque et pour corriger la vulnérabilité dans l’application.

En conclusion, l’exploitation de la vulnérabilité XXE par l’inclusion d’un fichier est une technique courante utilisée par les attaquants pour injecter du code malveillant ou pour accéder à des informations sensibles. Pour se protéger contre cette vulnérabilité, les développeurs doivent restreindre l’accès aux fichiers externes, valider soigneusement les entrées XML et utiliser des bibliothèques XML sûres et à jour. Les administrateurs système doivent également surveiller les journaux d’activité de l’application Web pour détecter toute tentative d’exploitation de cette vulnérabilité.

Les vulnérabilités XXE sont une des méthodes fréquemment utilisées pour attaquer les REST apis

Leave a Reply