摘自:爱尖刀网、Sebug社区
九个月以前,在一个最受欢迎的Java程序库中,发现了一个严重的漏洞,该漏洞会将数以千计的Java应用程序及服务器置于遭到远程代码攻击的危险处境中。但由于一些原因,这个漏洞一直未被业内所重视。
这个漏洞出现在在Apache通用集合组件中的一个程序库中,这个程序库中包含了一整套使用广泛的,由Apache软件基金会维护的Java程序组件。在默认情况下,这个程序库由几个Java程序服务器和另外几家生产商包括Oracle WebLogic、IBM WebSphere, JBoss, Jenkins、 OpenNMS共同使用。
该漏洞专门针对Apache通用集合组件以及来自于Java程序中的不安全反序列化程序。在编程语言中,序列化是将数据转化为二进制格式并存储在文件或内存中,或通过网络发送出去的一个过程。而反序列化是这一过程的逆转。
研究员Chris Frohoff和Gabriel Lawrence在一月的安全会议上,第一次报道出这个漏洞,但是却没有获得太多关注。可能因为很多人觉得这是防止反序列化攻击和Java程序开发者的责任,并不是程序库创建者的责任。
Risk Based Security漏洞情报公司的首席研究员Carsten Eiram通过电子邮件表示:“虽然肯定能做出改善,但我并不认为程序库是罪魁祸首。最重要的是,不受信任的输入端应该永远也不该被盲目地反序列化。研究者应该了解程序库如何工作,以及验证输入端导入的东西,而不是相信或希望程序库自己会将它们安全化。”
近日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客中介绍了基于此漏洞为WebLogic, WebSphere, JBoss, Jenkins 和OpenNMS.发布了新的概念验证后,该漏洞在上周五获得了新一轮的关注。
作为回应,Oracle公司在周二发布了安全警报,包括对WebLogic的一个暂时性的缓和说明,并且该公司正致力于开发出一个永久的修补程序。Apache共同集合组件的研究员也已经开始了修复的工作。
Apache通用集合组件包含一个InvokerTransformer的类目,它可以执行反射或者动态方法调用,并且这个类目可以包含在一个序列化对象中。这就允许一个攻击者可以手动创建一个包含恶意软件的用户,在Java应用程序使用Apache Commen程序库对序列化对象进行反序列化操作时,这个用户就可以执行恶意程序。
软件供应链自动化公司Sonatype的首席技术官Joshua Corman 说:“InvokerTransmer 类目本身并无害而且也不会反序列化,但是当它们组合在一起时,安全问题就出现了。”,该公司帮助研发员追踪和管理他们在应用程序中使用的组件。
该公司的安全研究员Corman和Bruce Mayhew认为,这一问题并不局限于Apache通用集合组件中,其他一些Java组件也可能存在相同的问题。
Mayhew说:“我保证现在有一群人正在通过梳理最常用的组件来寻找可以执行某种命令的反程序化类目,这些人可能包括好人或者坏人。”
甚至在Apache共同集合组件中,根据组件中故障追踪器显示,InvokerTransform可能都不是最易受攻击的一类,有另外三类也被挑出,它们都存在着同样的问题。
FoxGlove Security公司的调查员搜索了驻留在GitHub上用于“commons-collection”的公共软件项目,共有1300个结果。然而,在企业环境中,可能有数以千计的定制的Java程序在使用这个程序库。
尽管修补程序已经发布,但仍然有很大可能性这一问题不只局限于这个特定的组件,研究员应该考虑他们是否能从classpath中移除commons-collections,或者从commons-collections文件中移除InvokerTransformer类目。这种改变应该慎重考虑,因为它们有可能会打破应用程序。
漏洞已确定影响范围:
JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10
JBoss AS (Wildly) 6 and earlier
JBoss A-MQ 6.2.0
JBoss Fuse 6.2.0
JBoss SOA Platform (SOA-P) 5.3.1
JBoss Data Grid (JDG) 6.5.0
JBoss BRMS (BRMS) 6.1.0
JBoss BPMS (BPMS) 6.1.0
JBoss Data Virtualization (JDV) 6.1.0
JBoss Fuse Service Works (FSW) 6.0.0
JBoss Enterprise Web Server (EWS) 2.1,3.0