做一个营销型网站网站运营一个月多少钱
近日,fastjson远程代码执行漏洞的利用方式公开。此漏洞由于fastjson autotype在处理json对象时,对于@type的字段未能有效的进行安全验证,攻击者可以插入危险类,利用rmi接口调用远端服务器上的恶意文件执行命令。
漏洞名称:fastjson远程代码执行漏洞
威胁等级:高危
影响范围:fastjson<=1.2.47
漏洞类型:任意代码执行漏洞
利用难度:中等
fastjson介绍
fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种"假定有序快速匹配"的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
漏洞分析
漏洞是利用fastjson autotype在处理json对象的时候,未对@type字段进行完全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程rmi主机,通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞的利用,获取服务器的敏感信息泄露,甚至可以利用此漏洞进一步对服务器数据进行修改,增加,删除等操作,对服务器造成巨大的影响。
此漏洞在一年前就已经有过利用autotype实现Java反序列化攻击的例子,fastjson官方针对于此类攻击添加了一个黑名单过滤,使用checkAutoType方法对传入的类进行过滤,如下图。
此漏洞的产生是由于攻击者绕过了checkAutoType检测方法,向服务器发送恶意代码,执行系统命令。
针对于1.2.47版本中,com.sun.rowset.JdbcRowSetImpl已经被添加在黑名单中了,利用传统的poc无法完成对漏洞的利用。此次绕过使用了java.lang.Class,利用TypeUtils.loadClass方法加载类,成功的绕过了checkAutoType方法的检测。
并在后续的代码中将com.sun.rowset.JdbcRowSetImpl注入到map中
再次调用com.sun.rowset.JdbcRowSetImpl类时,会从map中调用,成功绕过黑名单对于com.sun.rowset.JdbcRowSetImpl的封堵。剩下的流程和之前的漏洞相似,通过调用远端的rmi服务器上的恶意类执行系统命令,实现远程代码执行漏洞的利用。
针对于此漏洞修复措施也是将loadClass方法设置为flase,阻止map注入。补丁如下图。
漏洞复现
搭建fastjson1.2.47环境。开启web服务器并部署Exploit.class的恶意文件,搭建rmi服务器并与web服务器建立联系。构造json数据,导入fastjson jar包与远程rmi服务器建立连接,加载恶意文件,效果如下图所示
影响范围
目前受影响的fastjson版本:
fastjson<=1.2.47
修复建议
升级到fastjson最新版本1.2.58,下载链接:https://github.com/alibaba/fastjson
深信服解决方案
深信服下一代防火墙可轻松防御此漏洞,建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。
深信服云盾已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。
参考链接
https://github.com/alibaba/fastjson
时间轴
2019/7/10
fastjson远程代码执行漏洞发布利用方式
2019/7/13
深信服千里目安全实验室分析并复现该漏洞,并发布漏洞预警文章以及产品解决方案。