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

小龙 2017-3-31 HACK 0 3

2158dda8847a29e

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

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中的具体内容如下:

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

JSON. DEFAULT_TYPE_KEY的定义如下:

攻击者构造的攻击代码中模式化后会存在如下格式的片段:

 

1234567891011 {... "@type":"classname" ...} {... "@type":"[clastname1,classname2,...]" ...} {... "@type":"Lclastname;" ...} {... '@type':"classname" ...} {... '@type':"[clastname1,classname2,...]" ...} {... '@type':"Lclastname;" ...}

 

红色部分为可以手动输入的类名,可以在此位置添加恶意的非授权代码。

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

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

 

12345678910111213141516171819202122 bshcom.mchangecom.sun.java.lang.Threadjava.net.Socketjava.rmijavax.xmlorg.apache.bcelorg.apache.commons.beanutilsorg.apache.commons.collections.Transformerorg.apache.commons.collections.functorsorg.apache.commons.collections4.comparatorsorg.apache.commons.fileuploadorg.apache.myfaces.context.servletorg.apache.tomcatorg.apache.wicket.utilorg.codehaus.groovy.runtimeorg.hibernateorg.jbossorg.mozilla.javascriptorg.python.coreorg.springframework

 

 

官方解决方案

阿里官方修复建议如下:

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

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

 

1 "@type"

 

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

  • 命令行检测当前使用版本是否存在问题:

 

1 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配置更新,使用最新版本,如下所示:

 

 

123456789 <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库被多数用户选择,尤其是对于数据处理的准确性和速度有较高要求的金融类产业,因此该漏洞对相关产业及用户影响较大。绿盟科技在第一时间了解到该漏洞后,以最快的速度进行应急响应,分析该漏洞的成因与原理,及时为用户提供安全可靠的检测与防护方案。

转载请注明来自华盟网,本文标题:《fastjson远程代码执行漏洞技术分析与防护方案》

喜欢 (3) 发布评论