Spring boot使用Kafka Java反序列化漏洞 CVE-2023-34040

这篇具有很好参考价值的文章主要介绍了Spring boot使用Kafka Java反序列化漏洞 CVE-2023-34040。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Spring boot使用Kafka Java反序列化漏洞 CVE-2023-34040,# Spring Framework 漏洞解决,# Spring Boot 知识集锦,java,spring,kafka

0.前言

背景:公司项目扫描到 Spring-Kafka上使用通配符模式匹配进行的安全绕过漏洞 CVE-2023-20873

漏洞

中等风险 | 2023年8月23日 | CVE-2023-34040

在Spring for Apache Kafka 3.0.9及更早版本以及2.9.10及更早版本中,存在可能的反序列化攻击向量,但只有在应用了不常见的配置时才会出现。攻击者必须在反序列化异常记录头中构造一个恶意序列化对象。

spring-kafka 介绍

Spring Kafka 是 Spring 框架提供的一个库,它提供了使用 Apache Kafka 的便捷方式。Apache Kafka 是一个开源的流处理平台,主要用于构建实时数据流管道和应用。Spring Kafka 通过提供一种抽象和封装的方法,使开发者能够更容易地在 Spring 框架中使用 Apache Kafka。它大大简化了在 Spring 框架中使用 Apache Kafka 的复杂性,使得开发者可以更专注于业务逻辑的开发。

  1. 简化的 Kafka 生产者和消费者配置:Spring Kafka 提供了一套简单的方法来配置 Kafka 生产者和消费者。它提供了与 Spring Boot 的集成,使得配置更加简单。

  2. 异常处理:Spring Kafka 提供了一套机制来处理生产者和消费者在使用过程中遇到的异常,包括发送消息失败、消息格式错误等异常。

  3. 消息转换:Spring Kafka 提供了一套机制来转换 Kafka 消息,使得可以使用喜欢的数据格式(如 JSON、Avro 等)来发送和接收 Kafka 消息。

  4. 事务支持:Spring Kafka 提供了对 Kafka 事务的支持,使得可以在一个事务中发送多个 Kafka 消息。

  5. 带有回调的消息发送:Spring Kafka 提供了一种方法,可以在消息发送后获取到发送结果的回调,以便于进行进一步的处理。

1.参考文档

CVE 官方网站 https://www.cve.org/CVERecord?id=CVE-2023-34040
spring官方网站 https://spring.io/security/cve-2023-34040
Spring boot使用Kafka Java反序列化漏洞 CVE-2023-34040,# Spring Framework 漏洞解决,# Spring Boot 知识集锦,java,spring,kafka

2.基础介绍

CVE-2023-34040:当配置不当时,Spring-Kafka中的Java反序列化漏洞
中等风险 | 2023年8月23日 | CVE-2023-34040
描述
在Spring for Apache Kafka 3.0.9及更早版本以及2.9.10及更早版本中,存在可能的反序列化攻击向量,但只有在应用了不常见的配置时才会出现。攻击者必须在反序列化异常记录头中构造一个恶意序列化对象。

具体来说,当满足以下所有条件时,应用程序才会变得脆弱:

用户未为记录的键和/或值配置ErrorHandlingDeserializer
用户明确地将容器属性checkDeserExWhenKeyNull和/或checkDeserExWhenValueNull设置为true。
用户允许不受信任的源发布到Kafka主题
默认情况下,这些属性为false,且只有在配置了ErrorHandlingDeserializer时,容器才会尝试反序列化这些头。ErrorHandlingDeserializer通过在处理记录之前移除所有此类恶意头,阻止了此漏洞的发生。

受影响的Spring产品和版本
Spring for Apache Kafka
2.8.1至2.9.10
3.0.0至3.0.9

3.解决方案

3.1. 升级版本

  • 2.8.x和2.9.x的用户应升级到2.9.11
  • 3.0.x的用户应升级到3.0.10
  • 已修复此问题的版本包括:

Spring for Apache Kafka
3.0.10
2.9.11 Spring boot 3.0.10(或更高)依赖管理将自动使用Spring for Apache Kafka 3.0.10(或更高)。Spring Boot 2.7.x用户应将Boot的Spring for Apache Kafka 2.8.x依赖管理版本覆盖为2.9.11(或更高)。

3.2. 替代方案

在不使用ErrorHandlingDeserializers时,不要设置容器属性checkDeserExWhenKeyNull或checkDeserExWhenValueNull,或者使用ErrorHandlingDeserializers

4.Spring kafka 使用教程代码示例

pom.xml 文件中添加 Spring Kafka 的依赖:

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

在application.properties文件中设置Kafka的配置:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=myGroup
spring.kafka.template.default-topic=myTopic

创建一个消息生产者:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

@Service
public class KafkaProducer {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendMessage(String message) {
        kafkaTemplate.sendDefault(message);
    }
}

创建一个消息消费者:

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

@Service
public class KafkaConsumer {

    @KafkaListener(topics = "myTopic", groupId = "myGroup")
    public void listen(String message) {
        System.out.println("Received message: " + message);
    }
}

可以通过创建一个简单的REST API来测试消息的发送和接收:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/kafka")
public class KafkaController {

    @Autowired
    private KafkaProducer producer;

    @PostMapping(value = "/publish")
    public void sendMessageToKafka(@RequestBody String message) {
        this.producer.sendMessage(message);
    }
}

这个API接收一个POST请求,并将请求体中的消息发送到Kafka。文章来源地址https://www.toymoban.com/news/detail-730366.html

到了这里,关于Spring boot使用Kafka Java反序列化漏洞 CVE-2023-34040的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kafka反序列化RCE漏洞(CVE-2023-34040)

    Spring Kafka 是 Spring Framework 生态系统中的一个模块,用于简化在 Spring 应用程序中集成 Apache Kafka 的过程,记录 (record) 指 Kafka 消息中的一条记录。 受影响版本中默认未对记录配置  ErrorHandlingDeserializer ,当用户将容器属性  checkDeserExWhenKeyNull  或  checkDeserExWhenValueNull  设置为

    2024年02月06日
    浏览(28)
  • 【精选】PHP&java 序列化和反序列化漏洞

    目录 首先 其次 技巧和方法

    2024年01月23日
    浏览(41)
  • 反序列化渗透与攻防(二)之Java反序列化漏洞

    JAVA反序列化漏洞到底是如何产生的? 1、由于很多站点或者RMI仓库等接口处存在java的反序列化功能,于是攻击者可以通过构造特定的恶意对象序列化后的流,让目标反序列化,从而达到自己的恶意预期行为,包括命令执行,甚至 getshell 等等。 2、Apache Commons Collections是开源小

    2023年04月17日
    浏览(37)
  • java反序列化漏洞分析

    Java反序列化漏洞(Java Deserialization Vulnerabilities)是一种常见的安全漏洞,其攻击方式是利用Java中的序列化和反序列化机制,通过在序列化数据中插入恶意代码,导致反序列化过程中执行恶意代码。本文将介绍Java反序列化漏洞的原理、攻击方式和防范措施。 一、Java序列化和

    2024年02月13日
    浏览(37)
  • 【java安全】FastJson反序列化漏洞浅析

    0x00.前言 前面我们学习了RMI和JNDI知识,接下来我们就可以来了解一下FastJson反序列化了 0x01.FastJson概述 FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持 将JavaBean序列化为JSON字符串,也可以将JSON字符串反序列化到JavaBean 0x02.FastJson使用 首先我们需要使用

    2024年02月11日
    浏览(38)
  • Web安全--反序列化漏洞(java篇)

    序列化的意义就在于方便存储和传输,永久的保存到硬盘中,通常保存在一个文件中。 序列化:将java对象转换为字节序列的过程 反序列化:序列化的逆过程,从储存区读出字节序列还原成对象的过程 java应用在对用户的输入没有进行严格的检查时,即传入了不可信的数据做

    2024年02月09日
    浏览(40)
  • Java反序列化漏洞-URLDNS链分析

    目录 一、前置知识 反射 二、分析 1. URL 2. HashMap 3. 解决一些问题 反射修改字段值 三、POC 四、利用链 菜鸟教程 Java 序列化 Java安全-反射 URLDNS链的作用就是在目标主机中可能存在反序列化输入的数据的地方,传入序列化后的URLDNS利用链,如果目标主机解析了这个URL地址,那么

    2024年02月04日
    浏览(40)
  • Java安全研究——反序列化漏洞之CC链

    apache commons-collections组件下的反序列化漏洞,自从该组件被爆出漏洞后,许多安全研究员相继挖掘到java多种组件的漏洞,危害严重。本人也是初学Java审计不久,技术薄弱,所以在此做一个cc链的学习总结,如有错误还请大佬指出。 若本文有侵权行为,请立即私信,将全面修

    2024年02月04日
    浏览(41)
  • Java反序列化漏洞-CC1利用链分析

    目录 一、前置知识 1. 反射 2. Commons Collections是什么 3. 环境准备 二、分析利用链 1. Transformer 2. InvokeTransformer 执行命令 3. ConstantTransformer 4. ChainedTransformer 执行命令 5. TransformedMap 6. AbstractInputCheckedMapDecorator 7. AnnotationInvocationHandler 三、编写POC 1. ChainedTransformer 2. decorate 3. Annotatio

    2024年02月04日
    浏览(31)
  • 【java安全】Log4j反序列化漏洞

    关于Apache Log4j Log4j是Apache的开源项目,可以实现对System.out等打印语句的替代,并且可以结合spring等项目,实现把日志输出到控制台或文件等。而且它还可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码,满足了大多数要求。 就是用来打印日志的 漏洞成因

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包