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