Como hackear un servidor web con una inyeccion XML

Hello Engineers!
En el dia de hoy, vamos a aprender acerca de una debilidad muy usual en las aplicaciones web.
A4-XML External Entities
Muchos procesadores XML antiguos o mal configurados evalúan referencias de entidades externas dentro de documentos XML.
Por medio de una inyeccion XML, se pueden usar entidades externas para divulgar archivos internos mediante el controlador de URI de archivos, recursos compartidos de archivos internos, escaneo de puertos internos, ejecución remota de código y ataques de denegación de servicio.

Conceptos Basicos

El lenguaje de marcado extensible (XML) se utiliza para describir datos . El estándar XML es una forma flexible de crear formatos de información y compartir electrónicamente datos estructurados a través de la Internet pública , así como a través de redes corporativas.

Explotando las vulnerabilidades mas criticas en aplicaciones WEB.

A4: XML External Entities

Escenario de la prueba:
En la URL http://172.17.0.2:9090/app/bulkproducts nos encontramos con un uploader que sirve para subir archivos XML e interpretarlos y finalmente visualizar una tabla con los datos cargados.

Realizando pruebas sobre el uploader de XML.

Luego de validar el comportamiento del aplicativo web, vamos a realizar una prueba simple para verificar si este uploader es vulnerable a inyecciones de XXE (XML External Entity).
Para ello debemos utilizar el siguiente codigo de XML el cual solo realizara una consulta sobre el famoso archivo de /etc/passwd.

  
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY bar SYSTEM "file:///etc/passwd" >]>
<products>
   <product>
      <name>Playstation 4</name>
      <code>274</code>
      <tags>gaming console</tags>
      <description>&bar;</description>
   </product>
</products>

El resultado es el siguiente:

Visualizando el contenido de /etc/passwd por medio de una inyeccion XXE.

En la imagen anterior, podemos apreciar la visualizacion completa del archivo /etc/passwd el cual almacena las contraseñas de los usuarios del sistema en linux.

Recomendaciones

El entrenamiento del desarrollador es esencial para identificar y mitigar defectos de XXE. Aparte de esto, prevenir XXE requiere:

  • De ser posible, utilice formatos de datos menos complejos como JSON y evite la serialización de datos confidenciales.
  • Actualice los procesadores y bibliotecas XML que utilice la aplicación o el sistema subyacente. Utilice validadores de dependencias. Actualice SOAP a la versión 1.2 o superior.
  • Deshabilite las entidades externas de XML y procesamiento DTD en todos los analizadores sintácticos XML en su aplicación.
  • Implemente validación de entrada positiva en el servidor (“lista blanca”), filtrado y sanitización para prevenir el ingreso de datos dañinos dentro de documentos, cabeceras y nodos XML.
  • Verifique que la funcionalidad de carga de archivos XML o XSL valide el XML entrante, usando validación XSD o similar.

Aprende hacking explotando las vulnerabilidades mas criticas en aplicaciones WEB.

Para mas informacion leer el siguiente PDF publicado por el OWASP

About the author:

Profile Image

Gerardo Eliasib

Ethical Hacker - Developer

Cyber Security Analyst and also creator of the content published in this blog.