連載
» 2008年03月05日 00時00分 公開

Tomcatはどこまで“安全”にできるのか?(5):無料でWebアプリにありがちな脆弱性を調べて治す (2/3)

[x-labチーム,株式会社アメニクス]

ありがちな脆弱性(XSS)を調べてみよう

 XSSの脆弱性はWebアプリケーション開発において“つい”忘れられることの多いありがちな脆弱性です。IPAのサイトでも過去に発生して話題に上ったこともあり、いまでも「定番」といえる脆弱性でしょう。

 それでは、実際にこの脆弱性を調べてみましょう。今回対象とするのは、連載第3回「Tomcat 6で実現! Ajaxを超える通信技術Comet」で作成したチャットアプリケーションです。

図2 Cometのチャットアプリケーション 図2 Cometのチャットアプリケーション

 簡単な画面で、入力項目が2個所と送信用のボタンがありました。入力項目はそれぞれ「ユーザ名」と「メッセージ」の2つでチャットするユーザーとそのメッセージを入力するためのフォームでした。

XSSをワザと発生させる

 XSSは「悪意のあるユーザーによるフォームへの入力内容により意図せぬコードが実行される脆弱性」です。GETリクエストを含んだURLによる問題が話題になることが多く、実際に問題になることも多いです。

 それでは、まずはGETリクエストに載せてそれぞれの入力項目に「<script language="javascript">alert('hoge')</script>」のようにスクリプトを混入させて実行してみましょう。

 今回対象となる入力項目は「user」「message」の2つですので、以下のようなURLを作成してWebブラウザから開いて調べてみましょう。

http://192.168.1.45:8080/CometServlet
?user=<script%20language="javascript">alert('hoge')</script>
&message=<script%20language="javascript">alert('hoge')</script>

図3 図3

 何の反応もありませんでした。こちらは何も起こらず問題ないようです。

 次に、POSTリクエストを用いてスクリプトを混入させて実行してみましょう。各入力項目に以下の文字列を入力します。

<script language="javascript">alert('hoge')</script>

図4 CVEのセキュリティ・ホール検索ページ 図4 CVEのセキュリティ・ホール検索ページ

 そのまま送信してみると……。

図5 図5

 JavaScriptで記述したアラートが実際に2回も表示されてしまいました。これはまさに、XSSの脆弱性があるということを暗示しており、このように入力フォームの内容が基で意図せぬ処理が実行されるのがXSSです。

図6 (画面上は何も表示されないがHTMLタグが埋め込まれてコードが実行された) 図6 (画面上は何も表示されないがHTMLタグが埋め込まれてコードが実行された)

 このチャットアプリケーションにおいて、この脆弱性は“非常に危険”な状態だといえます。なぜなら、このチャットアプリケーションからリアルタイムに会話中の相手に対してスクリプトを送り込めることになるからです。

XSSで起きる現象の具体例

 例えば、以下のように太郎さんと花子さんが会話をしているような場面です。

図7 図7

 ここで、花子さんがほかのサーバに遷移させるスクリプトを混入させると……。

図8 図8

 会話をしていた太郎さんが強制的に別のページへと転送されてしまいます。強制的にスクリプトを実行させてしまうこの状態、修正する必要が高いといえます。

 さて、これまでに分かったことは、以下の3つの状況です。

  1. HTMLのタグがそのまま実行される
  2. POSTでの処理では発生する
  3. ETでの処理では発生しない

 それでは、どのようにしてXSSを解消すればいいでしょうか? 次ページで解説します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。