您的位置 首页 java

又一个反序列化漏洞,我服了…

Apache Commons Collections是一个扩展了 Java 标准库里的Collection结构的第三方基础库,它提供了很多强有力的数据结构类型并且实现了各种集合工具类。

1.反 序列化 原因

如果Java应用对用户输入的内容做了序列化,但是用户输入的内容是不可信的数据,进行了恶意构造,那么在对恶意构造的数据做反序列化处理,就会产生的非预期对象,在这个过程中就可能带来任意代码执行。

2.漏洞原理

在进行Map转换时,修改Map中的key和value会调用接口,触发内置的transform来获取类名、方法对象进行反射,其中传入的方法名,参数类型等都是可控的,那么我们就可以构造ChainedTransformer来进行反射,调用任意函数

3.影响版本

commons-collections<=3.2.1存在漏洞

4.下载地址

本文对commons-collections-3.2.1进行漏洞分析,下载地址:

5.漏洞分析

在 org/apache/commons/collections/map/TransformedMap.class中可以看到 decorate() 方法,它是将一个Map对象,转换成TransformedMap对象。

可以看到它会把它的三个参数带入到 TransformedMap 方法中,并返回实例化的结果。而在这个方法中,如上图所示,就是将 Map 中的 key value 转换成 TransformedMap 中的 key value

而 transform是一个接口,即可实现数据变换的操作。当Map中的任意项的Key或者value被修改,这个接口就会被调用。

在 org/apache/commons/collections/functors/InvokerTransformer.class中,也是我们核心的关键点,可以看到它实现了 transform Serializable 这两个接口

可以看到 transform 中,首先会 getClass 获取传入参数的类名,再通过 getMethod 获取方法对象,最后调用 invoke 进行反射

就是说只需要传入方法名、参数类型和参数,我们就可以通过Java的 反射机制 可以调用任意函数。

5.修复方式

commons-collections升级到3.2.2或更高版本。

通过 maven 配置更新commons-collections,使用3.2.2或者最新版本,参考如下

我自己是一名从事了多年开发的Java老程序员,辞职目前在做自己的Java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Java学习干货,从最基础的 JavaSE Spring 各种框架都有整理,送给每一位Java小伙伴,想要获取的可以关注我的头条号并在后台私信我:Java,即可免费获取。

文章来源:智云一二三科技

文章标题:又一个反序列化漏洞,我服了…

文章地址:https://www.zhihuclub.com/196191.shtml

关于作者: 智云科技

热门文章

网站地图