FastJSON漏洞
一
FastJSON是一个Java 语言实现的 JSON 解析器和生成器。
Fastjson 存在远程代码执行漏洞,该漏洞是由于使用org.apache.xbean.propertyeditor.JndiConverter类,绕过了Fastjson的黑名单而导致。
当服务端加载了存在受漏洞影响的xbean-reflect依赖,并且开启了Fastjson的autotype时,远程攻击者可以通过构造的攻击代码触发远程代码执行漏洞,最终可以获取到服务器的控制权限。
二
FastJSON是一个Java 语言实现的 JSON 解析器和生成器。Fastjson 1.2.60版本以下存在字符串解析异常,可导致远程拒绝服务攻击。攻击者即可通过精心构造的请求包对使用Fastjson的服务器造成远程拒绝服务攻击,可导致服务器宕机。
fastjson是一个java编写的高性能功能非常完善的JSON库,应用范围非常广,在github上star数都超过8k,在2017年3月15日,fastjson官方主动爆出fastjson在1.2.24及之前版本存在远程代码执行高危安全漏洞。攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并通过json来填充其属性值。而JDK自带的类com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl中有一个私有属性_bytecodes,其部分方法会执行这个值中包含的Java字节码。
FastJSON是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。由于具有执行效率高的特点,应用范围广泛。FastJSON 存在远程代码执行漏洞,可直接获取到服务器权限。漏洞成因是Fastjson autotype开关的限制可被绕过,然后链式地反序列化某些原本不能被反序列化的有安全风险的类。
修复建议
开启了autoType功能的受影响用户可通过关闭autoType来规避风险(autoType功能默认关闭)
建议将FastJSON升级到最新版本。
autoType关闭方法如下:
方法一:在项目源码中全文搜索如下代码,找到并将此行代码删除:
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
方法二:在JVM中启动项目时,切勿添加以下参数:
-Dfastjson.parser.autoTypeSupport=true
也可参考该链接中的方式来进行关闭:https://github.com/alibaba/fastjson/wiki/enable_autotype
将 FastJSON 升级到 1.2.60 及以上版本,下载地址:https://mvnrepository.com/artifact/com.alibaba/fastjson
1.将 FastJSON 升级到 1.2.83 及以上版本,或noneautotype版本,下载地址:https://repo1.maven.org/maven2/com/alibaba/fastjson/
2.临时修复建议:开启了autoType功能的受影响用户可通过关闭autoType来规避风险,另建议将JDK升级到最新版本。
由于autotype开关的限制可被绕过,请受影响用户升级到FastJSON 1.2.68及以上版本,通过开启safeMode配置完全禁用autoType。三种配置SafeMode的方式如下:
1)在代码中配置: ParserConfig.getGlobalInstance().setSafeMode(true);
2)加上JVM启动参数: -Dfastjson.parser.safeMode=true (如果有多个包名前缀,可用逗号隔开)
3)通过类路径的fastjson.properties文件来配置: fastjson.parser.safeMode=true
最后方案
1.将 FastJSON 升级到 1.2.69 及以上版本,sec版本升级到 sec10 及以上版本,下载地址:https://repo1.maven.org/maven2/com/alibaba/fastjson/
2.临时修复建议:开启了autoType功能的受影响用户可通过关闭autoType来规避风险,另建议将JDK升级到最新版本。
由于autotype开关的限制可被绕过,请受影响用户升级到FastJSON 1.2.68及以上版本,通过开启safeMode配置完全禁用autoType。三种配置SafeMode的方式如下:
1)在代码中配置: ParserConfig.getGlobalInstance().setSafeMode(true);
2)加上JVM启动参数: -Dfastjson.parser.safeMode=true (如果有多个包名前缀,可用逗号隔开)
3)通过类路径的fastjson.properties文件来配置: fastjson.parser.safeMode=true
版权归原作者 Spring是yyds! 所有, 如有侵权,请联系我们删除。