漏洞介绍
近日, fastjson出现高危远程代码执行漏洞,该漏洞是fastjson于2017年爆出的远程代码执行漏洞新的绕过利用方式,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。目前PoC已公开。fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean,由于具有执行效率高的特点,应用范围广泛。
来说明下这个洞,fastjson目前流传的有两个洞比较厉害,
一、fastjson版本<1.2.25,rce可以远程直接获取服务器权限
(参考:https://github.com/alibaba/fastjson/wiki/security_update_20170315)
二、fastjson版本<1.2.51(本次需要升级事项)
目前安全市面利用poc已经公开(公开的利用脚本影响version<1.2.48),利用脚本可以远程直接获取服务器权限,目前黑产已经开始批量获取webshell开始搞了。
(参考链接:官方持续拒绝发布公开文档说明次安全升级工作),猜测可能阿里内部未完成升级工作,所以暂时不公开文档说明。
本次的漏洞版本<1.2.51,影响相当广,已知多个国内Top N的互联网公司均遭到这个漏洞的web入侵事件。
目前普遍的修复方案为:
- 1.升级Fastjosn到1.2.58版本,并关闭Autotype;
- 2.WAF拦截Json请求中的多种编码形式的‘@type’,‘\u0040type’等字样;
- 3.建议尽可能使用Jackson或者Gson;
- 4.升级JDK版本到8u121,7u13,6u141以上
升级版本这种方案确实可行,但是如果系统多业务复杂的话,兼容性问题影响不可控。
WAF费用问题是需要考虑的。
更换Jackson或者Gson,工作量也是个问题。
另类解决方案探讨
针对修复方案可以扩展出一张影响较小的方案:
能引起问题的地方,应该就是用户请求的数据会有漏洞。那么在用户请求参数转json之前,进行@type等关键字的过滤就行。
如何过滤:
1)Filter过滤?影响较大,不太推荐
2)如果有统一处理参数转json的地方,那么可以在这个地方处理
protected JSONObject getJSONData(HttpServletRequest request){
try {
String data = request.getParameter("data");
if(StringUtils.isNotEmpty(data)){
if(data.contains(JSONObject.DEFAULT_TYPE_KEY) || data.contains("\\u0040type")){
// TODO 此处处理@type 的过滤
}
return JsonResult.parseObject(data);
}
} catch (Exception e) {
e.printStackTrace();
}
return new JSONObject();
}
目前分析漏洞全面的可以跳这里
https://paper.seebug.org/994/#0x01-fastjson
https://www.freebuf.com/vuls/178012.html
网友评论