Show page source of StrutsPatch1-JP #98097

= Apache Struts 1.2.9 with SP1 by TERASOLUNA =
== Introduction ==
TERASOLUNA フレームワークが利用しているApache Struts 1.2.9に対して、Apache Struts1の脆弱性(CVE-2014-0114)を修正したバージョンをApache Struts 1.2.9 with Security Patch 1 contributed by TERASOLUNA(以下、Struts 1.2.9 sp1)としてApache License, Version 2.0で提供します。

 * [http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0114 CVE-2014-0114]
   * Struts 1.x~1.3.10には、"class"というリクエストパラメータがgetClassメソッドにマッピングされる性質を利用して、!ActionFormオブジェクトが!ClassLoaderを操作し、任意のコードを実行可能とする脆弱性が存在します。

=== Struts 1.2.9 sp1 ===
Struts 1.2.9 sp1では、Struts 1.2.9に対して下記の修正を加えています。

 * 修正内容
   1. !RequestUtilsのpopulate()メソッドで、リクエストパラメータが以下のいずれかの条件を満たしている場合、そのリクエストパラメータを不正と判定します。ただし、struts設定ファイル(struts-config.xml)でprefixを設定している場合は、その設定値が除去された後のリクエストパラメータ名に対して以下の条件を確認します。
     * リクエストパラメータ名が「class.」で始まる
     * リクエストパラメータ名に「.class.」が含まれる
   2. 不正なリクエストパラメータが検知された場合、そのリクエストパラメータの!ActionFormへの反映処理をスキップしてログ(Infoレベル)を出力し、処理を続行します。
     * {{{ログ出力例: [yyyy/mm/dd hh:mm:ss][INFO][RequestUtils] ignore parameter: paramName=class.xxx.case1}}}
 * 修正箇所
   *  [http://sourceforge.jp/projects/terasoluna/downloads/61220/struts-1.2.9-sp1-diff.zip/ Source Code Diff (struts-1.2.9-sp1-diff.zip)]

==== リクエストパラメータが不正パラメータであるかの判定について ====
Struts 1の内部動作上、「class」の先頭の大文字・小文字は区別されます。そのため、先頭の「c」が大文字の場合、今回の脆弱性をついた攻撃は成功しません。本パッチでは必要最小限のチェックを行うというポリシーの元、現状のチェックルールとしています。

== Constraints ==
本パッチを適用すると、!DynaActionFormに「class」という名前のプロパティ(型は!JavaBean)を定義した際に、その!JavaBeanのプロパティに対して、リクエストパラメータから値を設定することができなくなります。

== Upgrading Struts 1.2.9 to Struts 1.2.9 sp1 ==
既に導入済みのStrutsのjarファイル「struts.jar」を、本パッチで提供している「struts-1.2.9-sp1.jar」に置き換えてください。置き換える必要があるのはStrutsのjarファイルのみとなります。Strutsが依存しているライブラリの変更はありません。

== Building Struts 1.2.9 sp1 from source code ==
本パッチが提供するstruts-1.2.9-sp1のソースをビルドして、struts.jarを作成する手順を示します。

 1. JDK1.3.1_04のインストール[[BR]]
 2. apache-ant-1.6.1のインストールとライブラリの追加[[BR]] apache-ant-1.6.1を配置し、antのlibディレクトリ配下に以下のライブラリを追加する。
   * commons-logging-1.0.4.jar
   * junit-3.8.1.jar
   * xalan-2.5.1.jar
 3. struts-1.2.9-sp1のソースコードの配置[[BR]] ソースコードのzipを展開して任意のディレクトリに配置し、ビルド用にstruts-1.2.9-sp1-srcフォルダの直下にlibフォルダを作成する。
 4. ビルドに必要となるjarファイルの配置[[BR]] 以下のjarファイルを任意のディレクトリに配置する。
   * antlr-2.7.2.jar
   * checkstyle-2.4.jar
   * commons-beanutils-1.7.0.jar
   * commons-digester-1.6.jar
   * commons-fileupload-1.0.jar
   * commons-logging-1.0.4.jar
   * commons-validator-1.1.4.jar
   * junit-3.8.1.jar
   * log4j-1.2.14.jar
   * servletapi-2.3.jar
   * xerces-1.4.4.jar
   * oro-2.0.7.jar
   * jakarta-taglibs-standard-1.0
     * jstl.jar
     * standard.jar
   * jakarta-tomcat-4.0.6
     * jdbc2_0-stdext.jar
 5. ビルド用の設定ファイルの作成[[BR]] build.properties.sampleをbuild.propertiesにリネームし、内部に記述されているパスを自環境に合わせ修正する。
 6. ビルド用の環境変数の設定[[br]] 以下の環境変数を自環境に合わせて設定する。
   * JAVA_HOME
   * ANT_HOME
 7. antを実行してビルド

== Download ==
 * [http://sourceforge.jp/projects/terasoluna/downloads/61220/struts.jar/ Binary File (struts.jar)]
 * [http://sourceforge.jp/projects/terasoluna/downloads/61220/struts-1.2.9-sp1-src.zip/ Source Code (struts-1.2.9-sp1-src.zip)]
 * [http://sourceforge.jp/projects/terasoluna/downloads/61220/struts-1.2.9-sp1-diff.zip/ Source Code Diff (struts-1.2.9-sp1-diff.zip)]

== References ==
[http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0114 CVE - CVE-2014-0114]

[http://jvndb.jvn.jp/ja/contents/2014/JVNDB-2014-002308.html JVNDB-2014-002308 - JVN iPedia - 脆弱性対策情報データベース]

[https://www.ipa.go.jp/security/ciadr/vul/20140417-struts.html Apache Struts2 の脆弱性対策について(CVE-2014-0094)(CVE-2014-0112)(CVE-2014-0113):IPA 独立行政法人 情報処理推進機構]

== Disclaimer ==
適用される法律または書面での同意によって命じられない限り、Struts 1.2.9 sp1はApache License Version 2.0に基づいて頒布され、明示黙示を問わず、いかなる保証も条件もなしに「現状のまま」頒布されます。Apache License Version 2.0における権利と制限を規定した文言については、Apache License Version 2.0の本文を参照してください。

  * Apache License, Version 2.0[[br]]http://www.apache.org/licenses/LICENSE-2.0

※ 「TERASOLUNA」は、日本及びその他の国における株式会社NTTデータの商標または登録商標です。[[br]]
※ その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。