2022年8月4日,Apache Hadoop官方披露修復了一個Shell命令注入漏洞CVE-2022-25168。由于Apache Hadoop的FileUtil.unTar API在傳遞Shell之前未對輸入的文件名進行轉義,攻擊者可以利用該漏洞注入任意命令,從而對集群造成破壞。
漏洞影響
漏洞影響的Hadoop版本:
2.0.0 <= Apache Hadoop <= 2.10.1
3.0.0-alpha <= Apache Hadoop <= 3.2.3
3.3.0 <= Apache Hadoop <= 3.3.2
漏洞影響的EMR版本:存量集群的EMR 3.x系列、EMR 4.x系列、EMR 5.x系列(EMR-5.8.x及之前的版本)均受到影響。
缺陷嚴重程度:該漏洞被評估為高危漏洞,需要盡快修復。
關于該漏洞的詳細信息,請參見阿里云漏洞庫說明Apache Hadoop FileUtil.unTar 命令注入漏洞(CVE-2022-25168)。
修復流程
EMR集群
單擊hadoop-patches-tools.zip下載patch包。
登錄EMR集群的Master節點,并將上一步驟中下載的patch包放在emr-user用戶或hadoop用戶的HOME目錄下。
執行以下命令,切換用戶并解壓縮hadoop-patches-tools.zip包。
數據湖(DataLake)、實時數據流(DataFlow)、數據分析(OLAP)、數據服務(DataServing)和自定義場景的集群
su emr-user unzip hadoop-patches-tools.zip
其余集群
su hadoop unzip hadoop-patches-tools.zip
執行以下命令,進入hadoop-patches-tools目錄,然后編輯hosts文件。
cd hadoop-patches-tools vim hosts
添加集群所有節點的host name,文件內容以行分割。hosts文件內容示例如下。
emr-header-1 emr-worker-1 emr-worker-2
重要對于EMR 3.x系列中EMR-3.41及之后的版本,EMR 5.x系列中EMR-5.7.0及之后的版本集群,hostname已經發生了變化,hosts文件內容示例如下。
core-1-1 core-1-2 task-1-1 task-1-2
通過fix.sh腳本執行修復操作。
./fix.sh
腳本執行完成后,返回如下提示信息。
### NOTICE: YOU CAN RESTORE THIS PATCH BY RUN RESTORE SCRIPT ABOVE $> sh ./restore.sh 20221024160338 ### DONE
如果您需要將上述修復過程進行回滾,可以執行以下命令。
sh ./restore.sh 20221024160338
最后可以執行
./check.sh
命令來驗證修復過程是否完成。如果修復完成,則返回以下提示信息。
******************************************************************** OK: CVE-2022-25168 is already fixed. This tools updated at 2022/10/13. ********************************************************************
重要本修復方式是替換源碼修改后的同命名JAR,云安全中心是通過版本號檢查該漏洞,此時忽略該漏洞檢查即可。
重啟服務。
HDFS、Hive、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark和Zeppelin等組件需要重啟之后才能完全修復漏洞,為減少對業務的影響,請盡量一臺節點一臺節點的執行重啟操作。
以HDFS組件為例,在EMR集群的HDFS服務頁面,選擇右上角的
。
Gateway集群
由于該方案依賴于SSH免密登錄,對于Gateway集群,您需要手動將patch包上傳到Gateway集群的每一個節點,并按EMR集群的修復流程分別執行修復操作。
patch包中的hosts文件只需要填寫當前執行節點的
hostname
。由于Gateway集群中沒有組件進程,上傳patch包后,無需進行服務重啟操作。
新建集群和擴容已有集群
新建EMR集群時在EMR控制臺添加引導操作,或擴容已有集群時可以自動修復漏洞。具體操作步驟如下:
單擊hadoop-patches-tools.zip和bootstrap_hadoop.sh,下載patch包和bootstrap腳本,并且上傳到OSS上。
例如,上傳到OSS的路徑為oss://<bucket-name>/path/to/hadoop-patches-tools.zip和oss://<bucket-name>/path/to/bootstrap_hadoop.sh。
在EMR控制臺添加引導操作,詳細信息請參見管理引導操作。
在添加引導操作對話框中,填寫配置項。
參數
描述
名稱
引導操作的名稱。例如,FileUtil.unTar命令注入漏洞修復。
腳本位置
選擇腳本所在OSS的位置。
腳本路徑格式必須為oss://**/*.sh格式。本文示例為oss://<bucket-name>/path/to/bootstrap_hadoop.sh。
參數
引導操作腳本的參數,指定腳本中所引用的變量的值。
本文示例為oss://<bucket-name>/path/to/hadoop-patches-tools.zip。
執行范圍
選擇集群。
執行時間
選擇組件啟動后。
執行失敗策略
選擇繼續執行。
如果是新建集群,則需要重啟所有節點上的HDFS、Hive、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark和Zeppelin等組件。如果是新擴容節點,則只需要重啟擴容節點上的相應組件。