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
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.