SVGにはJavascriptを埋め込むことができるため、<object>
タグを使ってSVGを表示した場合にスクリプトが実行できてしまいXSS攻撃が成立するというのは有名な話だと思います。
ただ、<img>
タグを使用した場合においても、依然としてユーザーがアップロードしたSVGファイルを直接表示することは危険です。
以下のSVGファイルを見てください。
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>
これはChromiumのバグ報告にて上げられていたSVGファイルの中身です。このSVGファイルを読み込むと、ブラウザ関係なく即座にタブがクラッシュします。いわゆるブラウザクラッシャーです。
一行目に思いっきりXMLと書かれていますが、SVGは内部的にXMLフォーマットのため、拡張子をsvgにすると読み込まれます。残念ながらXMLには数多くの脆弱性や問題があり、SVGもそれらの問題を引き継いでいます。
この例では、特にXMLのBillion Laughs攻撃を利用しています。Billion Laughs攻撃について簡単に説明すると、XMLでは他のエンティティをロードすることができるため、エンティティを再帰的にロードすることでメモリ空間を食いつぶし、ブラウザをクラッシュする攻撃手法となります。
この問題を解決するためには、SVGファイルをサーバー上でタイムアウト付きで読み込んだ後にpng画像へ変換したりする方法が考えられますが、過去にはsvgパーサでディレクトリトラバーサルができる脆弱性が合ったりしたため、個人的にはSVG画像は一切受け付けないようにすることがおすすめです。