可以做渗透测试的网站/陕西seo公司
Kafka漏洞修复之CVE-2023-25194修复措施验证
- 前言
- 风险分析
- 解决方案
- AdoptOpenJDK + Zookeeper + Kafka
- 多版本OpenJDK安装切换
- Zookeeper安装
- Kafka安装与使用
- 其他
- Kafka消息发送流程
- Linux配置加载顺序
- 参考链接
前言
-
场景介绍
Kafka最近爆出高危漏洞CNNVD-202302-515,导致Apache Kafka Connect 服务在 2.3.0 至 3.3.2 版本中,由于连接时支持使用基于 JNDI 认证的 SASL JAAS 配置,导致配置在被攻击者可控的情况下,可能通过 JNDI 注入执行任意代码。
此漏洞不影响 Kafka server (broker),Kafka Connect 服务通常用于在云平台中提供 Kafka 数据迁移、数据同步的管道能力,其默认 HTTP API 开放于 8083 端口。
-
补充
Apache Kafka Connect 是 Kafka 中用于和其他数据系统传输数据的服务,其独立运行版本可以在 Kafka 发布包中通过 bin/connect-standalone.sh 启动,默认会在 8083 端口开启 HTTP REST API 服务,可对连接器(Connector)的配置进行操作。
风险分析
-
业务场景
受漏洞影响的通常是基于 Kafka Connect 提供的:
-
数据管道服务(数据迁移、同步);
-
Kafka 相关的测试服务(用于对 broker 的测试)
-
-
前提条件
从利用条件上,漏洞要成功用于执行任意代码,需要同时满足:
-
攻击者可以控制连接器(Connector)的配置;
-
Kafka 服务能够访问攻击者控制的 LDAP 服务(通常需要能访问互联网);
-
基于远程 LDAP 引用注入需要 java 版本小于 11.0.1、8u191、7u201、6u211,本地则需要其 classpath 中加载了可以用于构造利用链的类。
-
解决方案
-
升级kafka至3.4.0
从 Apache Kafka 3.4.0 开始,添加了一个系统属性(“-Dorg.apache.kafka.disallowed.login.modules”) 禁用在 SASL JAAS 配置中使用有问题的登录模块。也由默认“com.sun.security.auth.module.JndiLoginModule”被禁用在 Apache Kafka 3.4.0 中。
注意:可使用kraft方式替换zookeeper
-
升级JDK版本
由于Oracle JDK后期开始收费,所以考虑采用AdoptOpenJDK替换使用,以jdk8为例,升级至8u362,并结合2.3.0 至 3.4.0中的任一版本是否正常运行。
本文主要结合该场景进行验证,这样升级代价更小。
AdoptOpenJDK + Zookeeper + Kafka
-
概述
跳过已经安装的Oracle JDK8和Zookeeper,下文不在赘述,主要在Linux环境下配置多版本JDK,并启用OpenJDK,最后安装Kafka验证。
OpenJDK1.8.0_362 + Zookeeper3.6.3 + Kafka3.4.0
多版本OpenJDK安装切换
-
安装OpenJDK8
# 切换至非root用户su xxxx# 解压jdk tomcat至相关目录tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u362b09.tar.gz -C /opt/nbsp/java/openjdk1.8.0_362# 配置环境变量vi /etc/profile# 安装jdk1.8 export OPEN_JAVA_HOME=/opt/nbsp/java/openjdk1.8.0_362export CLASSPATH=.:${OPEN_JAVA_HOME}/lib/dt.jar:${OPEN_JAVA_HOME}/lib/tools.jarexport PATH=$PATH:${OPEN_JAVA_HOME}/bin# 配置生效source /etc/profile# 验证java -version
-
切换不同版本JDK
# 发现并不是新安装的jdk版本,使用命令更改当前系统使用的jdk版本alternatives --config java# 如果没有新安装的版本jdk,需要使用命令将新安装的jdk放入到java bin中alternatives --install /usr/bin/java java /opt/nbsp/java/openjdk1.8.0_362/bin/java 2alternatives --install /usr/bin/java java /opt/nbsp/java/jdk1.8.0_191/bin/java 3# 如果设置路径错了,可以使用 以下命令 删除一些 错误的 程序选择路劲alternatives --remove java /opt/nbsp/java/openjdk1.8.0_362/bin
Zookeeper安装
-
主要过程
zookeeper之前已经安装过,本文直接略过。下面是常用启停命令
# 启动zookeeper(进入对应的新版本目录)bin/zkServer.sh start# 查看zookeeper状态(进入对应的新版本目录)bin/zkServer.sh status# 停止zookeeper(进入对应的新版本目录)bin/zkServer.sh stop
Kafka安装与使用
-
安装Kafka
# 创建文件夹kafkamkdir /home/nbsp/java/kafka# 解压压缩包到 /usr/kafka目录下tar -zxvf kafka_2.13-3.4.0.tgz -C /home/nbsp/java/kafka/# 创建日志文件夹 kafka-logsmkdir /home/nbsp/java/kafka/kafka_2.13-3.4.0/kafka-logs# 修改kafka的配置文件vim bin/config/server.properties#broker.id=0#log.dirs=/usr/local/kafka/kafka_2.12-2.2.0/kafka-logs#zookeeper.connect=localhost:2181#delete.topic.enble=true#advertised.listeners=PLAINTEXT://localhost:9092
-
配置环境变量
方式一:修改/etc/profile
# 修改 profile 文件 (我使用的该方法,也推荐用这一种,两钟区别需自行查阅相关资料)vim /etc/profile#export KAFKA_HOME=/home/nbsp/java/kafka/kafka_2.13-3.4.0#export PATH=KAFKA_HOME/bin:$PATH# 使配置生效source /etc/profile
方式二:修改 .bashrc 文件
# 输入命令修改环境变量vim ~/.bashrc# 直接在最下面添加下面这些配置# export KAFKA_HOME=/usr/local/kafka/kafka_2.13-3.4.0# export PATH=KAFKA_HOME/bin:$PATH# 使配置生效source ~/.bashrc
-
启动kafka
# 查看当前zookeeper状态/home/nbsp/java/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status# 启动kafka(在 kafka 的根目录下使用命令)./bin/kafka-server-start.sh config/server.properties &# 停止kafka# ./bin/kafka-server-start.sh config/server.properties &
-
创建Topic
# 创建topic(必须指定bootstrap-server)./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 1 --replication-factor 1 --topic nbsp# 查看 kafka 的 topic 情况./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list # 描述 topic,查看topic的详细信息bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic nbsp
-
消息生产消费
# 生产消息,生产者客户端命令,在 kafka 的根目录下使用命令./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic nbsp# bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic nbsp# 消费消息,消费者客户端命令,在 kafka 的根目录下使用命令./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic nbsp --from-beginning# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic nbsp
-
删除topic
./bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic nbsp
-
注意事项
注意:kafka在启动服务之前,在server.properties文件中要设定3个参数:broker.id、log.dirs、zookeeper.connect
-
主要参数
delete.topic.enble=true :对以后删除kafka中的topic有影响,在文件尾部添加上即可
listeners=PLAINTEXT://:9092 :这个命令也很重要,需要记住(这个命令在文章里先不做分析)
advertised.listeners=PLAINTEXT://localhost:9092:这个localhost我用的是主机ip地址
-
常见问题
不同版本创建topic区别
# kafka3.0.0及以上需要指定bootstrap-server,且剔除zookeeper参数(因为可以使用kraft替代zookeeper)./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 1 --replication-factor 1 --topic nbsp# kafka3.0.0以下./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic nbsp
其他
Kafka消息发送流程
-
原理分析
在消息发送的过程中,涉及到了两个线程:main 线程和 Sender 线程。
main 线程中创建了一个双端队列 RecordAccumulator,main 线程将消息发送给 RecordAccumulator;
Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka Broker。
Linux配置加载顺序
-
简述
-
登录式方式 shell
/etc/profile -> /etc/profile.d目录下脚本文件 -> $HOME/.bash_profile(用户环境变量文件) -> $HOME/.bashrc(用户环境变量文件)-> /etc/bashrc(全局环境变量文件)
/etc/profile > /etc/profile.d/*.sh , /etc/profile.d/sh.local > ~/.bash_profile > ~/.bashrc > ~/.bash_login > ~/.profile >
-
非登录式 Shell
只会加载$HOME/.bashrc(用户环境配置文件) -> /etc/bashrc(全局环境变量文件)
如果以非登录的方式启动 Shell,那么就不会读取以上所说的配置文件,而是直接读取 ~/.bashrc。
所以一般建议将配置直接添加在 ~/.bashrc 中,这样不管是登录式 Shell 还是 非登录式 Shell 都可以读到。
-
/etc/profile源码解析
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; doif [ -r "$i" ]; thenif [ "${-#*i}" != "$-" ]; then. "$i"else. "$i" >/dev/nullfifidone# $- 显示shell使用的当前选项# $* 这个程式的所有参数,此选项参数可超过9个。# $# 这个程式的参数个数
遍历 /etc/profile.d 目录下所有以 .sh 结尾的文件和 sh.local 文件。判断它们是否可读([ -r “$i”]),如果可读,判断当前 Shell启动方式是不是交互式($- 中包含 i)的,如果是交互式的,在当前 Shell 进程中执行该脚本(. “$i”,source “$i” 的简写, Shell 的模块化方式),否则,也在当前 Shell 进程中执行该脚本,只不过将输出重定向到了 /dev/null 中。
${-#*i} 这个表达式的意思是:从左向右,在 - 变量中找到第一个 i ,并截取 i 之后的子串。
参考链接
-
Apache Kafka Connect JNDI注入漏洞(CVE-2023-25194)安全风险通告
-
Apache Kafka Connect 模块 JNDI 注入(CVE-2023-25194)
-
Kafka在Linux下载安装及部署
-
Linux下安装JDK(多个版本) 切换
-
Linux安装JDK,并配置多个JDK切换
-
Linux中配置文件加载顺序
-
/etc/bashrc和/etc/profile
-
linux环境变量文件区别&加载顺序
-
Linux安装Kafka
-
Kafka3.0.0教程(从入门到调优,深入全面)
相关文章:

Kafka漏洞修复之CVE-2023-25194修复措施验证
Kafka漏洞修复之CVE-2023-25194修复措施验证前言风险分析解决方案AdoptOpenJDK Zookeeper Kafka多版本OpenJDK安装切换Zookeeper安装Kafka安装与使用其他Kafka消息发送流程Linux配置加载顺序参考链接前言 场景介绍 Kafka最近爆出高危漏洞CNNVD-202302-515,导致Apa…...

中后序遍历构建二叉树与应用I
目录 题目描述 思路分析 AC代码 题目描述 按中序遍历和后序遍历给出一棵二叉树,求这棵二叉树中叶子节点权值的最小值。 输入保证叶子节点的权值各不相同。 输入 测试数据有多组 对于每组测试数据,首先输入一个整数N (1 < N < 10000)&#x…...

随机退化模型--基础篇(1)
随机退化模型--基础篇(1) 1. 随机退化建模1.1 瞬间失效1.2 存在缓慢退化过程的失效2. 通俗解释2.1 包引入2.2 参数定义2.3 基于递归函数的更新2.4 结果可视化1. 随机退化建模 随机模型亦称“非确定的、概率的模型”,是按随机变量建立的模型。其特点是; 模型参数、模拟对象发…...

2023.2.15工作学习记录 git Docker compose容器编排
关于Git错误提交了target目录 是因为在ignore目录中没有加入biz这个工程 以后提交代码时一定要检查好自己提交的代码 首先把所有的全部取消 然后再根据自己要提交的内容一个个来勾选 Docker网络 container模式:新建的容器和已经存在的一个容器共享一个网络…...

基于jeecgboot的flowable流程增加节点自动跳过功能
为了满足有时候需要在某个节点没有人员处理的时候需要自动跳过,所以增加了这个功能。 一、FlowComment意见里增加一个类型8,跳过流程 /** * 流程意见类型 * */ public enum FlowComment { /** * 说明 */ NORMAL("1", "…...

流程引擎之Activiti简介
背景Activiti 是一个开源架构的工作流引擎,基于 bpmn2.0 标准进行流程定义,其前身是 jBPM,Activiti 相对于 jBPM 更轻量,更易上手,且天然集成了 Spring。2010年 jBPM 创始人 Tom Baeyens 离开 JBoss,随之加…...

4.打包子应用 投票
接上回 最终得到这样的目录 mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.pypolls/__init__.pyadmin.pyapps.pymigrations/__init__.py0001_initial.pymodels.pystatic/polls/images/background.gifstyle.csstemplates/polls/detail.htmlindex.htmlresult…...

华为OD机试 - 服务依赖(JavaScript) | 机试题算法思路 【2023】
服务依赖 题目 在某系统中有众多服务,每个服务用字符串(只包含字母和数字,长度<=10)唯一标识,服务间可能有依赖关系,如A依赖B,则当B故障时导致A也故障。 传递具有依赖性,如A依赖B,B依赖C,当C故障时导致B故障,也导致A故障。给出所有依赖关系以及当前已知故障服务…...

目标检测综述(一份全的自制PPT): 涵盖各种模型简介对比,适合入门和了解目标检测现状
[TOC](目标检测综述(一份全的自制PPT): 涵盖各种模型简介对比,适合入门和了解目标检测现状) 注:本文仅供学习,未经同意勿转。分享的PPT请勿二次传播,或者用于其他商用途径。若使用本文PPT请注明来源,感谢配合 前言&…...

Vulnhub-DC-2实战靶场
Vulnhub-DC-2实战靶场 https://blog.csdn.net/ierciyuan/article/details/127560871 这次试试DC-2,目标是找到官方设置的5个flag。 一. 环境搭建 1. 准备工具 虚拟机Kali: 自备,我的kali的IP为192.168.3.129 靶场机: https…...

从输入URL到渲染的过程中到底发生了什么?
CDN缓存DNSTCP三次握手、四次挥手浏览器渲染过程输入URL到页面渲染过程的一些优化 下面我将“从输入URL到渲染的全过程”大概的描述出来,再对其过程加以解释,了解过程中可以做哪些优化。文章内容有点长,需要有足够的耐心看完哟!&…...

旋转屏幕导致 Fragment 中的 onConfigurationChanged 被调用两次
环境 IDE Android Studio Dolphin 2021.3.1; 项目配置 Android Gradle plugin version: 7.1.3 Gradle Version: 7.2 Gradle JDK: 11 Compile Sdk Version: 32 问题描述 项目使用的 Bottom Navigation Activity 基本结构,在调试程序时发现,…...

23年校招DL/NLP/推荐系统/ML/算法基础面试必看300问及答案
2020年校招已经开始了,在疫情全球肆虐的背景下,全球就业情况异常艰难,加上美国对中国企业打压持续升级,对于马上开始秋招找工作的毕业生而言,更是难上加难。我们不能凭一己之力改变现状,但我们可以凭借自己…...

Python基础知识汇总(字符串二)
目录 检索字符串 count()方法 find()方法 in关键字 index()方法 rindex()方法 startswith()方法...

【FPGA】Verilog:实现十六进制七段数码管显示 | 7-Segment Display
写在前面:本章主要内容为理解七点数码管显示的概念,并使用 Verilog 实现。生成输入信号后通过仿真确认各门的动作,通过 FPGA 检查在 Verilog 中实现的电路的操作。 Ⅰ. 前置知识 七段数码管是利用多重输出功能的非常有用的元件。该元件用于字…...

Android开发:Activity启动模式
1.怎样设置Activity的启动模式 可以在清单文件中自己添加活动的启动模式, android : launchMode"standard", 不写的话系统默认就是标准模式. 2.启动模式 2.1.默认启动模式 标准启动模式就是栈, 打开一个活动就将活动压入栈中, 返回就将活动退出栈中. 不同的Activit…...

01_Docker 简介
01_Docker 简介 文章目录01_Docker 简介1.1 Docker 简介1.2 Docker 组件1.2.1 Docker 客户端和服务区1.2.2 Docker 镜像1.2.3 Registry1.2.4 Docker 容器参考资料https://www.runoob.com/docker/ubuntu-docker-install.html 1.1 Docker 简介 Docker 是一个能够把开发的应用程…...

一文精通MVCC机制
MVCC(Multi-Version Concurrency Control)多版本并发控制机制使用串行化隔离级别时,mysql会将所有的操作加锁互斥,来保证并发安全。这种方式必然降低并发性能。mysql在读已提交和可重复读隔离级别下,对一行数据的读和写两个操作默认是不会通过…...

商用ESP32协议采集器源码分享开篇
这是一个关于chatGPT帮助嵌入式程序员开发商业项目的故事. 在开发这个项目的过程中,chatGPT发布了,在它的帮助下,项目开发量减少了10%,所以这个专栏,既是一个关于Micropython开发ESP32的专栏,也是一个程序员在AI的帮助下,提升效率,加速挣钱的案例. 看完之后,你将知道如何用mic…...

代码随想录算法训练营第三十四天 | 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
一、参考资料柠檬水找零https://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html 根据身高重建队列 https://programmercarl.com/0406.%E6%A0%B9%E6%8D%AE%E8%BA%AB%E9%AB%98%E9%87%8D%E5%BB%BA%E9%98%9F%E5%88%97.html 用最少数量的箭引爆气球ht…...

DDR4介绍01
DDR4(第四代双倍数据率同步动态随机存储器SDRAM) 关于内存方面知识,大部分人、包括我自己也不是很懂,希望此篇文章能起到点作用,做硬件的就得把相关专业知识学牢了,尤其是专业术语。 下面是DDR4知识做一次…...

扫地机器人行业投资逻辑:国内以价换量元年,海外需求企稳回升
1、国内以价换量元年,投资逻辑由产品迭代转向行业的渗透率提升 2019-2022 年国内扫地机行业主要的投资逻辑是产品迭代的价增带动销额增长。 2019-2022 年国内热销的扫地机产品从单机向自清洁扫地机、全能基站扫地机持续迭 代升级,产品功能日益完善、瞄准用户痛点更新,真正实…...

(考研湖科大教书匠计算机网络)第四章网络层-第七节:IPv4数据报首部格式
获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:IP数据报首部格式概述二:各字段作用概述(1)版本(2)首部长度和可选字段(3&am…...

每天10个前端小知识 【Day 18】
前端面试基础知识题 1.如何实现单行/多行文本溢出的省略样式? 在日常开发展示页面,如果一段文本的数量过长,受制于元素宽度的因素,有可能不能完全显示,为了提高用户的使用体验,这个时候就需要…...

【Java集合类】ArrayList
内部结构 ArrayList内部核心是一个Object数组elementDataObject数组的长度(length)视为ArrayList当前的容量(capacity)size对象表示ArrayList当前的元素个数 类上的重要注释 内部是Object数组 允许put null值,会自动扩容 size、…...

页面置换算法
页面置换算法 在进程运行过程中,若需要访问的物理块不在内存中,就需要通过一定的方式来将页面载入内存,而此时内存很可能已无空闲空间,因此就需要一定的算法来选择内存中要被置换的页面,这种算法就被称为页面置换算法…...

算法导论【在线算法】—The Ski-Rental Problem、The Lost Cow Problem、The Secretary Problem
算法导论【在线算法】The Ski-Rental Problem问题描述在线算法证明The Lost Cow Problem问题描述在线算法类似问题—寻宝藏The Secretary Problem问题描述在线算法The Best Possible kThe Ski-Rental Problem 问题描述 假设你正在上滑雪课。每节课结束后,你决定&a…...

linux 下怎样给pdf 文件加书签
linux 下怎样给pdf 文件加书签 对于没有书签的pdf文件,怎样给pdf加标签呢? 以方便阅读. 以前总是要借助windows下pdf 工具, 叫什么来者? 忘了 记得是编辑一个用tab表示目录级别的文本文件, 有一种直观的感觉,大目录下嵌套着小目录 ..., 然后导入到文件中 linux 下有没有这种…...

[软件工程导论(第六版)]第2章 可行性研究(课后习题详解)
文章目录1. 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?2. 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名…...

[软件工程导论(第六版)]第3章 需求分析(课后习题详解)
文章目录1. 为什么要进行需求分析?通常对软件系统有哪些需求?2. 怎样与用户有效地沟通以获取用户的真实需求?3. 银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员输入系统,如果是存款则系统记录…...