Directrices

Configuración de seguridad incorrecta: detalles de XXE

La clase de vulnerabilidad "XML eXternal Entities" (XXE) es una configuración de seguridad incorrecta que afecta a los analizadores (parsers) de XML.

El estándar XML incluye formas de hacer referencia a "entidades", como archivos y URL. A menudo, los analizadores resuelven por defecto las entidades externas, lo que significa que los documentos XML pueden provocar la exposición de archivos y otra información confidencial a posibles atacantes.

Un ejemplo sencillo

Veamos un ejemplo de un documento XML que utiliza entidades externas:

xml
<?xml version="1.0" ?>
<!DOCTYPE outerElement [
   <!ENTITY externalEntity SYSTEM  "file:///etc/passwd" > ]>
<outerElement>&externalEntity;</outerElement>

Primero, declaramos un nuevo "doctype" que define la estructura y los tipos de elementos que pueden existir dentro del documento y ser procesados por el analizador.

Dentro de él, especificamos una entidad de tipo SYSTEM llamada "externalEntity". Esta entidad apunta al archivo "/etc/passwd".

Después de la definición del "doctype", tenemos nuestros datos XML reales. Definimos un "outerElement" y luego añadimos una referencia (denotada por el "&") a la entidad "externalEntity".

En este punto, el intérprete buscará la definición de la entidad, resolverá la URL definida y la colocará en lugar de "&externalEntity;".

Al finalizar el proceso de análisis, obtenemos un documento que se ve así:

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>

Mitigación

La necesidad y los detalles específicos sobre cómo protegerse completamente contra XXE dependen en gran medida del lenguaje, el framework y la versión utilizada.

Cada combinación suele permitir deshabilitar algunos aspectos del analizador que pueden evitar la resolución de archivos, pero no necesariamente de rutas HTTP. O bien, puede seguir permitiendo la expansión de entidades, lo que por sí solo puede derivar en una vulnerabilidad de denegación de servicio (DoS).

.NET

Si utiliza .NET 4.5.1 o versiones anteriores, las siguientes clases son vulnerables por defecto:

  • XmlDocument (deshabilitar con "xmlDocument.XmlResolver = null;")
  • XmlTextReader (deshabilitar con "xmlTextReader.ProhibitDtd = true;")
  • XPathNavigator

‍

Eslogan

Programación segura y práctica

Explore las directrices de programación segura para comprender y mitigar vulnerabilidades de software como el OWASP Top 10, y sumérjase en misiones de formación guiada para practicar en simulaciones de aplicaciones del mundo real.

Más directrices
Reservar una demostración