FastJSON的0day漏洞的解决

 更新时间:2023年05月10日 09:12:23   作者:阿圆这个程序媛  
本文主要介绍了FastJSON的0day漏洞的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、问题背景

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean,由于具有执行效率高的特点,应用范围很广

2019年6月22日,阿里云云盾应急响应中心监测到FastJSON存在0day漏洞,攻击者可以利用该漏洞绕过黑名单策略进行远程代码执行

关于fastjson javaweb框架的0day漏洞情报,由于fastjson在进行实例化对象时没有对输入数据进行严格限制,攻击者只要精心构造json数据,即可造成远程代码执行,截止到发稿日,关于该漏洞的利用方式暂未公开,请相关用户及时进行防护。

2019年6月22日,阿里云云盾应急响应中心监测到FastJSON存在0day漏洞,攻击者可以利用该漏洞绕过黑名单策略进行远程代码执行。

1.1、漏洞名称

FastJSON远程代码执行0day漏洞

1.2、漏洞描述

利用该0day漏洞,恶意攻击者可以构造攻击请求绕过FastJSON的黑名单策略。例如,攻击者通过精心构造的请求,远程让服务端执行指定命令(以下示例中成功运行计算器程序)。

1.3、影响范围

  • FastJSON 1.2.30及以下版本
  • FastJSON 1.2.41至1.2.45版本

1.4、官方解决方案

升级至FastJSON最新版本,建议升级至1.2.58版本。

说明 强烈建议不在本次影响范围内的低版本FastJSON也进行升级。

升级方法

您可以通过更新Maven依赖配置,升级FastJSON至最新版本(1.2.58版本)。

<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.58</version>
</dependency>

1.5、防护建议

(1)Web应用防火墙

Web应用防火墙的Web攻击防护规则中已默认配置相应规则防护该FastJSON 0day漏洞,启用Web应用防火墙的Web应用攻击防护功能即可。

说明 如果您的业务使用自定义规则组功能自定义所应用的防护规则,请务必在自定义规则组中添加以下规则:

(2)WAF自定义防护规则

FastJson是阿里的一个开源Json解析库,可以将数据在JSON和Java Object之间互相转换,此前曾被爆出存在反序列化漏洞。为预防FastJson库存在0day漏洞,现提供两条自定义规则,可根据情况选择一个添加。也可以同时添加两个,如果有误报,再取消。此自定义规则主要针对存在JAVA系统并使用了该库的客户。

自定义规则--精准防护

检测对象>request_body

匹配操作>正则包含

检测值>['"]\s*@type\s*['"].*?(com\.(sun|mchange)|org\.(apache|codehaus|hibernate|jboss|mozilla|python)|java\.(lang\.Thread|net\.Socket|rmi)|javax\.xml|bsh)

自定义规则--暴力防护

检测对象>request_body

匹配操作>正则包含

检测值>['"]\s*@type\s*['"]

TAM关于fastjson javaweb框架0day漏洞回溯和实时检测

ssh后台执行(后台执行速度相对比较快,推荐此方式)

  • 确定Spark组件位置:点击BSA首页右上角齿轮,选择集群管理,进入组件,点击查看Spark组件
  • 记录下主机名称,例如bsa12
  • ssh登陆BSA后台,执行如下命令(将SparkSqlServer主机地址替换至绿色背景,然后复制该命令并且回车):
    先切换bsauser账号 su – bsauser
    然后执行

    ./spark-1.3.0-bin-hadoop2.4/bin/beeline -u jdbc:hive2://bsa12:10000 --verbose=true --showHeader=true --outputformat=tsv2 --color=true -e "select sip, dip, from_unixtime(timestamp) as timestamp, ret_code, host, uri, post_data from internal_app_bsatam2.tam_httplog where ns_date>=20190610 and (post_data rlike '@type' or uri rlike '@type');" > fastjson_export.csv

    等待上述任务执行完成之后,如果当前目录下有fastjson _export.csv文件且文件中有内容时,说明20190610至今的历史流量中出现过fastjson漏洞攻击。

tam界面执行自定义查询(当无法ssh后台时,可在TAM的界面上操作。相比后台执行稍慢,不推荐)

  • 进入挖掘检索—自定义查询—新建查
  • 将上述下列SQL粘贴至下图所示位置:

    select sip, dip, from_unixtime(timestamp) as timestamp, ret_code, host, uri, post_data from internal_app_bsatam2.tam_httplog where ns_date>=20190610 and (post_data rlike '@type' or uri rlike '@type')
  • 点击校验。耐心等待校验成功后继续点击新建。完成后点击之后,点击下图所示位置开始执行

实时监控

Tam自定义场景监控可用于实时监测,当UTS上没有配置该规则时,使用TAM的自定义场景的检测功能:

  • 进入场景管理—场景配置—自定义场景。选择规则, “fastjson远程代码执行漏洞利用检测”配置如下
  • 将下列SQL粘贴至规则输入

    select sip, dip, timestamp as start_time, timestamp as end_time, ret_code as info3, concat(host, uri) as infos, post_data as info2, timestamp as end_time from internal_app_bsatam2.tam_httplog where post_data rlike '@type' or uri rlike '@type')

问题补充:

该缺陷是因旧缺陷修复方案引起,原因如下:

在fastjson 1.2.24版本之前(包括1.2.24版本),fastjson 在使用JSON.parseObject方法时,由于使用泛型(Object.class)反序列化的场景时,存在恶意构造序列化内容造成执行服务器命令。即在远程服务器场景,如果使用fastjson做为远程报文内容反序列化,且泛型使用,则存在期可能。

在1.2.24版本之后该缺陷已修复,修复方案采用默认关闭autoType,即自动泛型反序列化,且如果打开autoType,也加入了黑名单,对存在易被利用攻击的类进行了黑名单处理。这次漏洞风险内容为:打开了autoType的情况下,可以通过0day漏洞绕过黑名单。绕过的方式,暂时不详。

到此这篇关于FastJSON的0day漏洞的解决的文章就介绍到这了,更多相关FastJSON的0day漏洞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Quarkus云原生开篇java框架简介

    Quarkus云原生开篇java框架简介

    Quarkus 是小红帽开源的专门针对云容器环境优化的云原生java框架,博主接下来的项目估计都会使用这个框架来开发,相关的问题都会记录在这个系列,本文是个开篇
    2022-02-02
  • Spring Data JPA实现动态条件与范围查询实例代码

    Spring Data JPA实现动态条件与范围查询实例代码

    本篇文章主要介绍了Spring Data JPA实现动态条件与范围查询实例代码,非常具有实用价值,需要的朋友可以参考下
    2017-06-06
  • SpringBoot接口返回结果封装方法实例详解

    SpringBoot接口返回结果封装方法实例详解

    在实际项目中,一般会把结果放在一个封装类中,封装类中包含http状态值,状态消息,以及实际的数据。这里主要记录两种方式,通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-09-09
  • 获取Spring当前配置的两种方式

    获取Spring当前配置的两种方式

    这篇文章主要给大家介绍了获取Spring当前配置的,两种方式文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • MyBatis中criteria的or(或查询)语法说明

    MyBatis中criteria的or(或查询)语法说明

    这篇文章主要介绍了MyBatis中criteria的or(或查询)语法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java多线程编程安全退出线程方法介绍

    Java多线程编程安全退出线程方法介绍

    这篇文章主要介绍了Java多线程编程安全退出线程方法介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java Spring中Bean的作用域及生命周期

    Java Spring中Bean的作用域及生命周期

    这篇文章主要介绍了Java Spring中Bean的作用域及生命周期,Bean的作用域默认是单例模式的,也就是说所有⼈的使⽤的都是同⼀个对象,更多相关内容需要的朋友可以参考一下
    2022-08-08
  • Jenkins如何使用DockerFile自动部署Java项目

    Jenkins如何使用DockerFile自动部署Java项目

    这篇文章主要介绍了Jenkins如何使用DockerFile自动部署Java项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java中static关键字的作用和用法详细介绍

    Java中static关键字的作用和用法详细介绍

    这篇文章主要介绍了Java中static关键字的作用和用法详细介绍,本文讲解了static变量、静态方法、static代码块、static和final一块用等内容,需要的朋友可以参考下
    2015-01-01
  • Java容器类源码详解 Deque与ArrayDeque

    Java容器类源码详解 Deque与ArrayDeque

    这篇文章主要介绍了Java容器类源码详解 Deque与ArrayDeque,Deque 接口继承自 Queue接口,但 Deque 支持同时从两端添加或移除元素,因此又被成为双端队列。,需要的朋友可以参考下
    2019-06-06

最新评论