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及後續版本已經修複了該漏洞,無需手動修複。
修複流程
根據Kafka所在的叢集類型不同,修複方式也會有所不同。
即時資料流(DataFlow)
下載修複漏洞後的Kafka軟體版本。
登入叢集的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.gzEMR-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-currentEMR-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軟體包。
否:無需修複。
登入叢集的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(Object Storage Service服務)的內網地址。例如,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。
執行時間
選擇組件安裝前。
相關文檔
叢集擴容詳情,請參見擴容叢集。