it-swarm-eu.dev

Exploits oder andere Sicherheitsrisiken beim SVG-Upload?

Ich habe eine Website, auf der Leute Grafiken hochladen können. Sie können sich das wie einen Bildhoster oder ein Forum für Bilder vorstellen.

Jetzt erlaube ich das Hochladen von Rastergrafiken auf eine bestimmte Größe, aber noch keine Vektorgrafiken. Ich möchte auch das Hochladen von SVG zulassen, aber es gibt zwei Bedenken, die meinen Kopf umkreisen:

  1. Könnte eine SVG so aufgebaut sein, dass der Server beim Lesen von Metadaten nicht mehr reagiert? und könnte als DoS-Angriff auf den Server verwendet werden?
  2. Könnte eine SVG so erstellt werden, dass der Client beim Rendern der SVG auf dem Client nicht mehr reagiert und möglicherweise den Browser jedes Benutzers auf meiner Website zum Absturz bringt?

Wäre es auch eine gute Praxis, ein kleines PNG (200 x 200 Pixel) für ein Miniaturbild zu generieren, oder ist es besser, das SVG selbst nur mit einem Zoomfaktor oder etwas anderem zu manipulieren?

Wie kann ich mich vor solchen SVG-Exploits schützen?

27
polemon

Könnte eine SVG so aufgebaut sein, dass der Server beim Lesen von Metadaten nicht mehr reagiert? und könnte als DoS-Angriff auf den Server verwendet werden?

Was meinst du mit Metadaten? Wenn Sie nach Breite und Höhe suchen, müssten Sie die SVG-Dateien zumindest teilweise analysieren, um sie zu erhalten. Es gibt keine Abkürzung zum Lesen einiger Bytes aus dem Header wie bei vielen Bitmap-Formaten. Dies birgt die üblichen Risiken des XML-Parsings wie:

  • angriffe auf die Einbeziehung externer Entitäten/DTD-Teilmengen gegen entfernte Dateien, lokale netzwerksensible Ressourcen, lokale maschinensensitive Dateien und Gerätedateien
  • expansionsbomben für verschachtelte Einheiten
  • pathologisch verschachtelte Tag-Strukturen können die Grenzen der Rekursionsressourcen erreichen

standardmäßig würden Sie die gesamte DTD-Verarbeitung, XInclude, XSL, XSI und Entitätsauflösung deaktivieren.

Könnte eine SVG so erstellt werden, dass der Client beim Rendern der SVG auf dem Client nicht mehr reagiert und möglicherweise den Browser jedes Benutzers auf meiner Website zum Absturz bringt?

Möglicherweise, aber es ist genauso gut möglich, dass dies mit einem Bitmap-Format passieren kann. Siehe z. B. die Sicherheitslücken in beschädigten PNG-Dateien vor einiger Zeit.

SVG-Dateien sind eher besorgniserregend, da sie JavaScript enthalten können, das im Sicherheitskontext der Hosting-Site ausgeführt wird. Sie müssen sich also um Cross-Site-Scripting kümmern.

Tatsächlich sind alle Arten von hochgeladenen Dateien dafür anfällig, wenn auch nicht so direkt und einfach auszunutzen. In einigen Fällen werden sie von Browsern (insbesondere IE) inhaltsschnüffeln, und wenn sie Dinge sehen, die wie Tags aussehen, können sie sie möglicherweise als HTML, einschließlich JavaScript, neu interpretieren. Es gibt auch einige Nebenprobleme bei der Behandlung hochgeladener Dateien als Java Applets und Flash-Richtliniendateien.

Die Standardminderung für all diese Probleme besteht darin, Ihre nicht vertrauenswürdigen Ressourcen, ob Bitmap, SVG oder irgendetwas anderes, von einer anderen Domain als Ihrer Hauptwebsite bereitzustellen: einer Domain, die keine vertraulichen Sitzungsinformationen (Cookies/Auth) enthält und keine Funktionen enthält um in die Domain Ihrer Hauptwebsite zu schreiben.

Wäre es auch eine gute Praxis, ein kleines PNG (200 x 200 Pixel) für ein Miniaturbild zu generieren, oder ist es besser, das SVG selbst nur mit einem Zoomfaktor oder etwas anderem zu manipulieren?

Das wäre eine nette Geste, aber Sie müssten einige Abhängigkeiten hineinziehen, um sie in Bitmap zu rendern, zum Beispiel Batik, wenn Sie Java verwenden. Das Einbringen einer neuen komplexen Bibliothek erhöht natürlich die Angriffsfläche. Es ist möglicherweise eine gute Idee, den Thumbnailer als separate Daemon-Task mit niedriger Priorität und niedrigem Prioritätskonto auszuführen.

19
bobince

Jede Aktion, die Ihre Webanwendung ausführt, ist möglicherweise gefährlich. Das Hochladen von Dateien ist eine der gefährlicheren Funktionen, da es zur Ausführung von Remotecode führen kann.

Das Problem beim Hochladen einer Datei auf den Server besteht darin, dass es sich möglicherweise nicht um die gewünschte Datei handelt. Ich weiß nicht, welche Plattform oder Methode Sie verwenden, aber ich habe viele Male Systeme zum Hochladen von Dateien getäuscht, um eine PHP- oder ASP-Datei hochzuladen und auszuführen. Es hört sich nicht so an, als würden Sie die SVG-Datei auf der Serverseite rendern (das wäre sowieso etwas seltsam), daher spielt das rohe XML in der SVG-Datei für Ihren Server keine Rolle.

In Bezug auf # 2 ja Schwachstellen in Bezug auf SVG-Speicherbeschädigung sind häufig und ich bin zuversichtlich, dass weitere existieren. Aber auch dies gilt für nahezu jede Datei, die Sie hochladen. SVG-Bilder sind etwas neuer und der Großteil der Schwachstellen in SVG-Bildern wurde 2011 gefunden.

SVG-Maskierung wird verwendet, um Iframes bei einem Clickjacking-Angriff zu verdecken . Aber ich glaube nicht, dass dieser Angriffsvektor für Ihr SVG-Upload-System gilt.

10
rook