日経ネットワークセキュリティ「自己防衛マニュアル」(2003年8月発行),156ページより

(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

クロスサイトの意味

写真2●CERT/CCの警告で「クロスサイト・スクリプティング」と記述されている個所
図1●CERT/CCが警告したクロスサイト・スクリプティングの仕組み
図2●「クロスサイト」しなくてもクロスサイト・スクリプティング問題と呼ばれる

 まず,CERT/CCの警告に書かれた(本来の意味での)クロスサイト・スクリプティングが,どういうものかを理解する必要があるだろう。

 この警告の中では,不正なHTMLタグ挿入問題の一部として「クロスサイト・スクリプティング」問題を取り上げた(写真2)。CERT/CCの警告に書かれていたクロスサイト・スクリプティング問題の大まかな内容は,図1[拡大表示]のようなものである。

 図1のように,不正侵入者が罠のサイトに悪意のあるスクリプト・コードとリンク先のURLを仕込む。リンク先のURLは信頼できそうなWebサイトにする。ユーザーは,このリンクを安易にクリックする。すると,ユーザーのマシン上のWebブラウザが,悪意のスクリプトを含んだ要求をリンク先のWebサーバーに送る。要求を受け取ったWebサーバーは,該当するページがないため,ユーザーに対して動的に生成したエラーページを送る。

 この際,Webサーバーにクロスサイト・スクリプティングぜい弱性があれば,動的に生成したエラーページに悪意あるスクリプトが含まれたままユーザーに渡ってしまう。結果,悪意あるスクリプトがユーザーのマシン上で動く。

 このように,罠のサイトから脆弱なサイトを経由して,つまりWeb サイトを横断(クロスサイト)して,スクリプト・コードを送り込む方法を紹介したのが,CERT/CCの警告であった。ここから「クロスサイト」の名称が付けられた。

 ただ,図2[拡大表示]のように不正侵入者がクロスサイト・スクリプティングの脆弱性を抱えたWebサイトに,悪意のあるスクリプト・コードを書き込み,ユーザーがこれをアクセスすることで被害に遭う問題も,現在ではクロスサイト・スクリプティング問題の一つだと考えられている。つまり,「クロスサイト」でなくても,クロスサイト・スクリプティング問題と見なされているのだ。

 図1と図2のどちらの場合であっても,Webサイトとは全く関係のない第三者(不正侵入者)が,送信元をそのWebサイトとする形で,ユーザー(Webサイトの閲覧者)に悪意のあるスクリプト・コードを送り込んでいる。いずれも,悪意のあるスクリプト・コードを実行させるという点で違いはない。悪意のあるスクリプト・コードが第三者の送り込んだものであったとしても,犠牲となるWebブラウザから見れば,Webサイトから送られてきたと見えてしまう。これにより,WebサイトとWebブラウザ間でやり取りしているCookieなどのWebブラウザが保持している情報にアクセスされてしまう。クライアント側スクリプトの代表はJavaScriptで,Cookie情報にアクセスすることはJavaScriptプログラミングの中の基本的な事項である。

 現時点では,WebサイトからWebブラウザに送られる応答メッセージ(HTTPレスポンス・メッセージ)中に,Webサイトとは関係のない第三者が記述したスクリプト・コードが含まれる危険性が,「スクリプト埋め込み」に関するクロスサイト・スクリプティング問題の本質である。

佐名木 智貴 Sanaki Tomoki

筆者はインターナショナル・ネットワーク・セキュリティに勤務。技術本部に所属している。システムのセキュリティ・ホールの検査を専門とし,システム開発のセキュリティ問題に詳しい。