漏洞背景

Fastjson 是阿里巴巴开发的一个高性能 JSON 解析库,它在 Java 开发中被广泛使用。而 Fastjson 在 1.2.62 及之前的版本中存在一个远程代码执行漏洞(CVE-2020-8840),攻击者可以通过构造恶意的 JSON 数据进行远程代码执行。这个漏洞对于使用了 Fastjson 的项目来说是非常危险的,因为攻击者可以通过这个漏洞完全控制受影响的服务器。

漏洞利用方法

攻击者可以通过构造特定的 JSON 数据来触发 Fastjson 解析器的反序列化漏洞。漏洞触发的条件是:被反序列化的 Java 类必须存在一个 setter 方法,通过这个 setter 方法可以完成远程代码执行。攻击者构造的 JSON 数据中,可以通过添加一些特殊的字段和数值来绕过 Fastjson 的反序列化过滤器,从而触发代码执行。具体来说,漏洞利用的过程包括以下几个步骤:

  1. 构造一个包含恶意代码的 JSON 数据。
  2. 通过 HTTP POST 请求将恶意 JSON 数据发送给目标服务器。
  3. 服务器接收到请求后,将 JSON 数据反序列化为 Java 对象。
  4. Fastjson 在反序列化过程中调用了 Java 对象中的 setter 方法,触发远程代码执行。

漏洞修复方法

为了修复 Fastjson 的这个漏洞,可以采取以下措施:

  1. 升级 Fastjson 版本:建议将 Fastjson 升级到 1.2.63 及之后的版本,这些版本中修复了该漏洞。
  2. 开启 AutoType 白名单:Fastjson 的 AutoType 机制是导致该漏洞的根本原因,为了增强安全性,可以通过配置文件或代码的方式,将 AutoType 白名单设置为仅允许可信任的类。这样,Fastjson 在反序列化过程中只会创建指定的类实例,从而减少远程代码执行的风险。
  3. 禁用 AutoType 机制:如果项目中并不需要使用 Fastjson 的 AutoType 功能,可以选择完全禁用它。具体的方法是在 Fastjson 的配置文件中将 "autotype_check" 设置为 false,这样 Fastjson 在反序列化过程中会忽略所有 AutoType 相关的逻辑。