2023年02月08日,Apache发布了一则安全公告,修复了Apache Kafka中存在的一个反序列化漏洞,漏洞编号为CVE-2023-25194。在攻击者可以控制Apache Kafka Connect客户端的情况下,通过SASL JAAS配置和基于SASL的安全协议,在其上创建或修改连接器,从而触发JNDI代码执行漏洞。
漏洞影响
漏洞影响的Kafka版本:2.3.0 <= Apache Kafka <= 3.3.2
受漏洞影响的EMR产品版本:
EMR 5.x系列:EMR-5.16.0之前版本
EMR 3.x系列:EMR-3.50.0之前版本
说明EMR-3.50.0及后续版本,EMR-5.16.0及后续版本已经修复了该漏洞,无需手动修复。
关于该漏洞的详细信息,请参见Apache Kafka Connect 远程代码执行漏洞(CVE-2023-25194)。
修复流程
根据Kafka所在的集群类型不同,修复方式也会有所不同。
实时数据流(DataFlow)
下载修复漏洞后的Kafka软件版本。
EMR-5.16.0(EMR 5.x系列)之前的版本:下载kafka-2.13-3.6.1-1.0.0.tar.gz。
EMR-3.50.0(EMR 3.x系列)之前的版本:下载kafka-2.12-2.4.1-1.1.5.tar.gz。
登录集群的Master节点,并上传前一步骤中下载的软件包到
/opt/apps/KAFKA/
目录下。登录集群详情,请参见登录集群。
执行以下命令,将安装包复制到core-1-1节点的
/opt/apps/KAFKA/
目录下。EMR-5.16.0(EMR 5.x系列)之前的版本
sudo su - emr-user ssh core-1-1 'sudo chmod a+w /opt/apps/KAFKA' scp /opt/apps/KAFKA/kafka-2.13-3.6.1-1.0.0.tar.gz core-1-1:/opt/apps/KAFKA/
EMR-3.50.0(EMR 3.x系列)之前的版本
sudo su - emr-user ssh core-1-1 'sudo chmod a+w /opt/apps/KAFKA' scp /opt/apps/KAFKA/kafka-2.12-2.4.1-1.1.5.tar.gz core-1-1:/opt/apps/KAFKA/
执行以下命令,登录core-1-1节点,解压Kafka软件包。
EMR-5.16.0(EMR 5.x系列)之前的版本
ssh core-1-1 sudo su - kafka cd /opt/apps/KAFKA/ #新建目录并解压文件。 sudo mkdir kafka-2.13-3.6.1-1.0.0 sudo chown kafka:hadoop kafka-2.13-3.6.1-1.0.0 tar xvf kafka-2.13-3.6.1-1.0.0.tar.gz
EMR-3.50.0(EMR 3.x系列)之前的版本
ssh core-1-1 sudo su - kafka cd /opt/apps/KAFKA/ #新建目录并解压文件。 sudo mkdir kafka-2.12-2.4.1-1.1.5 sudo chown kafka:hadoop kafka-2.12-2.4.1-1.1.5 tar xvf kafka-2.12-2.4.1-1.1.5.tar.gz
执行以下命令,创建link文件。
EMR-5.16.0(EMR 5.x系列)之前的版本
sudo rm -f kafka-current sudo ln -s /opt/apps/KAFKA/kafka-2.13-3.6.1-1.0.0 kafka-current
EMR-3.50.0(EMR 3.x系列)之前的版本
sudo rm -f kafka-current sudo ln -s /opt/apps/KAFKA/kafka-2.12-2.4.1-1.1.5 kafka-current
在EMR控制台Kafka服务的状态页签,重启当前Core节点的KafkaBroker组件。
重要此处无需重启整个Kafka服务,只需重启当前升级节点的KafkaBroker即可。
等待重启完成后,请确认core-1-1节点的Kafka服务正常后,再进行下一步操作。
Kafka(仅对存量用户开放)
请确认当前集群中的Kafka版本是否为2.4.1(可通过查看
/usr/lib/kafka-current
目录是否链接到kafka-2.12.-2.4.1-xxx
的目录来确认)。是:单击kafka-2.12-2.4.1-1.1.5.tar.gz,下载修复漏洞后的Kafka软件包。
否:无需修复。
登录集群的Master节点,并将上一步骤中下载的软件包放在hadoop用户的
/usr/lib/
目录下。登录集群详情,请参见登录集群。
执行以下命令,将安装包复制到worker-1-1节点。
su - hadoop scp /usr/lib/kafka-2.12-2.4.1-1.1.5.tar.gz work-1-1:/tmp/ ssh worker-1-1 sudo cp /tmp/kafka-2.12-2.4.1-1.1.5.tar.gz /usr/lib/
执行以下命令,登录worker-1-1节点,解压Kafka软件包。
su - hadoop ssh work-1-1 sudo su - kafka sudo mkdir kafka-2.12-2.4.1-1.1.5 sudo chown kafka:hadoop kafka-2.12-2.4.1-1.1.5 tar xvf kafka-2.12-2.4.1-1.1.5.tar.gz
执行以下命令,创建link文件。
cd /usr/lib/ sudo rm -f kafka-current sudo ln -s /usr/lib/kafka-2.12-2.4.1-1.1.5 kafka-current
在EMR控制台Kafka服务的状态页签,重启当前Core节点的KafkaBroker组件。
重要此处无需重启整个Kafka服务,只需重启当前升级节点的KafkaBroker即可。
等待重启完成后,请确认worker-1-1节点的Kafka服务正常后,再进行下一步操作。
(可选)后续运维
如果集群后续需要扩容Kafka Broker,则可以按照上述步骤对新增的Core节点进行修复操作。另外,您也可以利用EMR集群脚本功能,在扩容过程中对新增节点进行漏洞修复。
上传Kafka软件包到OSS控制台,详情请参见简单上传。
例如,将软件包kafka-2.12-2.4.1-1.1.5.tar.gz上传到
oss://emr-kafka-software/
下。制作脚本upgrade_kafka_software.sh,并将其上传到OSS,以供后续添加引导操作时使用。
#!/bin/bash sudo su - kafka #upgrade_kafka_software.sh #pls update the vars before use: #KAFKA_HOME,OSS_HOST,OSS_AK,OSS_SK,OSS_DIR,OSS_FILE KAFKA_HOME="/opt/apps/KAFKA" OSS_HOST=<yourEndPoint> OSS_AK=<yourAccessKeyId> OSS_SK=<yourAccessKeySecret> #yourOssDir, e.g.:emr-kafka-software OSS_DIR=<yourOssDir> #change to your kafka version OSS_FILE=<yourOssFile> if [ -f ${KAFKA_HOME}/${OSS_FILE} ]; then echo "file exist, no action to do" exit 0 fi sudo /usr/local/bin/ossutil64 -i $OSS_AK -k $OSS_SK -e $OSS_HOST cp oss://${OSS_DIR}/${OSS_FILE} ${KAFKA_HOME}/${OSS_FILE} cd ${KAFKA_HOME} #change to your kafka version sudo mkdir kafka-2.12-2.4.1-1.1.5 #change to your kafka version sudo chown kafka:hadoop kafka-2.12-2.4.1-1.1.5 tar xvf kafka-2.12-2.4.1-1.1.5.tar.gz sudo rm -f kafka-current sudo ln -s /opt/apps/KAFKA/kafka-2.12-2.4.1-1.1.5 kafka-current exit 0
涉及以下参数,请根据实际情况替换。
说明创建的新目录名称应与Kafka软件包名称相对应。在本示例中,创建的新目录名称为
kafka-2.12-2.4.1-1.1.5
,您可以根据实际情况进行替换。参数
说明
KAFKA_HOME
Kafka软件包的存放目录。
OSS_HOST
阿里云OSS(对象存储服务)的内网地址。例如,oss-cn-hangzhou-internal.aliyuncs.com。
OSS_AK
阿里云OSS的AccessKey ID和AccessKey Secret。
创建和查看AccessKey操作详情,请参见创建AccessKey。
OSS_SK
OSS_DIR
阿里云OSS Bucket中的目录路径,请替换为您实际存放Kafka安装包所在的目录。例如,
oss://emr-kafka-software/
。OSS_FILE
阿里云OSS上Kafka安装包的文件名,请替换为您下载的具体Kafka版本的压缩包名称。例如,kafka-2.12-2.4.1-1.1.5.tar.gz。
添加引导脚本。
在EMR控制台添加引导操作,详情请参见管理引导操作。
参数
说明
脚本位置
选择upgrade_kafka_software.sh脚本的位置。
执行范围
选择节点组,勾选emr-core。
执行时间
选择组件安装前。
相关文档
集群扩容详情,请参见扩容集群。