Java RMI服务是远程方法调用(Remote Method Invocation)。它是一种机制,能够让在某个java虚拟机上的对象调用另一个Java虚拟机的对象的方法。

在Java Web中,很多地方都会用到RMI来相互调用。比如很多大型组织都会在后台部署一些Java应用,用于对外网站发布更新的静态页面,而这种发布命令的下达使用的就是这种RMI形式。

值得注意的是,RMI传输过程必然会使用序列化和反序列化,如果RMI服务端端口对外开发,并且服务端使用了像Apache Commons Collections这种库,那么会导致远程命令执行。

 

 

 

临时解决方法:

 

如果您不能立刻安装补丁或者升级,您采取以下措施以降低威胁:

 

* 使用防火墙规则及文件系统访问限制

* 使用 SerialKiller 替换进行序列化操作的 ObjectInputStream 类

* 删除掉项目里的“org/apache/commons/collections/functors/InvokerTransformer.class” 文件

 

厂商补丁:

 

Apache Group

------------

目前厂商已经发布了升级补丁ACC 3.2.2 以修复这个安全问题,请到厂商的主页下载:

https://commons.apache.org/proper/commons-collections/download_collections.cgi

http://svn.apache.org/viewvc?view=revision&revision=1713307

https://commons.apache.org/proper/commons-collections/ 

https://blogs.apache.org/foundation/entry/apache_commons_statement_to_widespread