Apache Commons Collections ライブラリのデシリアライズ脆弱性
2015年11月、Apache Commons Collections (ACC)ライブラリに脆弱性が発表されました。
JVNVU#94276522 Apache Commons Collections ライブラリのデシリアライズ処理に脆弱性
CWE-502: Deserialization of Untrusted Data
現在はライブラリの修正版が発表されており、ライブラリ入れ替えで対応可能です。
COLLECTIONS-580 Serialization support for unsafe classes in the functor package is disabled by default as this can be exploited for remote code execution attacks. To re-enable the feature the system property "org.apache.commons.collections.enableUnsafeSerialization" needs to be set to "true". Classes considered to be unsafe are: CloneTransformer, ForClosure, InstantiateFactory, InstantiateTransformer, InvokerTransformer, PrototypeCloneFactory, PrototypeSerializationFactory, WhileClosure.
ただし、意図的にシリアライズを利用しているプログラムを実行すると、例外が発生するようになりました。
11 21, 2015 9:45:14 午後 org.apache.catalina.startup.Catalina start 情報: Server startup in 13232 ms java.lang.UnsupportedOperationException: Serialization support for org.apache.commons.collections.functors.InstantiateFactory is disabled for security reasons. To enable it set system property 'org.apache.commons.collections.enableUnsafeSerialization' to 'true', but you must ensure that your application does not de-serialize objects from untrusted sources. at org.apache.commons.collections.functors.FunctorUtils.checkUnsafeSerialization(FunctorUtils.java:183) at org.apache.commons.collections.functors.InstantiateFactory.writeObject(InstantiateFactory.java:158)
セキュリティ上の理由により、Serializationが標準でOFFになっています。有効化するために、システムプロパティ「org.apache.commons.collections.enableUnsafeSerialization」をtrueに設定する必要があります。
Eclipseの対応
該当プロジェクトを選択した状態で、Run->Debug Configrationを選択します。
表示されたウィンドウからサーバを選択して、ArgumentsタブのVM Argumentsに値を入力します。
サーバの対応
VM引数に、次の値を設定します。
-Dorg.apache.commons.collections.enableUnsafeSerialization=true
これで正常に動作するようになりました。ただしシリアライズが有効になっているため、脆弱性の原因とならないよう設定をおこないましょう。