Llegamos al número cuatro del TOP 10 de vulnerabilidades web de OWASP, XML External Entities (XXE), no tan conocida como XSS o SQLi, quizás por la complejidad de su explotación o la falta de difusión, pero está en el TOP y vamos a tratar de explicarla y entenderla.
Primero vamos a entender la «anatomía» básica de un documento XML. Este tipo de documentos son utilizados para describir la estructura de los documentos, en este caso, de las páginas web. Por ejemplo, el siguiente documento XML podría describir una publicación de un blog:
<?xml version="1.0"?>
<post>
<title> Ejemplo de documento XML </title>
<author> Rafael Murillo - @cehrmurillo </author>
<contenido>
Este es nuestro archivo XML de ejemplo.
</contenido>
</post>
Un ataque XXE funciona aprovechando una característica poco conocida de XML: External Entities. El concepto es el mismo que en el procesamiento interno de entidades, pero el vector de ataque consiste en poder utilizar recursos externos como texto de reemplazo. Vamos a ver el siguiente documento a manera de ejemplo:
<?xml version="1.0"?> <!DOCTYPE passwd [ <!ELEMENT passwd ANY> <!ENTITY passwd SYSTEM "file:///etc/passwd"> ]> <passwd> &passwd; </passwd>
En el sistema Linux, el contenido del fichero /etc/passwd determina quién puede acceder al sistema de manera legítima. Si una aplicación web acepta documentos XML creados por el usuario, un atacante puede usar la XML entities expansion para cargar archivos o recursos referenciables por URI.
Además, al cargar una secuencia de datos infinitos, como por ejemplo /dev/urandom, un atacante puede consumir todos los recursos de un sistema, denegando el acceso a otros usuarios.
1.- Un atacante captura la petición que hace por el método POST hacia el sitio http://example.com/xml y la modifica como se muestra en el ejemplo anterior.