Directives

Erreur de configuration de sécurité - XXE détaillé

La classe de vulnérabilité « XML eXternal Entities » (XXE) est une mauvaise configuration de sécurité impliquant les analyseurs XML.

La norme XML inclut des moyens de référencer des « entités », telles que des fichiers et des URL. Il est fréquent que les analyseurs résolvent par défaut 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 exemple de document XML utilisant 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 la structure et les types d'éléments pouvant exister au sein du document et être traités par l'analyseur.

À l'intérieur, nous 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 réelles. Nous définissons un « outerElement », puis nous ajoutons une référence (indiquée par le « & ») à l'entité « externalEntity ».

À ce stade, l'interpréteur recherchera la définition de l'entité, résoudra l'URL définie et la placera à 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 de la protection complète contre les XXE dépendent fortement du langage, du framework et de leur version.

Chaque combinaison permet souvent de désactiver certains aspects de l'analyseur, ce qui peut empêcher la résolution de fichiers, mais pas celle des chemins HTTP. Ou bien, elle peut encore autoriser l'expansion des entités, ce qui peut en soi mener à une vulnérabilité de 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ésactiver avec « xmlDocument.XmlResolver = null; »)
  • XmlTextReader (désactiver avec « xmlTextReader.ProhibitDtd = true; »)
  • XPathNavigator

‍

Slogan

Le codage sécurisé en pratique

Explorez nos directives de développement sécurisé pour comprendre et atténuer les vulnérabilités logicielles telles que l'OWASP Top 10, et plongez dans des missions de formation guidées pour vous exercer sur des simulations d'applications réelles.

Autres directives
Réserver une démo