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。
執行時間
選擇組件安裝前。
相關文檔
集群擴容詳情,請參見擴容集群。