危害等级:高,攻击者利用此漏洞,可实现远程代码执行,PoC已公开。
漏洞描述
近日, fastjson出现高危远程代码执行漏洞,该漏洞是fastjson于2017年爆出的远程代码执行漏洞新的绕过利用方式,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。目前PoC已公开。
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean,由于具有执行效率高的特点,应用范围广泛。请相关用户尽快升级至1.2.58版本,以确保对此漏洞的防护。
影响范围
受影响版本
- fastjson <= 1.2.47
不受影响版本
- fastjson > = 1.2.48,官方建议升级到1.2.51或最新版本 1.2.58。
漏洞防护
官方升级
阿里官方已经发布公告,建议受影响的用户立刻升级到1.2.51/1.2.58 版本,下载地址如下:
http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.58/
升级步骤如下:
- 备份原fastjson依赖库,避免升级失败的情况发生。
- 将低版本的fastjson库替换为1.2.58版本即可
开发人员可通过配置Maven的方式对应用进行升级并编译发布,配置如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency>
技术分析
-
补丁分析
在fastjson 1.2.51版本中,新增黑名单hash 8409640769019589119L,该hash对应的黑名单类即为java.lang.Class
另外在TypeUtils#loadClass方法中也修改了默认的cache为false,因此也无法将指定类放入mapping中
-
漏洞分析
本次漏洞是通过两部分json数据,利用java.lang.Class绕过第一次checkAutoType检查,并且把恶意类放在mapping中,在解析第二部分json数据时从mapping中获取相应类,从而绕过第二次checkAutoType检查,加载恶意类完成代码执行。
在com.alibaba.fastjson.parser.DefaultJSONParser#parseObject过程中,如果遇到@type,会取出值进行checkAutoType检查,在fastjson 1.2.25之后新增了黑名单类,常规com.sun.rowset.JdbcRowSetImpl无法通过检查,但是此处可以利用fastjson一个特性绕过黑名单检查。
注意到在checkAutoType中,检测到黑名单类同时满足getClassFromMapping为空,才会抛出异常,此处如果把恶意类放入mapping中便可绕过这个检测。回溯什么情况下会把类放入mapping
在DefaultJSONParser.parseObject中,
obj = deserializer.deserialze(this, clazz, fieldName);
跟进deserialze,可以看到如果传入的key为”val”,则把val的值赋值给strVal,随后对clazz进行一系列if判断,当clazz为class的情况,进入loadClass
在loadClass中把clazz放入mapping
随后通过clazz = TypeUtils.getClassFromMapping(typeName);从mapping获取clazz,如果clazz不为空则直接返回,不经过黑名单检查,同样也不检查autoTypeSupport,因此该漏洞无需开启autoTypeSupport
因此如果解析”name”:{“@type”:”java.lang.Class”,”val”:”com.sun.rowset.JdbcRowSetImpl”}的时候便会TypeUtils.loadClass加载val设置的类,并把该类放在一个mapping中,随后在解析第二部分json数据时,由于能够从getClassFromMapping获取到值从而绕过checkAutoType检查,达到加载任意类的目的。
漏洞利用成功:
声明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。
绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。
关于绿盟科技
北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。
基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。
北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市,股票简称:绿盟科技,股票代码:300369。