miércoles, abril 07, 2010

Blind XPath Injection: Una introdución

Desde el surgimiento de XML (eXtended Markup Language) como lenguaje de intercambio de datos entre aplicaciones, la aparición de aplicaciones web que utilizan bases de datos en formato XML como repositorio de información ha crecido masivamente.

Este tipo de aplicaciones utilizan un almacén basado en un fichero de texto que codifica la información utilizando las reglas definidas para los documentos XML bien formados. Así, la aplicación web construye una DTD (Document Type Definition) o bien un XML Schema, para definir como se organizan los datos. Una vez construido el almacén de datos, la aplicación web consulta la información contenida haciendo uso de un lenguaje de consulta llamado XPath.

El lenguaje XPath permite al programador moverse dentro de un árbol XML para consultar datos. La primera versión de este lenguaje fue publicada como una recomendación el 16 de Noviembre de 1999 por el W3C [XPath 1.0]. La versión actual del lenguaje es la versión 2.0, que fue publicada el 23 de Enero de 2007 [XPath 2.0], aunque su implementación es bastante limitada en los principales lenguajes de programación.

Sin embargo, ya con el nacimiento del lenguaje XPath, se comprobó que era posible realizar inyecciones de comandos Xpath con valores de usuario igual que en las técnicas SQL Injection. Así, en Octubre de 2002, los doctores Gonzalo Alvarez Marañón y Slobodan Petrovic, describían la posibilidad de los ataques XPath Injection siendo la primera referencia al término [A taxonomy for web attacks].

En el año 2004, Amit Kleim, investigador de seguridad, publicaba en Internet un whitepaper titulado Blind XPath Injection, en el que explicaba en detenimiento las técnicas Blind XPath Injection para extraer datos de documentos XML con ataques ciegos para la versión de XPath 1.0 [Blind XPath Injection]. Un año después, en el año 2005, Amit Klein publicó una revisión del documento añadiendo explicaciones más detalladas sobre las posibilidades de extracción y alguna referencia a lo que podría ser su aplicación en XPath 2.0 [Blind XPath Injection (rev)].

En los ejemplos publicados se demostraba como, a partir de una vulnerabilidad de Blind XPath Injection, era posible extraer el árbol completo XML de la base de datos almacenado en el fichero. Desde entonces, se han utilizado las técnicas XPath Injection para vulnerar la seguridad de las tecnologías que hacen uso del lenguaje XPath y las bases de datos XML, como por ejemplo Webservices o tecnología AJAX.

Debido al interés especial que despiertan estas técnicas en mí, decidí llevar un Proyecto en el Master Official de Seguridad de la UEM, de la que salió el Blind XPath Injector de David.

En los retos Hacking que hemos realizado en El Lado de El mal, las técnicas de XPath Injection se han visto inmersas en varias partes, como en el Reto Hacking 3, el Reto Hacking 5 y el último Reto Hacking X. Esto llevó a que en el Asegúr@IT VI Pedro Laguna impartiera una charla dedicada integramente a XPath Injection, de la que se puede aprender todo lo necesario para superar las partes de XPath dedicadas en los retos anteriores.

Si te gusta la seguridad web, aquí tienes una buena lista de referencias para poder empezar con XPath Injection y Blind XPath Injection.

Saludos Malignos!



5 comentarios:

  1. Muy buen articulo!!
    Muchas gracias por la informacion!!

    ResponderEliminar
  2. elPerroVerde7/4/10 7:53 p. m.

    [offtopic]
    El certificado desconocido de Mozilla
    http://groups.google.com/group/mozilla.dev.security.policy/browse_thread/thread/b6493a285ba79998/26fca75f9aeff1dc?pli=1

    [/offtopic]

    Y mira que me gusta firefox con sus plugins, sus extensiones, sus fallos de seguridad,... en fin...

    ResponderEliminar
  3. @elperroverde, me informé de la historia y al final estaba todo en regla. Los certificados estaban bien y tenían dueño. El de RSA... era de RSA, pero no estaban al día con ello y me pareció que la gente de Mozilla no lo hizo mal. Falló que no tuvieran eso más documentado y me parece peor que no tengan metidos los certificados de la FNMT o CatCert, que son entidades de certificación reconocidas y aprobadas en España, pero... no era para hacer "más sangre" ;)

    ResponderEliminar
  4. Que wapo el post, me ha encantao :-)

    Un saludo.
    Manolo.

    ResponderEliminar
  5. Buenas Chema,

    Como siempre... espectacular y muy interesante!

    Por cierto... la web de informatica64 parece caida... Los "buenos" no estarán jugando, no?

    ResponderEliminar