Un ataque de entidad externa XML es un tipo de ataque contra una aplicación que analiza la entrada XML . Este ataque ocurre cuando la entrada XML que contiene una referencia a una entidad externa es procesada por un analizador XML configurado débilmente. Este ataque puede conducir a la divulgación de datos confidenciales, denegación de servicio, falsificación de solicitudes del lado del servidor, escaneo de puertos desde la perspectiva de la máquina donde se encuentra el analizador y otros impactos del sistema. [1]
Descripción
El estándar XML 1.0 define la estructura de un documento XML. El estándar define un concepto llamado entidad, que es una unidad de almacenamiento de algún tipo. Hay algunos tipos diferentes de entidades, entidad externa analizada por parámetros / general a menudo abreviada como entidad externa, que puede acceder a contenido local o remoto a través de un identificador de sistema declarado . Se supone que el identificador del sistema es un URI al que el procesador XML puede desreferenciar (acceder) al procesar la entidad. El procesador XML luego reemplaza las ocurrencias de la entidad externa nombrada con el contenido desreferenciado por el identificador del sistema. Si el identificador del sistema contiene datos contaminados y el procesador XML elimina la referencia a estos datos contaminados, el procesador XML puede revelar información confidencial que normalmente no es accesible para la aplicación. Vectores de ataque similares aplican el uso de DTD externas , hojas de estilo externas , esquemas externos , etc. que, cuando se incluyen, permiten ataques de estilo de inclusión de recursos externos similares.
Los ataques pueden incluir la divulgación de archivos locales, que pueden contener datos confidenciales como contraseñas o datos privados del usuario, utilizando esquemas de archivos o rutas relativas en el identificador del sistema. Dado que el ataque ocurre en relación con la aplicación que procesa el documento XML, un atacante puede usar esta aplicación confiable para pivotar a otros sistemas internos, posiblemente revelando otro contenido interno a través de solicitudes http (s) o lanzando un ataque CSRF a cualquier servicio interno desprotegido. En algunas situaciones, una biblioteca de procesador XML que es vulnerable a problemas de corrupción de la memoria del lado del cliente puede explotarse eliminando la referencia a un URI malicioso , lo que posiblemente permita la ejecución de código arbitrario en la cuenta de la aplicación. Otros ataques pueden acceder a recursos locales que pueden no dejar de devolver datos, lo que posiblemente afecte la disponibilidad de la aplicación si no se liberan demasiados subprocesos o procesos.
Tenga en cuenta que la aplicación no necesita devolver explícitamente la respuesta al atacante para que sea vulnerable a la divulgación de información. Un atacante puede aprovechar la información de DNS para filtrar datos a través de nombres de subdominio a un servidor DNS bajo su control.
Factores de riesgo
- La aplicación analiza documentos XML.
- Se permiten datos contaminados dentro de la parte del identificador del sistema de la entidad, dentro de la definición de tipo de documento (DTD).
- El procesador XML está configurado para validar y procesar la DTD.
- El procesador XML está configurado para resolver entidades externas dentro de la DTD.
Ejemplos de
Los siguientes ejemplos son de Testing for XML Injection (OWASP-DV-008) . [2]
Accediendo a un recurso local que puede no regresar
xml version = "1.0" encoding = "ISO-8859-1"?> ]> & xxe;
Ejecución remota de código
Cuando se carga el módulo PHP "esperan", la ejecución remota de código puede ser posible con una carga útil modificada.
xml version = "1.0" encoding = "ISO-8859-1"?> wait : // id"> ]> & xxe; mypass
Revelar / etc / passwd u otros archivos específicos
xml version = "1.0" encoding = "ISO-8859-1"?> ]> & xxe; xml version = "1.0" encoding = "ISO-8859-1"?> ]> & xxe; xml version = "1.0" encoding = "ISO-8859-1"?> ] > & xxe; xml version = "1.0" encoding = "ISO-8859-1"?> ]> & xxe;
Mitigación
Dado que todo el documento XML se comunica desde un cliente que no es de confianza, normalmente no es posible validar selectivamente o escapar de los datos contaminados dentro del identificador del sistema en la DTD. Por lo tanto, el procesador XML debe configurarse para utilizar una DTD estática local y no permitir ninguna DTD declarada incluida en el documento XML.
Ver también
Referencias
enlaces externos
- Hoja de trucos para la prevención de entidades externas XML de OWASP (XXE)
- Documento de 2014 de Timothy Morgan: Esquema XML, DTD y ataques de entidad: un compendio de técnicas conocidas
- Presentación precursora del documento anterior - en OWASP AppSec USA 2013
- CWE-611: Exposición de información a través de referencia de entidad externa XML
- CWE-827: Control inadecuado de la definición del tipo de documento
- Presentación de Sascha Herzog sobre ataques de entidades externas XML - en OWASP AppSec Alemania 2010
- Vulnerabilidad de PostgreSQL XXE
- Vulnerabilidades de SharePoint y DotNetNuke XXE, en francés
- Ataques y defensas de denegación de servicio XML (en .NET)
- Artículo de BugTraq temprano (2002) sobre XXE
- XML 1.0 Lenguaje de marcado extensible (XML) 1.0 (Quinta edición)