当前位置: 首页 > news >正文

手表网站app推荐亚洲卫星电视网参数表

手表网站app推荐,亚洲卫星电视网参数表,做药公司的网站前置审批,wordpress链接设置漏洞描述 Spring Kafka 是 Spring Framework 生态系统中的一个模块,用于简化在 Spring 应用程序中集成 Apache Kafka 的过程,记录 (record) 指 Kafka 消息中的一条记录。 受影响版本中默认未对记录配置 ErrorHandlingDeserializer,当用户将容…

漏洞描述

Spring Kafka 是 Spring Framework 生态系统中的一个模块,用于简化在 Spring 应用程序中集成 Apache Kafka 的过程,记录 (record) 指 Kafka 消息中的一条记录。

受影响版本中默认未对记录配置 ErrorHandlingDeserializer,当用户将容器属性 checkDeserExWhenKeyNull 或 checkDeserExWhenValueNull 设置为 true(默认为 false),并且允许不受信任的源发布到 Kafka 主题中时,攻击者可将恶意 payload 注入到 Kafka 主题中,当反序列化记录头时远程执行任意代码。

影响版本

2.8.1 <= Spring-Kafka <= 2.9.10 3.0.0 <= Spring-Kafka <= 3.0.9

漏洞复现

这一个漏洞所影响的组件其实是 Spring-Kafka,严格意义上来说并不算是 kafka 的漏洞,应该算是 Spring 的漏洞。

漏洞前置知识

先来看一看 SpringBoot 和 Kafka 是怎么完成通讯/消费的

ac0e656d76cb236678f3e549aae13dfa.jpeg

工作流程如下

1、生产者将消息发送到 Kafka 集群中的某个 Broker(也可以是多个) 2、Kafka 集群将消息存储在一个或多个分区中,并为每个分区维护一个偏移量 3、消费者订阅一个或多个主题,并从 Kafka 集群中读取消息。4、消费者按顺序读取每个分区中的消息,并跟踪每个分区的偏移量。

  • • ErrorHandlingDeserializer:是 Kafka中的一种反序列化器(Deserializer),它可以在反序列化过程中处理异常和错误。

  • • checkDeserExWhenKeyNull && checkDeserExWhenValueNull:是 Kafka 中的一种序列化器(Serializer),它可以在序列化过程中检查键(key/value)是否为 null,并在发现值为 null 时抛出异常。

再简单整理一下漏洞条件

在受到影响的版本中,默认未对记录配置 ErrorHandlingDeserializer 容器属性 checkDeserExWhenKeyNull 或 checkDeserExWhenValueNull 设置为 true

环境搭建

其中需要我们起一个 Kafka 的服务,用来接收消息,本机上起比较麻烦,可以在 vps 上用 docker 迅速搭建,且需注意,Kafka 要能够接受外连,docker-compose.yml 如下

version: '2'services:zookeeper:image: zookeeperrestart: alwaysports:- "2181:2181"container_name: zookeeperkafka:image: wurstmeister/kafkarestart: alwaysports:- "9092:9092"- "9094:9094"depends_on:- zookeeperenvironment:KAFKA_ADVERTISED_HOST_NAME: 124.222.21.138KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,SSL://0.0.0.0:9094KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://124.222.21.138:9092,SSL://124.222.21.138:9094KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,SSL:SSLKAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXTcontainer_name: kafka

Spring Kafka 的生产者和消费者可以通过使用 Spring Kafka 提供的 KafkaTemplate 和 ``@KafkaListener` 注解来编写。

生产者可以使用 KafkaTemplate 来发送消息到 Kafka 集群:

package com.drunkbaby.springkafkatest.controller;  import com.drunkbaby.springkafkatest.common.KafkaInfo;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.kafka.core.KafkaTemplate;  
import org.springframework.kafka.support.SendResult;  
import org.springframework.util.concurrent.ListenableFuture;  
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  import java.time.LocalDateTime;  
import java.util.concurrent.ExecutionException;  @RestController  
@RequestMapping("/producer")  
public class ProducerController {  @Autowired  private KafkaTemplate<String,String> kafkaTemplate;  @PostMapping("/fireAndForget")  public String fireAndForget() {  kafkaTemplate.send(KafkaInfo.TOPIC_WELCOME, "fireAndForget:" + LocalDateTime.now());  return "success";  }  
}

消费者可以使用 @KafkaListener 注解来监听 Kafka 集群中的消息:

package com.drunkbaby.springkafkatest.consumer;  import com.drunkbaby.springkafkatest.common.KafkaInfo;  
import org.springframework.kafka.annotation.KafkaListener;  
import org.springframework.messaging.MessageHeaders;  
import org.springframework.messaging.handler.annotation.Headers;  
import org.springframework.messaging.handler.annotation.Payload;  
import org.springframework.stereotype.Component;  @Component  
public class Consumer {  @KafkaListener(topics = KafkaInfo.TOPIC_WELCOME)  public String consumer2(@Payload String message, @Headers MessageHeaders headers) {  System.out.println("消费者(注解方式):收到消息==> ");  System.out.println("  message:" + message);  System.out.println("  headers:");  headers.keySet().forEach(key -> System.out.println("    " + key + ":" + headers.get(key)));  return "success";  }

连接成功

c3be9371455daa1c760967abf3f023e5.jpeg

访问 http://localhost:8083/producer/sync 发送一条记录

20d9d14d803ee0a9bce04af0ae35336b.jpeg

构造 payload

实际影响到的是 Consumer,且 Consumer 要设置 checkDeserExWhenKeyNull 或 checkDeserExWhenValueNull 为 true

ConcurrentKafkaListenerContainerFactory<String, Greeting> factory = new ConcurrentKafkaListenerContainerFactory<>();  
factory.getContainerProperties().setCheckDeserExWhenValueNull(true);  
factory.getContainerProperties().setCheckDeserExWhenKeyNull(true);

payload 参考 https://github.com/Contrast-Security-OSS/Spring-Kafka-POC-CVE-2023-34040

漏洞分析

主要是来看反序列化的部分

断点会先走到 org.springframework.kafka.listener.ListenerUtils#getExceptionFromHeader 方法,它这里面会获取到 PoC 中的 KEY_DESERIALIZER_EXCEPTION_HEADER,并将其作为 headers

f96acd8d3b2f9bd6b71a201667fd379f.jpeg

往下跟进 byteArrayToDeserializationException() 方法,这里就直接到反序列化的部分了,而在反序列化之前做了一次 resolveClass() 的校验。

fe803b74a42c0edd519255d4195fb830.jpeg

而这里的 resolveClass() 校验是一次性的,这就代表我们可以构造其他的 Payload,如 CC 链等,证实是可以打通的

90305957c175869897d733b39fbe1138.jpeg

之后便会进入到对应类的 readObject() 方法

漏洞修复

https://github.com/spring-projects/spring-kafka/commit/25ac793a78725e2ca4a3a2888a1506a4bfcf0c9d

相当于把这里的 header 头加黑了

b9e7a49b2f07f17c0bc2eb4e1110d0a6.jpeg

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:edu@antvsion.com

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

b32ed9dd7ba2b0cca8e735d83c778b59.gif

靶场实操体验,戳“阅读原文”

http://www.dt0577.cn/news/24842.html

相关文章:

  • 素材网站有哪些建网站找哪个平台好呢
  • 专做洗衣柜的网站seo基础知识考试
  • 做体育最好的网站宁波网站关键词优化排名
  • 局域网内网站建设公司专业网站建设
  • web怎样插入自己做的网站seo是什么化学名称
  • 深圳响应式网站开发丹东seo推广优化报价
  • 网站开发兼职网站宁波seo排名优化价格
  • 数据查询网站建设黑科技引流软件是真的吗
  • 流媒体视频网站建设百度上海分公司
  • dw做网站链接数据库昆明seo
  • 明星网站策划书深圳网络推广哪家
  • 知道域名怎么进入网站怎么投稿各大媒体网站
  • 重庆做网站推广的手机上可以创建网站吗
  • 长沙营销网站建设公司cpa推广接单平台
  • 衡水企业做网站深圳sem优化
  • 怎么把自己网站推广出去搜索引擎营销实训报告
  • 做外贸推广哪个网站好优化落实防控措施
  • 个人网站可以做电商么微商引流人脉推广软件
  • 可以做微信小测试的网站百度推广登录入口
  • 如何做内部优惠券网站百度输入法
  • 个人如何做网站推广关键词seo资源
  • 舞阳网站建设靖江seo要多少钱
  • 用手机可以做网站吗如何提高网站排名
  • 网站计划任务怎么做怎样创建网站或者网址
  • 做二手房产网站多少钱百度竞价排名算法
  • html5做图网站他达拉非片和伟哥区别
  • 网站建设itcask网络营销方法有哪些举例
  • 个人微博网站设计品牌宣传策划公司
  • 手机网站需要多少钱谷歌在线搜索
  • 赣州市章贡区建设路居委会网站百度网站推广电话