freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Fastjson反序列化远程代码执行漏洞产生原因及修复建议
2022-06-01 14:47:04
所属地 北京

Fastjason是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。由于其序列化jason文件速度快且中文文档非常全面,所以为国内广大开发人员所应用。

fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快。

第三方独立测试结果可参考:https://github.com/eishay/jvm-serializers/wiki

一、漏洞产生原因:

Fastjson使用黑白名单用于防御反序列化漏洞,并允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名。在特定条件下可绕过默认autoType关闭限制,攻击远程服务器,风险影响较大(也就是通常所指的“Gadget”)。

二、受影响的版本:

特定依赖存在下影响 ≤1.2.80

三、漏洞等级:

风险评级:高危

四、官方修复方案:

1. 升级到1.2.83版本

从源代码可以看到:

- 该版本源代码删除了很多白名单对应的hash;

- checkAutoType(String typeName, Class<?> expectClass, int features)方法,添加了新的校验包含mask和autoTypeSupport,用来规避未经验证的autoType的注入。

2. 原来1.2.68以后到1.2.80的版本:开启配置safeMode,让白名单和黑名单都不支持autoType,从而可杜绝反序列化Gadgets类变种攻击。

在1.2.68版本中,fastjson增加了safeMode的支持。safeMode打开后,完全禁用autoType。所有的安全修复版本sec10也支持SafeMode配置。

打开SafeMode功能(1.2.68之后的版本)

有三种配置SafeMode方式,如下:

①在代码中配置

ParserConfig.getGlobalInstance().setSafeMode(true);

注意,如果使用new ParserConfig的方式,需要注意单例处理,否则会导致低性能full gc。

②加上JVM启动参数

-Dfastjson.parser.safeMode=true

如果有多个包名前缀,用逗号隔开

③通过fastjson.properties文件配置。

通过类路径的fastjson.properties文件来配置,配置方式如下:

fastjson.parser.safeMode=true

safeMode场景如何做autoType

在1.2.68之后的版本,提供了AutoTypeCheckHandler扩展,可以自定义类接管autoType, 通过ParserConfig#addAutoTypeCheckHandler方法注册。

// com.alibaba.fastjson.parser.ParserConfig.AutoTypeCheckHandler

/**

* @since 1.2.68

*/

public interface AutoTypeCheckHandler {

Class<?> handler(String typeName, Class<?> expectClass, int features);

}


// com.alibaba.fastjson.parser.ParserConfig#addAutoTypeCheckHandler

怎么判断是否用到了autoType

看序列化的代码中是否用到了SerializerFeature.WriteClassName

JSON.toJSONString(obj, SerializerFeature.WriteClassName); // 这种使用会产生@type

使用JSONType.autoTypeCheckHandler

在fastjson 1.2.71版本中,提供了通过JSONType配置autoTypeCheckHandler的方法,比如:

public class JSONTypeAutoTypeCheckHandlerTest extends TestCase {

public void test_for_checkAutoType() throws Exception {

Cat cat = (Cat) JSON.parseObject("{\"@type\":\"Cat\",\"catId\":123}", Animal.class);

assertEquals(123, cat.catId);

}


@JSONType(autoTypeCheckHandler = MyAutoTypeCheckHandler.class)

public static class Animal {


}


public static class Cat extends Animal {

public int catId;

}


public static class Mouse extends Animal {


}


public static class MyAutoTypeCheckHandler implements ParserConfig.AutoTypeCheckHandler {


public Class<?> handler(String typeName, Class<?> expectClass, int features) {

if ("Cat".equals(typeName)) {

return Cat.class;

}


if ("Mouse".equals(typeName)) {

return Mouse.class;

}


return null;

}

}

}

来源:https://github.com/alibaba/fastjson/wiki/fastjson_safemode

中科天齐 漏洞治理专家

中科天齐由中科院研究员李炼博士创立,以自主研究成果WuKong静态软件安全测试工具为主打产品,团队凭借多年在程序分析领域的技术积累,致力打造安全漏洞治理领域新生态的高新技术企业。

WuKong静态软件安全测试工具

WuKong是一款国产信创SAST产品,采用自主专利技术的程序分析引擎,多种创新性的静态分析技术,结合深度学习和人工智能等多种方法,能够对软件代码进行全方位的 安全扫描和安全分析。

# 代码安全 # 软件安全 # 代码漏洞检测工具 # fast Jason
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录