flawopen.com/XSS/SVG-Upload
Ist ein SVG-Upload ein XSS-Risiko?
Ein hochgeladenes SVG ist ein Dokument, nicht nur Pixel: Es kann aktive Elemente wie Skripte und Event-Handler enthalten. Ob sie ausgeführt werden, hängt vom Browserkontext ab. In <img> gelten Einschränkungen; Inline-SVG, direkte Navigation und Einbettung als Dokument können aktiv sein.
Was SVG von anderen Bildformaten unterscheidet
Im Gegensatz zu PNG oder JPEG ist SVG XML und kann aktive Inhalte enthalten. Browser deaktivieren Skripte in eingeschränkten Bildkontexten wie <img>, aber nicht beim direkten Öffnen, bei der Einbettung als Dokument über <object>, <iframe> oder <embed>, oder bei Inline-Markup. Ein hochgeladenes Profilbild kann zu Stored XSS werden, wenn die Anwendung es im aktiven Kontext unter ihrer eigenen Origin ausliefert. Das Verhalten hängt vom Kontext ab; Erweiterung und MIME-Typ bereinigen keine Inhalte.
Uploads sicher behandeln
- ✓Verwenden Sie vor Speicherung oder Anzeige einen gepflegten SVG-Sanitizer mit expliziter Allowlist. Entfernen Sie aktive Elemente, Event-Handler, externe Referenzen und
foreignObject, sofern nicht benötigt; XML nicht mit regulären Ausdrücken bereinigen. - ✓Wenn Nutzer nur ein Bild benötigen, rasterisieren Sie das SVG in einem isolierten Prozess mit Ressourcenlimits und liefern Sie das Raster aus. Bewahren Sie das Original außerhalb des Webroots auf, wenn es nicht gebraucht wird.
- ✓Liefern Sie Uploads über eine separate registrierbare Domain aus, die keine Anwendungscookies erhält. Eine benachbarte Subdomain kann weiterhin Parent-Domain-Cookies erhalten.
- ✓Wenn ein nicht vertrauenswürdiges SVG als Dokument verbleibt, erzwingen Sie den Download mit Content-Disposition: attachment und
X-Content-Type-Options: nosniffoder verwenden Sie nur einen eingeschränkten Bildkontext wie <img>. Vermeiden Sie Inline, <object>, <iframe> und die Auslieferung als Dokument unter derselben Origin.
Häufige Fragen
['Reicht es, Dateiendung oder MIME-Typ zu prüfen?', 'Nein. Endung und angegebener MIME-Typ sind Metadaten, keine Prüfung aktiver Dokumentinhalte. Prüfen Sie das tatsächliche Format und nutzen Sie anschließend eine SVG-spezifische Allowlist-Bereinigung oder konvertieren Sie in Raster, wenn SVG-Funktionen unnötig sind.']
Quellen
- OWASP XML Security Cheat Sheet
- flawopen.com — Cross-Site Scripting
- OWASP — File Upload Cheat Sheet
- OWASP ASVS — sanitizing or sandboxing SVG scriptable content