公開日:2015/11/16 最終更新日:2015/12/14

JVNVU#94276522
Apache Commons Collections ライブラリのデシリアライズ処理に脆弱性

概要

Apache Commons Collections (ACC) ライブラリのデシリアライズ処理には脆弱性があります。Java アプリケーションが ACC ライブラリを直接使用している場合やクラスパス指定でアクセスできる範囲に ACC ライブラリが設置されている場合、任意のコードを実行させられる可能性があります。

影響を受けるシステム

  • Apache Commons Collections ライブラリを直接使用している Java アプリケーション
  • クラスパス指定でアクセスできる範囲に Apache Commons Collections ライブラリを設置している Java アプリケーション

詳細情報

信頼できないデータのデシリアライズ (CWE-502)
2015年1月に開催された AppSec California 2015 において、Gabriel Lawrence 氏と Chris Frohoff 氏は、信頼できないデータをデシリアライズしてしまう脆弱性について講演し、任意のコードを実行可能であることを示しました。シリアライズ機能の使い方が適切でないすべての Java アプリケーションや Java ライブラリが本脆弱性の影響を受けます。

2015年11月に Foxglove Security の Stephen Breen 氏は、この問題が Apache Commons Collections (ACC) ライブラリに存在すること、特に、信頼できないデータのデシリアライズに InvokerTransformer クラスを使用している場合に任意のコードを実行させられる可能性があることを指摘しました。ACC ライブラリを使用するソフトウェアである、WebSphere、JenkinsWebLogic、OpenNMS なども影響を受けます。

ACC ライブラリ バージョン 3.2.1、4.0 の両方が本脆弱性の影響を受けます。

Apache Software Fondation は本脆弱性に関する公式見解をブログに掲載しました。ここには、対策に関するアドバイスや関連情報へのリンクなども掲載されています。また、本脆弱性に関するエントリ (COLLECTIONS-580) がバグ管理システム上に作られています。

ACC 以外に、Groovy や Spring などについても同様の問題の調査が行われています。Lawrence 氏と Frohoff 氏の発表資料には、Java だけでなく Python や Ruby などで書かれたアプリケーションやライブラリにおいても同様の問題が存在すると記載されています。使用するプログラミング言語やライブラリにかかわらず、ソフトウェアを設計する段階から、データのシリアライズ機能について十分に考慮することが重要です。

想定される影響

Apache Commons Collections ライブラリを使用している Java アプリケーションや Java ライブラリは、任意の Java コードを実行させられる可能性があります。
また、ACC ライブラリを直接使用していなくても、クラスパス指定でアクセスできる範囲に ACC ライブラリが存在する場合は、任意の Java コードを実行させられる可能性があります。

対策方法

2015年11月16日現在、本脆弱性の完全な対策は不明です。

ワークアラウンドを実施する
次のワークアラウンドの実施を検討してください。

  • ファイアウォールやファイルシステムのアクセス制御を活用する
    たとえば Jenkins などのように、ネットワークからシリアライズされたデータを受け取るアプリケーションに対しては、そのアプリケーションが待ち受けているポートに接続可能な範囲を制限することによって、本脆弱性の影響を軽減できる可能性があります。
     
  • アプリケーションの設計を見直す
    Apache Commons Collections ライブラリの対策版リリースの準備が進められています。しかし、現状提案されているパッチはシリアライズ機能をデフォルトで無効にするだけのものです。当該ライブラリのシリアライズ機能が必要な場合には、この機能を有効にするコードを追加するとともに、安全にデシリアライズするようアプリケーションの設計を見直す必要があります。
  • Apache Software Fondation の公式見解では次のように述べられています:
    However, to be clear: this is not the only known and especially not unknown useable gadget. So replacing your installations with a hardened version of Apache Commons Collections will not make your application resist this vulnerability.
    (しかし次のことに注意: 攻撃に使えるクラスは今回指摘されたもの以外にも存在するかもしれません。したがって Apache Commons Collections ライブラリを対策版に置き換えるだけでは本脆弱性の完全な対策とはならないでしょう。)
  • 信頼できない相手からのデータをデシリアライズしない
    信頼できない相手から受け取ったデータをデシリアライズするのは危険です。シリアライズ処理に関するベストプラクティスについては、SEI CERT Oracle Coding Standard for Java の SER12-J および SER13-J を参照ください。

参考情報

  1. CERT/CC Vulnerability Note VU#576313
    Apache Commons Collections Java library insecurely deserializes data
  2. FoxGlove Security
    What Do WebLogic, WebSphere, JBoss, Jenkins, OpenNMS, and Your Application Have in Common? This Vulnerability.
  3. AppSecCali 2015: Marshalling Pickles
    how deserializing objects will ruin your day
  4. Secure Coding Guidelines for Java SE
    8 Serialization and Deserialization

JPCERT/CCからの補足情報

JPCERT/CCによる脆弱性分析結果

CVSS v2 AV:N/AC:L/Au:N/C:P/I:P/A:P
基本値: 7.5

謝辞

関連文書

JPCERT 緊急報告
JPCERT REPORT
CERT Advisory
CPNI Advisory
TRnotes
CVE
JVN iPedia

更新履歴

2015/11/18
ベンダ情報にリンクを追加しました。
2015/12/14
ベンダ情報にリンクを追加しました。