Fastjson < 1.2.83 任意代码执行漏洞(CVE-2022-25845)
漏洞描述
Fastjson 是Java语言实现的快速JSON解析和生成器。
Fastjson 使用黑白名单用于防御反序列化漏洞,1.2.80及以下版本可利用白名单期望类Throwable绕过黑名单限制,不受默认autoType关闭影响。
结合其他依赖(gadget)的默认行为,如groovy、aspectj等依赖,攻击者可利用该漏洞构造利用链,实现远程执行恶意代码、任意文件读取等操作。
影响范围
com.alibaba:fastjson@[1.1.15, 1.2.83)
修复方案
升级到最新版本1.2.83
开启safeMode
在1.2.68之后的版本,fastjson增加了safeMode的支持。safeMode打开后,完全禁用autoType。所有的安全修复版本sec10也支持SafeMode配置。
有三种方式配置SafeMode,如下:
1. 在代码中配置
ParserConfig.getGlobalInstance().setSafeMode(true);
- 注意,如果使用new ParserConfig的方式,需要注意单例处理,否则会导致低性能full gc。
2. 加上JVM启动参数
-Dfastjson.parser.safeMode=true
如果有多个包名前缀,用逗号隔开
3. 通过fastjson.properties文件配置。
通过类路径的fastjson.properties文件来配置,配置方式如下:
fastjson.parser.safeMode=true
验证是否开启安全模式
public class Main {
public static void main(String[] args) {
boolean safeModeEnabled = ParserConfig.getGlobalInstance().isSafeMode();
if (safeModeEnabled) {
System.out.println("FastJSON的安全模式已经开启。");
} else {
System.out.println("FastJSON的安全模式未开启。");
}
}
}
tomcat中如何加启动参数
vim /tomcat目录/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -Dfastjson.parser.safeMode=true"
参考链接
https://github.com/alibaba/fastjson/wiki/fastjson_safemode
https://www.oscs1024.com/hd/MPS-2022-11320
https://nvd.nist.gov/vuln/detail/CVE-2022-25845
https://github.com/alibaba/fastjson/releases/tag/1.2.83
https://www.oscs1024.com/hd/MPS-2022-11320
https://deps.dev/advisory/osv/GHSA-pv7h-hx5h-mgfj
https://github.com/alibaba/fastjson/wiki/security_update_20220523