Top

Mayaa 1.1.11 以前にクロスサイトスクリプティングの脆弱性

公開日 2007/08/16
更新日 2007/10/26

Mayaa 1.1.11 以前にはクロスサイトスクリプティングの脆弱性があります。下記の発生条件に合致する場合、下記の対応方法を取ってください。

発生条件

以下のいずれかの条件に当てはまる場合に攻撃が成功する恐れがあります。

HTTP リクエストのパラメータとして受け取った値をレスポンスに出力する処理がある場合に、テンプレートの文字セットと異なる文字セット (UTF-7 など) を使ってスクリプトを記述し、Web ブラウザの文字セット自動認識機能に誤認させることで任意のスクリプトを実行させることができます。

対応方法

以下の2つの条件を満たすようテンプレートを修正してください。

注意点

一般的な日本語文字セットのうち、正しく認識される記述例は下記の通りです。アルファベットの大文字小文字は区別しません。

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 関係者の皆様に感謝いたします。

更新履歴

Copyright (c) 2004-2009 the Seasar Foundation and others. all rights reserved.