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

华盟原创文章投稿奖励计划

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

本文原创,作者:小龙,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/44190.html

发表评论