Mauvaise configuration de la sécurité - XXE détaillé
La classe de vulnérabilité "XML eXternal Entities" (XXE) est une mauvaise configuration de sécurité impliquant des analyseurs XML.
La norme XML comprend des moyens de référencer des "entités", telles que des fichiers et des URL. Les analyseurs syntaxiques ont souvent pour défaut de résoudre entièrement les entités externes, ce qui signifie que les documents XML peuvent entraîner la divulgation de fichiers et d'autres informations sensibles à des attaquants potentiels.
Un exemple simple
Examinons un peu un exemple de document XML qui utilise des entités externes :
xml
<?xml version="1.0" ?>
<!DOCTYPE outerElement [
<!ENTITY externalEntity SYSTEM "file:///etc/passwd" > ]>
<outerElement>&externalEntity;</outerElement>
Tout d'abord, nous déclarons un nouveau "doctype" qui définit les types de structure/d'élément qui peuvent exister dans le document et être traités par l'analyseur syntaxique.
Nous y spécifions une entité de type SYSTEM appelée "externalEntity". Cette entité pointe vers le fichier '/etc/passwd'.
Après la définition du "doctype", nous avons nos données XML proprement dites. Nous définissons un "outerElement", puis nous ajoutons une référence (indiquée par le "&") à l'entité "externalEntity".
À ce stade, l'interprète recherche la définition de l'entité et résout l'URL définie et placée à la place de "&externalEntity ;".
À la fin du processus d'analyse, nous obtenons un document qui ressemble à ceci :
xml
<?xml version="1.0" ?>
<outerElement>
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
....
</outerElement>
Atténuation
La nécessité et les spécificités d'une protection complète contre les XXE dépendent fortement du langage, du cadre de travail et de sa version.
Chaque combinaison permet souvent de désactiver certains aspects de l'analyseur syntaxique qui peuvent empêcher la résolution de fichiers, mais pas de chemins HTTP. Elle peut également permettre l'expansion d'entités, ce qui, en soi, peut entraîner un déni de service.
.NET
Si vous utilisez .NET 4.5.1 ou une version inférieure, les classes suivantes sont vulnérables par défaut :
- XmlDocument (Désactiver avec 'xmlDocument.XmlResolver = null;')
- XmlTextReader (Désactiver avec 'xmlTextReader.ProhibitDtd = true;')
- XPathNavigator