内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

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

2017-03-21 11:21 出处:清屏网 人气: 评论(0

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

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

JSON. DEFAULT_TYPE_KEY的定义如下:

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

{... "@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里),只有满足了此限制的类名才会被加载,否则软件会直接抛出异常并且不予执行。系统中定义的禁止加载的类名以如下内容开头:

bsh
com.mchange
com.sun.
java.lang.Thread
java.net.Socket
java.rmi
javax.xml
org.apache.bcel
org.apache.commons.beanutils
org.apache.commons.collections.Transformer
org.apache.commons.collections.functors
org.apache.commons.collections4.comparators
org.apache.commons.fileupload
org.apache.myfaces.context.servlet
org.apache.tomcat
org.apache.wicket.util
org.codehaus.groovy.runtime
org.hibernate
org.jboss
org.mozilla.javascript
org.python.core
org.springframework

官方解决方案

阿里官方修复建议如下:

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

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

"@type"

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

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

分享给小伙伴们:
本文标签: Fastjson远程代码执行

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号