クロスサイトスクリプティング(CWE-79)

このブログではウェブサイトやその上で動作しているウェブアプリケーションの脆弱性について紹介すると共に注意喚起をする目的でまとめられています。

今回は代表的なWebアプリケーション脆弱性であるクロスサイトスクリプティングについて解説をしています。

概要

Webアプリケーションでは画面の記述にHTMLという言語を用います。アプリケーションがHTMLする際に、外部からのデータをHTMLの一部として表示するプログラム処理にバグがあると、単なる文字列として受け取ったはずのデータがHTMLの「命令(タグ)」として解釈されてしまう場合があります。文字列を巧妙に指定することにより、アプリケーション利用者のブラウザ上で悪意のあるJavaScriptを実行させることができます。これがクロスサイトスクリプティング攻撃です。

クロスサイトスクリプティング攻撃による被害は、日本ではそれほど報告されていませんが、米国では大手のメールサービスやSNS等で被害が報告されています。

攻撃のイメージと影響

架空の検索プログラムを題材して、クロスサイトスクリプティングを説明します。このプログラムでは、検索結果の表示画面にて、入力されたキーワードを表示しています。この部分のプログラムは下記のとおりです。$keywordは、URLのパラメータ(クエリ文字列)keywordで指定します。

echo “検索キーワードは $keyword です”;

上記のプログラムの利用者がいて、keyword = “<script>alert(document.cookie);</script>” と指定されたURLを閲覧してしまった場合、生成されるHTMLは以下の通りです。

検索キーワードは <script>alert(document.cookie);</script> です

元のアプリケーションには存在しないJavaScriptを埋め込まれました。この結果、利用者(被害者)のブラウザ上で、クッキーが表示されます。被害者のブラウザ上でクッキーが表示されても実害はあまりありませんが、JavaScriptを工夫することで、攻撃者は、被害者のブラウザからクッキーを盗むこともできます。多くの場合、クッキーが盗まれると、その利用者になりすましができてしまうため、重大な影響があります。

脆弱性による影響

この脆弱性による影響の例として下記がありますが、これらに限りません。クロスサイトスクリプティング攻撃を受けると、脆弱性のあるページだけが影響を受けるのではなく、アプリケーション全体に影響が及びます。このため、「重要な情報や機能のないページだから脆弱性があっても大きな害はないだろう」と油断すると危険です。

  • 被害者へのなりすましによる個人情報の閲覧(漏洩)
  • 被害者アカウントでの投稿、データ更新、削除
  • 脆弱性のあるサイトで一時的に画面を改ざんされ、個人情報の入力フォームを作られる

脆弱性の有無の確認方法

脆弱性検査ツールがない場合は、手動診断で脆弱性の有無を検証することもできます。この場合、独立行政法人情報処理推進機構(IPA)が公開している「安全なウェブサイトの作り方」別冊の「ウェブ健康診断仕様」に診断の方法が説明されており、参考になります。

対策

クロスサイトスクリプティング脆弱性はアプリケーションのバグなので、アプリケーション改修による対策が基本です。HTML生成の際に、HTMLの特別な意味を持つ記号文字(「<」、「”」等)に対して、特別な意味を打ち消す「エスケープ」という処理を施すことで脆弱性を解消することができます。具体的な対策方法については参考文献を参照ください。

なお、デジサートの「クラウド型WAF」では、クロスサイトスクリプティング脆弱性に対してウェブサイトが攻撃を受けることを防ぐことができます。

参考文献

安全なウェブサイトの作り方、安全なSQLの呼び出し方(独立行政法人情報処理推進機構)
https://www.ipa.go.jp/security/vuln/websecurity.html

IPAテクニカルウォッチ 『DOM Based XSS』に関するレポート(同上)
http://www.ipa.go.jp/about/technicalwatch/20130129.html

修正の上再掲しました。

Posted in WAF