Struts XSS Vulnerability

IPAに報告した脆弱性情報が先日公開されました。
http://jvn.jp/jp/JVN%2316535199/index.html

結果としてはTomcat脆弱性であると位置付けられてしまったのですが、Struts脆弱性として報告をあげていた問題です。
概要は、Strutsが提供するHTML用タグライブラリがAccept-Languageヘッダ値をエスケープせずに出力するためXSSが発動してしまう、というものです。
攻撃にはFlashが必要となるため、「Flash脆弱性である」という回答が来る可能性もあるかな?と考えていたのですが、「Tomcatの問題だ!」という予想外の回答がIPA経由で返ってきました。どうやら「Tomcatなどのアプリケーションコンテナは、RFC2616に従ってAccept-Languageヘッダ値をvalidateすべきである、validateされていれば、XSSは発動しない。」という開発者の主張があったようです。
ん〜なんだかなぁ・・・
「Cross-Site Scriptingの問題は、特別な理由がない限りHTMLを生成する処理系が解決すべきであると考えています。そうでないと、複合的な条件で発生する脆弱性が闇に埋もれてしまう可能性が高くなりますよ。」
といったニュアンスの返信を開発者に伝えてもらったのですが、返事がもらえなかったようです。しばらくして、Tomcat脆弱性として公開してはどうか?というIPAからの提案がありました。この時点で報告から1年近く経過していたこともあり、闇に埋もれさせるよりはその形の方がよいと判断して、公開してもらうことにしました。


本当は以下のような形での公開を望んでいたのですけれど・・・

概要

The Apache Software Foundation により提供されている Web アプリケーションフレーム ワーク Apache Struts には、Accept-Language ヘッダの処理に関するクロスサイトスクリプティング脆弱性が存在します。

詳細情報

Strutsが提供するhml:htmlタグは以下のようなHTML生成ロジックを持ちます。

このlang属性の出力値には、Accept-Languageヘッダ値を元に決定されるServletRequest.getLocale()メソッドの戻り値が使用されるため、ServletAPIの実装によっては、クロスサイトスクリプティング脆弱性が発生する可能性があります。
報告者の情報によると、本脆弱性は、最新バージョンの Flash を使用している場合にも起こる問題であると確認されています。

影響を受けるシステム

Apache Struts 1.3.5及びそれ以前

想定される影響

ユーザのブラウザ上で任意のスクリプトが実行される可能性があります。

対策方法

・アップデートする
Apache Struts 1.3.6以上にアップデートしてください。

脆弱性を持つタグを使用しない
html:htmlタグのlang属性にtrueを指定しているアプリケーションにおいて、問題が発生する可能性があります。バージョンアップが難しい場合でも、lang属性を指定しなければ、問題を回避することが可能です。