web-dev-qa-db-ja.com

SVGファイルと10億笑い攻撃

SVGファイルは billion laughs 攻撃を受けやすいです。私たちのウェブサイトでは、ユーザーがマークダウンファイルをアップロード/送信できます。レンダリングする前に、marked.jsを通じて.mdファイルを実行します。これで、マークダウン内の画像は次のようにレンダリングされます。

<img src="https://evilsite.com/badsvg.svg"/>

ウェブページで。ブラウザは<script>badsvg.svg実行されません。

evilsite.comは提供できますbadsvg.svg 10億の笑いのペイロードが含まれています。これは、さまざまなブラウザーでの処理方法です。

Edge/IE-エンティティの拡張に制限があるため、影響を受けません(コンソールのログで確認できます)

Firefox-エンティティの拡張にも制限があるようです

Chrome-制限なし、すべてのエンティティを拡張しようとし、最終的にメモリ不足になり、タブを閉じる/閉じる以外に選択肢はありません

Chromeのこの関連バグは「修正されない」とマークされました https://bugs.chromium.org/p/chromium/issues/detail?id=617891

これはクライアント側のDOSであり、サイトは基本的にChromeのすべてのユーザーが使用できなくなります。このタイプの攻撃を防ぐにはどうすればよいとお考えですか?ユーザーが外部ドメインのリソースを参照できないようにすることは、極端な措置のようです。

9
Techtwaddle

回避策として、サーバーにSVGプロキシのようなものを実装し、DoSをトリガーしてすべてのSVGファイルをプロキシ経由でリンクするSVGファイルを拒否することができます。 /svgproxy?f=https://evilsite.com/badsvg.svg。ただし、chromeユーザーのみを対象にチェックを行うことで制限できる場合でも、パフォーマンスの低下が発生します。

悪いSVGを検出するのにあまりコストがかからない方法は、メモリ制限のあるプロセスでSVGをレンダリングすることです。レンダリングが失敗した場合、そのSVGは不良です。 ImageMagickを試すこともできますが、少なくとも時々、それ自体で不良SVGを拒否します。

1
40F4