web-dev-qa-db-ja.com

SVGアップロードによるエクスプロイトまたはその他のセキュリティリスク?

私は人々がグラフィックをアップロードできるサイトを持っています。あなたはそれを画像ホスティング業者や写真のフォーラムのように考えるかもしれません。

現在、ラスターグラフィックを特定のサイズにアップロードできますが、現時点ではベクターグラフィックはアップロードできません。 SVGのアップロードも許可したいのですが、頭を巡る2つの懸念があります。

  1. SVGは、メタデータを読み取るときにサーバーが応答しなくなるような方法で構築される可能性があります。サーバーへのDoS攻撃として使用される可能性がありますか?
  2. SVGがクライアントでSVGをレンダリングするときにクライアントが応答しなくなり、サイト上のすべてのユーザーのブラウザーがクラッシュする可能性があるような方法でSVGを構築できますか?

また、サムネイル用に小さな(200x200px)PNGを生成することは良い習慣でしょうか、それともズーム係数などでSVG自体を操作する方が良いでしょうか?

これらのSVGエクスプロイトが可能である場合、どのようにしてそれらから自分を守ることができますか?

27
polemon

SVGは、メタデータを読み取るときにサーバーが応答しなくなるような方法で構築される可能性があります。サーバーのDoS攻撃として使用される可能性がありますか?

メタデータとはどういう意味ですか?幅と高さが必要な場合は、少なくとも部分的にSVGファイルを解析して取得する必要があります。多くのビットマップ形式のように、ヘッダーから数バイトを読み取るショートカットはありません。これには、次のようなXML解析の通常のリスクがあります。

  • リモートファイル、ローカルネットワークの機密リソース、ローカルマシンの機密ファイル、デバイスファイルに対する外部エンティティ/ DTDサブセット包含攻撃
  • ネストされたエンティティ拡張爆弾
  • 病理学的にネストされたタグ構造は、再帰リソースの制限に達する可能性があります

標準的な予防策として、すべてのDTD処理、XInclude、XSL、XSIおよびエンティティ解決を無効にします。

SVGをクライアントでSVGをレンダリングするときにクライアントが応答しなくなり、サイト上のすべてのユーザーのブラウザーがクラッシュする可能性があるような方法でSVGを構築できますか?

おそらく、しかしそれはビットマップ形式で起こり得ることは可能な限り同じです。たとえば、過去の破損したPNGファイルの脆弱性を参照してください。

SVGファイルの懸念の多くは、ホスティングサイトのセキュリティコンテキストで動作するJavaScriptを含めることができるため、クロスサイトスクリプティングを心配する必要があることです。

実際には、アップロードされたすべてのタイプのファイルがこれに対して脆弱ですが、直接的で悪用しやすい方法ではありません。場合によっては、ブラウザ(特にIE)がコンテンツのスニッフィングを行い、タグのように見えるものを見つけた場合、JavaScriptを含むHTMLとして再解釈する可能性があります。また、アップロードされたファイルをJavaアプレットおよびFlashポリシーファイルとして処理することで、いくつかの問題があります。

これらすべての問題の標準的な緩和策は、ビットマップ、SVGなど、信頼できないリソースを別のドメインからメインサイトに提供することです。このドメインには、機密セッション(cookie/auth)情報がなく、機能がありません。メインサイトのドメインにスクリプトを実行します。

また、サムネイル用に小さな(200x200px)PNGを生成することは良い習慣でしょうか、それともズーム係数などでSVG自体を操作する方が良いでしょうか?

それはいい感じですが、Javaを使用している場合はBatikなど、ビットマップにレンダリングするためにいくつかの依存関係をドラッグする必要があります。当然のことながら、新しい複雑なライブラリを導入すると、攻撃対象が増えます。サムネラを別の低特権アカウント低優先度デーモンタスクとして実行することをお勧めします。

19
bobince

Webアプリケーションが実行するアクションは潜在的に危険です。ファイルのアップロードは、リモートでコードが実行される可能性があるため、最も危険な機能の1つです。

サーバーにファイルをアップロードする際の問題は、実際には必要なファイルではない可能性があることです。使用しているプラ​​ットフォームや方法がわかりませんが、.phpまたは.aspファイルをアップロードして実行するために、ファイルアップロードシステムを何度も騙してきました。サーバー側でSVGをレンダリングしているように聞こえない(とにかく奇妙なことです)ので、SVG内の生のXMLはサーバーにとって重要ではありません。

#2に関しては、はい svgのメモリ破損の脆弱性が一般的です であり、さらに存在すると確信しています。しかし、これは、アップロードするほぼすべてのファイルに当てはまります。 SVG画像は少し新しく、2011年に見つかったSVG画像の脆弱性の大部分です。

SVGマスキングは、クリックジャッキング攻撃でiframeを隠すために使用されます 。しかし、私はこの攻撃方法がsvgアップロードシステムに当てはまるとは思いません。

10
rook