一、漏洞
1、漏洞名称:Java RMI远程代码执行漏洞。
2、漏洞描述:Java RMI(远程方法调用)是J2SE的一部分,允许程序员开发基于JAVA的分布式应用,一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地JAVA对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样,在RMI的通信过程中,默认使用序列化来完成所有的交互,如果该服务器Java RMI端口(默认端口1099)对公网开放,且使用了存在漏洞的Apache Commons Collections版本,就可以在该服务器上执行相关命令。
二、漏洞等级
威胁级别:高危。
三、漏洞验证
1、工具扫描:可以使用Nmap工具对目标服务器进行端口扫描,探测发现Java RMI服务端口号(默认端口1099)。
nmap -vv -sS -sV -p 1099 目标IP地址
或者进行全面的端口扫描:
nmap -vv -sS -sV -p 1-65535 目标IP地址
如果探测结果显示端口1099开放,并且服务类型为java-rmi,则可能存在RMI漏洞。
2、利用工具:可以使用ysoserial等工具生成恶意的序列化数据包,并尝试通过RMI端口发送到目标服务器,以验证是否存在漏洞。
四、漏洞修复
1、禁止公网开放:禁止在公网上开放Java RMI服务的端口(默认端口1099),以减少被攻击的风险。
2、临时补丁:下载SerialKiller临时补丁,将其放置于classpath中,并将应用代码中的java.io.ObjectInputStream替换为SerialKiller,之后配置让其能够允许或禁用一些存在问题的类,SerialKiller具有Hot-Reload, Whitelisting, Blacklisting几个特性,可以控制外部输入反序列化后的可信类型。
3、删除文件:在不影响业务的情况下,可以临时删除掉项目里的InvokerTransformer.class文件,以防止漏洞被利用。
4、升级中间件:定期对WebLogic、Apache、JBoss等中间件进行升级,以修复已知的安全漏洞。
Java RMI远程代码执行漏洞是一个高危漏洞,主要由于RMI服务默认使用序列化来完成交互,且如果服务器端口对公网开放并使用了存在漏洞的库(如Apache Commons Collections),就可能被攻击者利用来执行任意命令,为了防止此类漏洞,建议采取上述修复措施,包括禁止公网开放RMI端口、使用临时补丁、删除关键文件以及定期升级中间件等。
到此,以上就是小编对于rmi 漏洞的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/88853.html