hero bg no divider
Directives

Mauvaise configuration de la sécurité - XXE détaillé

La classe de vulnérabilité « XML External Entities » (XXE) est une erreur de configuration de sécurité impliquant des analyseurs XML.

La norme XML inclut des moyens de référencer des « entités », telles que des fichiers et des URL. Par défaut, les analyseurs résolvent 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

Regardons un exemple de document XML qui utilise des entités externes :

xml
< ? version xml = « 1.0 » ? >
< ! Élément extérieur DOCTYPE [
< ! ENTITY ExternalEntity SYSTEM « file : ///etc/passwd » >] >
<outerElement>&Entité externe ;</outerElement>

Tout d'abord, nous déclarons un nouveau « doctype » qui définit les types de structures/éléments qui peuvent exister dans le document et être gérés par l'analyseur.

Nous y spécifions une entité de type système appelée « ExternalEntity ». Cette entité pointe vers le fichier '/etc/passwd'.

Selon la définition du « doctype », nous avons nos données XML réelles. Nous définissons un « OuterElement » puis nous ajoutons une référence (désignée par le « & ») à l'entité « ExternalEntity ».

À ce stade, l'interpréteur recherchera la définition de l'entité et résoudra l'URL définie et remplacera le « &ExternalEntity ; ».

À la fin du processus d'analyse, nous obtenons un document qui ressemble à ceci :

xml
< ? version xml = « 1.0 » ? >
<outerElement>
root : x : 0:0 : root : /root : /usr/bin/zsh
démon : x : 1:1 : démon : /usr/sbin : /usr/sbin/nologin
bin:x : 2:2 : bin : /bin : /usr/sbin/nologin
...
</outerElement>

Mesures d'atténuation

La nécessité et les spécificités de la protection complète contre le XXE dépendent fortement du langage, du framework et de la version de celui-ci.

Chaque combinaison permet souvent de désactiver certains aspects de l'analyseur qui peuvent empêcher la résolution des fichiers, mais pas les chemins HTTP. Il peut également permettre l'expansion des entités, ce qui peut à lui seul entraîner une vulnérabilité par déni de service.

.NET

Si vous utilisez .NET 4.5.1 ou une version antérieure, les classes suivantes sont vulnérables par défaut :

  • XMLDocument (Désactivez avec 'XMLDocument.xmlResolver = null ; ')
  • XMLTextReader (Désactivez avec 'XMLTextReader.ProhibitDTD = true ; ')
  • Navigateur XPath