2012年10月~12月において、IPAにDOM Based XSSの脆弱性に関する届出が急増した。日本語で解説された資料が少ないDOM Based XSSの脆弱性について2回に分けて解説する。第1回ではDOM Based XSSの脆弱性について概要や対策が必要なアプリについて解説し、第2回ではコードを交えての対策方法を解説する。

XSSの脆弱性とは?

 DOM Based XSSとは、XSS(cross-site scripting:クロスサイト・スクリプティング)の脆弱性の一種である。まずは、XSSの脆弱性について解説する。

 XSSの脆弱性とは、端的に言えば「攻撃者が用意した不正なJavaScriptをWebページに埋め込める問題の一つ」である(図1)。不正なJavaScriptを埋め込む方法は何パターンか存在するが、ここでは説明を割愛する。

図 1 XSSの脆弱性とは
図 1 XSSの脆弱性とは

 これはつまり、攻撃者が悪意のあるJavaScriptをWebページに送り込むことで、利用者のWebブラウザーでこのJavaScriptを実行させることができることを意味する。例えば、Webブラウザー上に表示しているコンテンツの内容を書き換えられたり、ブラウザーとWebサイトの間でやり取りしている情報を取得し、盗み見られたりする危険性がある。そのため、下記のような被害が発生する。

発生しうる被害

本物のサイト上に偽のページが表示される

  • 攻撃者が用意したJavaScriptにより、本物のサイト上に表示した内容が書き換えられてしまう。アクセス先は本物のサイトであるため、本物のサイトが発信した情報であると利用者は騙されてしまう。

ブラウザーが保存しているCookieやWeb Storageの情報を取得される

  • 利用者を認証するサイトは、一般的にCookieと呼ばれる情報を使用して認証状態を管理する。Cookieは、利用者のブラウザーとアクセスしているサイトの間でのみやり取りするため、通常は第三者が知ることはできない。しかし、アクセス先のサイトに不正なJavaScriptを埋め込むことができてしまうと、そのCookie情報を第三者(攻撃者)が知ることができてしまう。つまり、第三者がその利用者になりすますことができてしまう。
  • 最近のブラウザーは、大きなデータを保存するWeb Storageという機能を有している。Web Storageに保存したデータも、Cookieと同様に、利用者のブラウザーとアクセスしているWebサイトの間でのみ、やり取りするように制限されている。しかし、この情報もJavaScriptを使えば、第三者(攻撃者)が知ることができてしまうため、攻撃により情報が漏えいする可能性がある。