lunes, 7 de enero de 2019

¿Qué es un XXE? Introducción.

Buen día a quienes pasan por este Blog, me da gusto estar de vuelta tras otra pequeña ausencia y no hay mejor manera de regresar que explicando lo que es un "XXE" o "Xml External Entities" y un  sencillo método que nos ayudará a identificar esta vulnerabilidad.

¿Qué es un "XXE"?
Es un tipo de ataque contra aplicaciones que interpretan entradas "XML". Este ataque ocurre cuando una entreda "XML" contiene referencias a una entidad externa ("External Entities") y está es procesada por un interprete configurado de manera insegura.

Por la definición anterior se debe deducir que la vulnerabilidad se encuentra en el interprete o "parser", responsable de procesar el documento "XML".

¿Cómo identifico esta vulnerabilidad?
Ya sea que dentro del flujo de la aplicación se genere una estructura "XML" con los datos ingresados en algún formulario o mediante la carga ("upload") de un archivo "XML" en algún módulo de la aplicación, utilizando un "proxy" podrás observar dentro del cuerpo de la petición el documento "XML" que será procesado por el servidor aplicativo, en muchas ocasiones los programadores codifican en "base64" el documento.

Identificado el documento "XML" es necesario modificar el contenido de éste, así iniciaremos con la validación que nos ayude a determinar si la aplicación es vulnerable a un ataque del tipo "XXE".

Imaginando que nuestro "proxy" intercepta la siguiente petición y respuesta HTTP, observamos que el valor dentro de la etiqueta "foo" se ve reflejado en la respuesta de la siguiente manera:

Petición.

Respuesta.


Nuestra primer prueba a realizar será la siguiente, editaremos nuestra petición y observaremos que el interprete ha procesado el documento con la entidad externa, el resultado se mostrará en la respuesta de la petición.

petición.
 
Respuesta.

De esta manera comprobamos que el interprete utilizado para procesar documentos "XML" no se encuentra configurado de manera correcta y es posible explotar la vulnerabilidad.

En próximas publicaciones retomaremos la explotación de un "XXE" a un nivel más avanzado, ya que no en todos los casos el procesamiento de la entidad externa dentro del documento "XML" se verá reflejado en la respuesta de la aplicación, por lo que tendremos que hacer uso de la técnica "Out of Band".


Referencias:

Saludos.
Autor: 1nf4mousmx. 

¿Cómo identificar un SQL Injection? ¿Es vulnerable el parámetro?

¡Hola a todos! nuevamente tras mucho tiempo desaparecido dadas algunas aventuras en el lado obscuro de la seguridad informática (así es... e...