Mayaa 1.1.11 以前にクロスサイトスクリプティングの脆弱性
更新日 2007/10/26
Mayaa 1.1.11 以前にはクロスサイトスクリプティングの脆弱性があります。下記の発生条件に合致する場合、下記の対応方法を取ってください。
発生条件
以下のいずれかの条件に当てはまる場合に攻撃が成功する恐れがあります。
- テンプレートの meta タグで charset の指定をしていない
- テンプレートの meta タグで charset を指定しているが、Web ブラウザが認識できない charset を指定している
HTTP リクエストのパラメータとして受け取った値をレスポンスに出力する処理がある場合に、テンプレートの文字セットと異なる文字セット (UTF-7 など) を使ってスクリプトを記述し、Web ブラウザの文字セット自動認識機能に誤認させることで任意のスクリプトを実行させることができます。
対応方法
以下の2つの条件を満たすようテンプレートを修正してください。
- テンプレートの meta タグで charset の指定をする
- charset は Web ブラウザが認識できるものである (日本語シフト JIS の場合は注意が必要)
注意点
一般的な日本語文字セットのうち、正しく認識される記述例は下記の通りです。アルファベットの大文字小文字は区別しません。
- UTF-8
- "UTF-8"
- 日本語 EUC
- "EUC-JP"
- 日本語 JIS
- "ISO-2022-JP"
- 日本語シフト JIS
- "Shift_JIS" (※)
日本語シフト JIS の場合、日本語 Windows で普通に作成されたテンプレートファイルを利用するには、Mayaa を 1.1.12 にバージョンアップの上、エンジン設定で convertCharset
パラメータを true
に設定し、テンプレートの charset には "Windows-31J" を指定してください。この設定をすることで、レスポンスヘッダの Content-Type および HTML の meta タグにある charset には "Shift_JIS" が出力されます。(convertCharset
パラメータは Mayaa 1.1.12 で追加されました)
テンプレートの charset で "Shift_JIS" を利用し、文字化けしない範囲の文字のみを使用している場合は問題ありません。
日本語シフト JIS の場合の対処についての簡単な解説
Internet Explorer 7 以前には、2007/08/16 時点で "Windows-31J" を認識できないバグがあり、日本語シフト JIS を使うためには "Shift_JIS" を指定する必要があります。しかし、日本語 Windows 上で作成されたファイルを Java で正しく読み込むためには encoding を "Windows-31J" として読み込む必要があります。
Mayaa は利用しているライブラリの都合上、テンプレートファイルを読み込むときの encoding として、そのテンプレートファイルに記述された charset を利用します (charset が指定されていない場合は "UTF-8" と指定されたものとして扱います)。このため、テンプレートファイルの charset には "Windows-31J" と記述し、レスポンスに出力する段階で "Shift_JIS" にする必要があります。Mayaa 1.1.12 ではこのための機能を追加しました。
関連情報
JVN#38199598 Mayaa におけるクロスサイトスクリプティングの脆弱性
参考情報
- IANA の文字セット名正式登録名称
- http://www.iana.org/assignments/character-sets
謝辞
本脆弱性をご報告くださった株式会社セキュアスカイ・テクノロジー 福森 大喜様に感謝いたします。
調査、対応にご協力いただきました JPCERT/CC 関係者の皆様に感謝いたします。
更新履歴
- 2007/10/26
日本語EUCの文字セット名がEUC_JPになっていたのをEUC-JPに修正(アンダースコアをダッシュに) - 2007/08/27
JVNのコンテンツ公開に合わせてリンク追記 (関連情報)
謝辞追記 - 2007/08/16
公開