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

Kafka漏洞修复之CVE-2023-25194修复措施验证

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 提供的:

    1. 数据管道服务(数据迁移、同步);

    2. Kafka 相关的测试服务(用于对 broker 的测试)

  • 前提条件

    从利用条件上,漏洞要成功用于执行任意代码,需要同时满足:

    1. 攻击者可以控制连接器(Connector)的配置;

    2. Kafka 服务能够访问攻击者控制的 LDAP 服务(通常需要能访问互联网);

    3. 基于远程 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。
    kafka消息发送流程

Linux配置加载顺序

  • 简述

    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代码 题目描述 按中序遍历和后序遍历给出一棵二叉树&#xff0c;求这棵二叉树中叶子节点权值的最小值。 输入保证叶子节点的权值各不相同。 输入 测试数据有多组 对于每组测试数据&#xff0c;首先输入一个整数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模式&#xff1a;新建的容器和已经存在的一个容器共享一个网络…...

基于jeecgboot的flowable流程增加节点自动跳过功能

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

流程引擎之Activiti简介

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

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): 涵盖各种模型简介对比&#xff0c;适合入门和了解目标检测现状) 注&#xff1a;本文仅供学习&#xff0c;未经同意勿转。分享的PPT请勿二次传播&#xff0c;或者用于其他商用途径。若使用本文PPT请注明来源&#xff0c;感谢配合 前言&…...

Vulnhub-DC-2实战靶场

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

从输入URL到渲染的过程中到底发生了什么?

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

旋转屏幕导致 Fragment 中的 onConfigurationChanged 被调用两次

环境 IDE Android Studio Dolphin 2021.3.1&#xff1b; 项目配置 Android Gradle plugin version: 7.1.3 Gradle Version: 7.2 Gradle JDK: 11 Compile Sdk Version: 32 问题描述 项目使用的 Bottom Navigation Activity 基本结构&#xff0c;在调试程序时发现&#xff0c…...

23年校招DL/NLP/推荐系统/ML/算法基础面试必看300问及答案

2020年校招已经开始了&#xff0c;在疫情全球肆虐的背景下&#xff0c;全球就业情况异常艰难&#xff0c;加上美国对中国企业打压持续升级&#xff0c;对于马上开始秋招找工作的毕业生而言&#xff0c;更是难上加难。我们不能凭一己之力改变现状&#xff0c;但我们可以凭借自己…...

Python基础知识汇总(字符串二)

目录 检索字符串 count()方法 find()方法 in关键字 index()方法 rindex()方法 startswith()方法...

【FPGA】Verilog:实现十六进制七段数码管显示 | 7-Segment Display

写在前面&#xff1a;本章主要内容为理解七点数码管显示的概念&#xff0c;并使用 Verilog 实现。生成输入信号后通过仿真确认各门的动作&#xff0c;通过 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)多版本并发控制机制使用串行化隔离级别时&#xff0c;mysql会将所有的操作加锁互斥&#xff0c;来保证并发安全。这种方式必然降低并发性能。mysql在读已提交和可重复读隔离级别下&#xff0c;对一行数据的读和写两个操作默认是不会通过…...

商用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…...

从巨头并购看FPGA技术演进与国产破局之路

1. 从两起世纪并购看FPGA的宿命与价值2015年&#xff0c;英特尔以167亿美元吞下Altera&#xff1b;2022年情人节&#xff0c;AMD用全股票交易正式将赛灵思&#xff08;Xilinx&#xff09;收入囊中。这两起震动半导体行业的并购案&#xff0c;表面看是巨头在“买公司”&#xff…...

UPS Ground运输时间估算:从纽约10013到全美各区域的实操指南

1. 物流时间估算的核心价值与挑战在电商和供应链的世界里&#xff0c;时间就是金钱&#xff0c;而运输时间则是连接承诺与现实的桥梁。无论是作为卖家管理客户预期&#xff0c;还是作为买家规划项目进度&#xff0c;一个相对准确的运输时间预估都至关重要。UPS Ground作为美国境…...

终极M3U8视频下载神器:3步搞定加密流媒体!

终极M3U8视频下载神器&#xff1a;3步搞定加密流媒体&#xff01; 【免费下载链接】m3u8-downloader 一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。 项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-do…...

Spoolman:终极3D打印线轴管理解决方案,让您的打印工作更高效 [特殊字符]

Spoolman&#xff1a;终极3D打印线轴管理解决方案&#xff0c;让您的打印工作更高效 &#x1f680; 【免费下载链接】Spoolman Keep track of your inventory of 3D-printer filament spools. 项目地址: https://gitcode.com/gh_mirrors/sp/Spoolman Spoolman是一个强大…...

Word里MathType插件报错?别慌,手把手教你搞定MathPage.wll文件丢失问题

Word里MathType插件报错&#xff1f;三步精准定位MathPage.wll文件问题 当你正全神贯注地在Word中编辑数学公式&#xff0c;突然弹出一个刺眼的错误提示&#xff1a;"无法找到MathPage.wll文件"——这种突如其来的技术故障足以打断任何人的工作节奏。作为科研工作者、…...

内容创作平台集成多个AI模型提升内容多样性的实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 内容创作平台集成多个AI模型提升内容多样性的实践 对于内容创作平台而言&#xff0c;用户的偏好千差万别&#xff0c;内容的类型也…...

2026最权威的六大AI辅助论文神器推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 飞速发展着的人工智能技术&#xff0c;在学术领域里应用变得越发广泛&#xff0c;特别是在毕…...

STM32CubeMX生成代码后,Keil编译烧写的那些“隐藏”步骤与调试器避坑

STM32CubeMX生成代码后&#xff0c;Keil编译烧写的那些“隐藏”步骤与调试器避坑 当你用STM32CubeMX生成代码后&#xff0c;以为万事大吉&#xff0c;结果在Keil里编译烧写时却频频碰壁——这几乎是每个STM32开发者都会经历的“成人礼”。那些教程里一笔带过的“编译”、“烧写…...

D2RML:暗黑破坏神2重制版多开终极指南,告别繁琐登录流程

D2RML&#xff1a;暗黑破坏神2重制版多开终极指南&#xff0c;告别繁琐登录流程 【免费下载链接】D2RML Diablo 2 Resurrected Multilauncher 项目地址: https://gitcode.com/gh_mirrors/d2/D2RML 还在为暗黑破坏神2重制版的多账户切换而烦恼吗&#xff1f;每次登录战网…...

声明式工作流编排框架:从计划到执行的自动化实践

1. 项目概述&#xff1a;从“计划清单”到“框架”的蜕变如果你和我一样&#xff0c;在职业生涯中经历过从零到一构建复杂应用&#xff0c;或者维护过多个技术栈各异、需求多变的项目&#xff0c;那你一定对“计划”和“清单”这两个词深有感触。我们每天都在做计划&#xff0c…...