Usuaria:Enderreich/Inyección XPath

De Wikipedia, la enciclopedia libre

Es un tipo de ataque que tiene lugar cuando un sitio web utiliza la información suministrada por el usuario para construir una consulta XPath de datos XML. Mediante el envío de datos intencionalmente mal formados en el sitio web, un atacante puede descubrir como se estructuran los datos XML o acceder a información restringida. También puede ser capaz de escalar privilegios si los datos XML son utilizados para la autenticación de usuarios como por ejemplo, un archivo de usuario basado en XML.

La consulta XML con XPath se realiza con un tipo de declaración descriptiva simple que permite la consulta XML para localizar una pieza de informción. Al igual que en SQL, se pueden especificar varios atributos a localizar, y qué patrones deben coincidir. Cuando se utiliza XML en un sitio web, se suelen aceptar datos de entrada con la consulta a realizar con el fin de localizar el contenido y poderlo mostrar en la página. Esta entrada debe ser saneada para verificar la integridad de la consulta XPath, y que no se devuelvan datos erróneos.

XPath es un lenguaje estándar y su sintaxis/notación es independiente de la aplicación, lo que significa que un ataque puede ser automatizado. No hay diferentes dialectos, ya que se lleva a cabo en las solicitudes SQL a la base de datos. Puesto que no hay control de acceso, es posible obtener el documento completo, por lo que este tipo de acceso no tiene las limitaciones típicas de la inyección SQL.

<?xml version="1.0" encoding="utf-8"?>
<Employees>
   <Employee ID="1">
      <FirstName>Arnold</FirstName>
      <LastName>Baker</LastName>
      <UserName>ABaker</UserName>
      <Password>SoSecret</Password>
      <Type>Admin</Type>
   </Employee>
   <Employee ID="2">
      <FirstName>Peter</FirstName>
      <LastName>Pan</LastName>
      <UserName>PPan</UserName>
      <Password>NotTelling</Password>
      <Type>User</Type>
   </Employee>
</Employees>

En este pequeño snippet de código utilizamos un sistema de autenticación de usuario en una página web que utiliza un fichero de este tipo para autentificar a los usuarios. Una vez el usuario introduce su nombre de usuario y contraseña, la aplicación realiza una consulta XPath para localizar al usuario.

En visualbasic

Dim FindUserXPath as String
FindUserXPath = "//Employee[UserName/text()='" & Request("Username") & "' And 
        Password/text()='" & Request("Password") & "']"

En C#

String FindUserXPath;
FindUserXPath = "//Employee[UserName/text()='" + Request("Username") + "' And 
        Password/text()='" + Request("Password") + "']";

Con un nombre de usuario y contraseña normal este XPath debería funcionar, pero un atacante malicioso podría aprovechar para enviar un nombre de usuario o contraseña erróneos y obtener un