SVGのサニタイズの課題

SVG(スケーラブルベクターグラフィックス)のセキュリティ問題とサニタイズの困難さについての記事です。ユーザー生成コンテンツを扱うWebアプリケーションでは、SVGファイルは複数の深刻なセキュリティリスクをもたらします。

SVG(スケーラブルベクターグラフィックス)のセキュリティ問題とサニタイズの困難さについての記事です。ユーザー生成コンテンツを扱うWebアプリケーションでは、SVGファイルは複数の深刻なセキュリティリスクをもたらします。

主な課題は、HTTPリーク(SVGに埋め込まれたリソースがHTTPリクエストを発生させてユーザー情報を漏洩させる可能性)とXSS脆弱性(JavaScriptを含むSVGタグを通じた攻撃)です。単純な正規表現によるフィルタリングでは不十分であり、多くの危険なベクトルが存在します。

この問題の信頼できる解決策はコンテンツセキュリティポリシー(CSP)とされており、HTTP応答ヘッダとHTMLメタタグの両方で設定可能です。技術的には、SVGは「パスと塗りつぶしの集合」と「スクリプト実行などの危険な機能」という2つのタイプに分類でき、大多数の実際のSVGファイルは前者ですが、完全なサニタイズには両方の脅威対策が必要です。

このテーマの重要性は、教育プラットフォームであるScratchを含むUGCサービスでの重大な脆弱性発見によって強調されており、不適切なセキュリティ実装の危険性を示しています。

HNの反応

セキュリティ対応の重要性が強調される一方で、実装の複雑さに対する実用的な解決策への関心が示されています。同時に、重大なセキュリティ実装の失敗事例が指摘され、このテーマに対する深刻さの認識が見られます。

注目コメント

「申し訳ありませんが、Scratchプロジェクトのことは好きですが、これは言わざるを得ません。彼らはNodeへの攻撃者制御アクセスがある環境でSVGのXSSを発見しながら、その修正を正規表現を使ったサニタイズで行いました。そしてこれはScratchのユーザーによって発見されました。さらに悪いことに、OPの最新投稿「Scratchのすべてのバージョンは任意コード実行に脆弱です」は、今日同様の脆弱性をどのように悪用するかを正確に教えてくれます。」— @nmilo

元記事を読むHN討議を見る