文档章节

fastjson漏洞升级修复小记

bfleeee
 bfleeee
发布于 2017/04/01 14:01
字数 736
阅读 592
收藏 1

自从3.15温少公布了这个安全升级公告,在不少同行朋友圈里广为流传,最诧异的不外乎“一个序列化框架竟然会出现远程执行的漏洞”,其实如果用过fastjson的序列化类名功能就不难想到,在序列化写入类名后,反序列化时必然会用到这个类名进行对象类型的识别和创建。

public static void main(String[] args) throws IOException {
		Model t = new Model();
		t.setName("test");
		String json = JSON.toJSONString(t, SerializerFeature.WriteClassName);
		System.out.println(json);
		System.out.println(JSON.parseObject(json,Object.class));
	}
	static class Model{
		private String name;

		public String getName() {
			return name;
		}

		public Model setName(String name) {
			this.name = name;
			return this;
		}
	}

输出:

{"@type":"fastjson.FastjsonBugTest$Model","name":"test"}

fastjson.FastjsonBugTest$Model@763d9750

在没有限制反序列化类型的前提下,理论上是可以构建出一些有意思的特殊对象的,感兴趣可以尝试。这里只说修复。

升级fastjson版本

由于线上环境比较复杂,一个业务线包含10+项目,都使用maven管理,有一些项目是maven多模块项目。加上开发时间不同,开发人员不同,没有统一管理,这就形成了错综复杂的依赖关系。单说fastjson的依赖,版本有1.2.6,1.1.46,1.1.41,1.2.8...总之是不少。

关于如何升级修复版本,官方给出了比较详尽的兼容列表,照着升就行了。

增加autotype白名单

由于在缓存层依赖fastjson使用className做反序列化的自动类型判断,直接升级的话,会禁止autotype功能,需要添加可反序列化的白名单。

static{
    ParserConfig.getGlobalInstance().addAccept("com.xxxx.");
}

修改完成后运行了几天是没有问题的。但是过了几天,另一个业务线的同事上线一个新功能,重启之后失败,不停地报不能实例化实例的异常。查看了异常堆栈,发现是静态代码块抛出了异常NoSuchMethodError。原因是此业务线之前的同事阴差阳错地引用了我们业务线的依赖,在使用时加载了自己的低版本的fastjson,ParserConfig不支持addAccept方法。

虽然这种方式本来就不是正确的,但是本着程序健壮性的原则,修改了一下代码,使用反射调用方法:

static {

        // 针对fastjson暴露的严重bug修改 开启autotytype白名单 https://github.com/alibaba/fastjson/wiki/enable_autotype
        String methodName = "addAccept";
        String args = "com.xxxxx.";
        ParserConfig parserConfig = ParserConfig.getGlobalInstance();
        boolean executed = false;
        try {
            for(Method m : ParserConfig.class.getDeclaredMethods()){
                if(m.getName().equals(methodName)){
                    m.invoke(parserConfig, args);
                    executed = true;
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (Throwable e){
            e.printStackTrace();
        }
        // 执行不成功的依然使用老版本fastjson,无需开启白名单
        System.out.println("fastjson 漏洞修复,白名单添加结果: "+executed);
    }

注意要使用会优先加载的类,推荐写一个类放到容器中进行加载。 升级整体上还是比较简单的,官方给出的方法也比较详尽,只要注意一下多项目的兼容就OK了。

© 著作权归作者所有

bfleeee

bfleeee

粉丝 14
博文 33
码字总数 26316
作品 0
海淀
高级程序员
私信 提问
Fastjson 爆出远程代码执行高危漏洞,更新版本已修复

fastjson近日曝出代码执行漏洞,恶意用户可利用此漏洞进行远程代码执行,入侵服务器,漏洞评级为“高危”。 基本介绍 fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自...

南湖船老大
2017/03/16
21.9K
28
Fastjson 安全更新,建议升级到 1.2.28 或更新版本

安全升级公告 最近发现 fastjson 在 1.2.24 以及之前版本存在高危安全漏洞,为了保证系统安全,请升级到 1.2.28 或者更新版本。 更新方法 1. Maven 依赖配置更新 通过 maven 配置更新,使用最...

局长
2017/03/15
12K
9
fastjson 1.2.60 发布,修复导致 DoS 的问题

fastjson 1.2.60 发布了,这是一个 bug 修复安全加固版本,增加了 AutoType 黑名单,修复了一个导致拒绝服务的问题。 具体更新内容: 安全增强,增加 AutoType 黑名单,修复特定场景导致拒绝...

h4cd
09/09
7.5K
12
fastjson报autotype is not support

安全升级公告 最近发现fastjson在1.2.24以及之前版本存在远程代码执行高危安全漏洞,为了保证系统安全,请升级到1.2.28/1.2.29/1.2.30/1.2.31或者更新版本。 1.2.29//1.2.30/1.2.31是在1.2.2...

xiaolyuh
2017/11/30
0
0
JustAuth 1.9.0 正式来袭!新接入4个平台、代码量更少!

JustAuth1.9.0版本正式来袭!Teambition、人人、Pinterest、Stack Overflow等尽收眼底! 首先感谢各位朋友对JustAuth的关注,JustAuth在过去一周左右的时间内,增加了600+的关注,在这儿感谢...

HandsomeBoy丶
07/20
2.8K
10

没有更多内容

加载失败,请刷新页面

加载更多

川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
13分钟前
7
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
41分钟前
4
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
42分钟前
6
0
Netty整合Protobuffer

现在我们都知道,rpc的三要素:IO模型,线程模型,然后就是数据交互模型,即我们说的序列化和反序列化,现在我们来看一下压缩比率最大的二进制序列化方式——Protobuffer,而且该方式是可以跨...

算法之名
47分钟前
18
0
如何用C++实现栈

栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压...

BWH_Steven
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部