OWASP Top Ten 2017 (es)

A4:2017-Entiedades externas XML (XXE)

Languages: en de [es]
Agente de amenaza / Vector de ataque Debilidades de seguridad Impacto
Específico
de la Apl.
Explotabilidad: 2 Prevalencia: 2 Detectabilidad: 3 Técnico: 3 ¿Negocio?
Los atacantes pueden explotar procesadores XML vulnerables si pueden cargar o incluir contenido hostil en un documento XML, explotando código vulnerable, dependencias o integraciones.
De forma predeterminada, muchos procesadores XML antiguos permiten especificar una entidad externa, una URI que se referencia y evalúa durante el procesamiento XML. Las herramientas SAST pueden descubrir estos problemas inspeccionando las dependencias y la configuración. Las herramientas DAST requieren pasos manuales adicionales para detectar y explotar estos problemas. Los testers necesitan ser entrenados para hacer estas pruebas, ya que no eran realizadas antes de 2017
Estos defectos se pueden utilizar para extraer datos, ejecutar una solicitud remota desde el servidor, escanear sistemas internos, realizar un ataque de denegación de servicio y ejecutar otro tipo de ataques. El impacto al negocio depende de las necesidades de la aplicación y de los datos.
¿La aplicación es vulnerable?
Las aplicaciones y, en particular los servicios web basados en XML, o integraciones que utilicen XML, pueden ser vulnerables a este ataque si:
* La aplicación acepta XML directamente, carga XML desde fuentes no confiables o inserta datos no confiables en documentos XML. Por último, estos datos son analizados sintácticamente por un procesador XML.
* Cualquiera de los procesadores XML utilizados en la aplicación o los servicios web basados en SOAP, poseen habilitadas las definiciones de tipo de documento (DTDs). Dado que los mecanismos exactos para deshabilitar el procesamiento de DTDs varía para cada procesador, se recomienda consultar la hoja de trucos para prevención de XXE de OWASP.
* La aplicación utiliza SAML para el procesamiento de identidades dentro de la seguridad federada o para propósitos de Single Sign-On (SSO). SAML utiliza XML para garantizar la identidad de los usuarios y puede ser vulnerable.
* La aplicación utiliza SOAP en una versión previa a la 1.2 y, si las entidades XML son pasadas a la infraestructura SOAP, probablemente sea susceptible a ataques XXE.
* Ser vulnerable a ataques XXE significa que probablemente la aplicación también es vulnerable a ataques de denegación de servicio, incluyendo el ataque Billion Laughs.
Cómo se previene
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, según se indica en la hoja de trucos para prevención de XXE de OWASP.
* Implemente validación de entrada positiva en el servidor (“lista blanca”), filtrado y saneado 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.
* Las herramientas SAST pueden ayudar a detectar XXE en el código fuente, aunque la revisión manual de código es la mejor alternativa en aplicaciones grandes y complejas.
Si estos controles no son posibles, considere usar parcheo virtual, gateways de seguridad de API, o Cortafuegos de Aplicaciones Web (WAFs) para detectar, monitorear y bloquear ataques XXE.
Ejemplos de escenarios de ataque
Han sido publicados numerosos XXE, incluyendo ataques a dispositivos embebidos. Los XXE ocurren en una gran cantidad de lugares inesperados, incluyendo dependencias profundamente anidadas. La manera más fácil es cargar un archivo XML malicioso, si es aceptado:
Escenario #1: el atacante intenta extraer datos del servidor:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
Escenario #2: cambiando la línea ENTITY anterior, un atacante escanea la red privada del servidor:
<!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]>
Escenario #3: incluyendo un archivo potencialmente infinito, un atacante intenta un ataque de denegación de servicio:
<!ENTITY xxe SYSTEM "file:///dev/random" >]>
Referencias