昨日の記事の続きです。 昨日はcommons-collectionsについて、どのような仕組みで攻撃が成功しうるかを書きました。 しかしこの問題はcommons-collections限定ではなく、GroovyまたはSpringFrameworkのクラスをロードしている環境でも起こりえます。 攻撃が成立する条件 攻撃のキーとなるのは2点。 リフレクションでメソッド呼び出しを行う何らかのクラスがロード済みである そのクラスのインスタンスは直列化可能である この条件を満たすクラスは、commons-collectionsではInvokerTransformerが該当しましたが、 Groovy: MethodClosure 2.4.4以降は非直列化が禁止されたのでセーフ(readObjectで例外をスロー) Spring: SerializableTypeWrapper.MethodInvoke