fastjson远程代码执行漏洞技术分析与防护方案

2017年3月15日,fastjson官方发布安全公告表示fastjson在1.2.24及之前版本存在远程代码执行高危安全漏洞。攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。

fastjson官方建议直接升级到1.2.28/1.2.29或者更新版本来保证系统安全。

相关链接如下:

https://github.com/alibaba/fastjson/wiki/security_update_20170315

什么是fastjson

fastjson是一款用Java语言编写的高性能功能完善的JSON库。由于其独特的算法,fastjson的parse速度极快,超越了所有json库,包括曾经号称最快的jackson以及Google的二进制协议protocol buf。fastjson还是官方收录的参考实现之一,完全支持http://json.org的标准。除此之外,fastjson还支持各种JDK类型包括JavaBean,Map,Enum,泛型等,而且不需要额外的jar,能够直接跑在JDK上。Fastjson支持JDK 5, JDK 6,Android,阿里云手机等环境。

受影响的版本

  • fastjson <= 1.2.24

不受影响的版本

  • fastjson > 1.2.24

注:官方表示版本大于1.2.24但是小于1.2.28的版本虽然为fastjson的过渡版本,但是不受此漏洞影响,因此不必升级。

漏洞分析

通过新老版本的代码对比,发现此漏洞出现在com\alibaba\fastjson\parser\DefaultJSONParser.java文件中的DefaultJSONParser::parseObject函数:

在1.2.24 (即受影响的版本)版本的代码中,加载类名时,用到了一个TypeUtils::loadClass的方法,此方法在com\alibaba\fastjson\util\TypeUtils.java:

通过对代码的分析发现,该方法没有对需要加载的类做限制,而是直接加载从而导致非授权的代码执行。

而在1.2.25(非受影响的版本)版本的代码中,使用了config.checkAutoType加载相关的类,代码位于com\alibaba\fastjson\parser\ParserConfig.java,方法为ParserConfig::checkAutoType;

从该方法中可以看出,不论用户是否开启了autoTypeSupport功能,在类名被加载时都需要通过额外的一层筛选(来判断是否在acceptlist里),只有满足了此限制的类名才会被加载,否则软件会直接抛出异常并且不予执行。系统中定义的禁止加载的类名内容开头。

官方解决方案

阿里官方修复建议如下:

  • 利用阿里官方提供的WAF检测

可以用以下命令检测post内容中是否包含字符:

"@type"

注:添加双引号可以减少误报。

  • 命令行检测当前使用版本是否存在问题:
sudo -u admin lsof -X | grep fastjson | grep jar | grep -v sec01 | grep -v 1.2.24 | grep -v 1.2.25 | grep -v 1.2.25 | grep -v 1.2.26 | grep -v 1.2.27
  • 直接下载不受影响的新版本

阿里官方已经发布公告,建议受影响的用户立刻升级到1.2.28/1.2.29 或更高的版本,下载地址:

http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.29/

注:绿盟科技安全团队建议用户升级到1.2.29版本。

升级步骤如下:

  1. 首先备份原fastjson依赖库,可升级失败后随时进行还原,不对业务造成影响。
  2. 然后将低版本的fastjson库替换为2.29版本即可,如下图所示:

  • Maven依赖配置更新

通过maven配置更新,使用最新版本,如下所示:

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.29</version>

</dependency>

注:1.2.3 ~ 1.2.9版本均比1.2.29版本低,因此都需要升级。

技术防护方案

产品类

使用绿盟科技IPS/IDS/NF/WAF防护类产品进行防护,本周内会出相应的升级包,敬请关注相关产品最新动态。

服务类

绿盟科技提供专业的安全技术服务,全方位的保障客户应用系统安全,避免受此漏洞影响。

  • 短期服务:我们可以提供应急服务,服务内容包括对客户应用系统有针对性的提供修复建议,保障客户系统的安全升级。
  • 中长期服务:结合绿盟科技检测与防护产品,提供7*24的安全运营服务,在客户应用系统遭到安全威胁时第一时间通知客户,并定期进行安全检测,针对安全风险提供专业的解决方案。

总结

该漏洞源于fastjson在加载类时对类名判断的不严谨,导致攻击者可以将非授权的恶意代码添加到类名中,此代码会在稍后被fastjson解析时自动加载,导致代码的远程执行。由于fastjson的优越性能(如速度快,支持JDK类型广等),此json库被多数用户选择,尤其是对于数据处理的准确性和速度有较高要求的金融类产业,因此该漏洞对相关产业及用户影响较大。绿盟科技在第一时间了解到该漏洞后,以最快的速度进行应急响应,分析该漏洞的成因与原理,及时为用户提供安全可靠的检测与防护方案。

 

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880

Spread the word. Share this post!

Meet The Author

Leave Comment