文档

漏洞公告 | Apache Kafka Connect远程代码执行漏洞

更新时间:

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)

  1. 下载修复漏洞后的Kafka软件版本。

  2. 登录集群的Master节点,并上传前一步骤中下载的软件包到/opt/apps/KAFKA/目录下。

    登录集群详情,请参见登录集群

  3. 执行以下命令,将安装包复制到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/
  4. 执行以下命令,登录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
  5. 执行以下命令,创建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
  6. 在EMR控制台Kafka服务的状态页签,重启当前Core节点的KafkaBroker组件。

    image

    重要

    此处无需重启整个Kafka服务,只需重启当前升级节点的KafkaBroker即可。

  7. 等待重启完成后,请确认core-1-1节点的Kafka服务正常后,再进行下一步操作。

  8. 重复步骤3~步骤7,替换当前集群所有Core节点的Kafka软件包。

Kafka(仅对存量用户开放)

  1. 请确认当前集群中的Kafka版本是否为2.4.1(可通过查看/usr/lib/kafka-current目录是否链接到kafka-2.12.-2.4.1-xxx的目录来确认)。

  2. 登录集群的Master节点,并将上一步骤中下载的软件包放在hadoop用户的/usr/lib/目录下。

    登录集群详情,请参见登录集群

  3. 执行以下命令,将安装包复制到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/
  4. 执行以下命令,登录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
  5. 执行以下命令,创建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
  6. 在EMR控制台Kafka服务的状态页签,重启当前Core节点的KafkaBroker组件。

    重要

    此处无需重启整个Kafka服务,只需重启当前升级节点的KafkaBroker即可。

  7. 等待重启完成后,请确认worker-1-1节点的Kafka服务正常后,再进行下一步操作。

  8. 重复步骤3~步骤7,替换当前集群所有Kafka节点的Kafka软件包。

(可选)后续运维

如果集群后续需要扩容Kafka Broker,则可以按照上述步骤对新增的Core节点进行修复操作。另外,您也可以利用EMR集群脚本功能,在扩容过程中对新增节点进行漏洞修复。

  1. 上传Kafka软件包到OSS控制台,详情请参见简单上传

    例如,将软件包kafka-2.12-2.4.1-1.1.5.tar.gz上传到oss://emr-kafka-software/下。

  2. 制作脚本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。

  3. 添加引导脚本。

    在EMR控制台添加引导操作,详情请参见管理引导操作

    参数

    说明

    脚本位置

    选择upgrade_kafka_software.sh脚本的位置。

    执行范围

    选择节点组,勾选emr-core

    执行时间

    选择组件安装前

相关文档

集群扩容详情,请参见扩容集群