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で提供します。

  • 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
  • 修正箇所

リクエストパラメータが不正パラメータであるかの判定について

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.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のインストール
  2. apache-ant-1.6.1のインストールとライブラリの追加
    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のソースコードの配置
    ソースコードのzipを展開して任意のディレクトリに配置し、ビルド用にstruts-1.2.9-sp1-srcフォルダの直下にlibフォルダを作成する。
  4. ビルドに必要となるjarファイルの配置
    以下の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. ビルド用の設定ファイルの作成
    build.properties.sampleをbuild.propertiesにリネームし、内部に記述されているパスを自環境に合わせ修正する。
  6. ビルド用の環境変数の設定
    以下の環境変数を自環境に合わせて設定する。
    • JAVA_HOME
    • ANT_HOME
  7. antを実行してビルド

Download

References

CVE - CVE-2014-0114

JVNDB-2014-002308 - JVN iPedia - 脆弱性対策情報データベース

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の本文を参照してください。

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