全部產品
Search
文件中心

E-MapReduce:漏洞公告 | Apache Log4j2遠程代碼執行漏洞

更新時間:Jul 01, 2024

近日,阿里雲計算有限公司發現Apache Log4j2組件存在遠程代碼執行漏洞,並將漏洞情況告知Apache軟體基金會。本文為您介紹該漏洞的影響範圍及相應的修複方案。

漏洞影響

E-MapReduce(簡稱EMR)叢集內受到影響的組件包括:Hive、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark和Zeppelin,其中Spark和Zeppelin是由於依賴Hive組件而受到影響。

漏洞修複方案

您需要將EMR叢集內包含漏洞的Log4j2 JAR整體替換為2.17.0正式版本,同時修改Hive和Spark Log4j配置,禁用JNDI Lookup功能(log4j2.formatMsgNoLookups=true)。具體操作流程,請參見修複流程

該修複方案:

  • 適用於EMR-3.38.2及之前版本,EMR-5.4.2及之前版本,EMR-4.x版本。EMR-3.38.3及之後版和EMR-5.4.3及之後版本已修複該問題,無需進行修複操作。

  • 執行該修複方案後,需要重啟對應的組件。

  • 該漏洞修複指令碼不會對線上業務造成影響,但由於必須重啟對應的組件才會生效,所以建議業務低峰期時執行。

修複流程

EMR叢集

  1. 單擊patches-log4j.tar.gz下載patch包。

  2. 登入EMR叢集的Master節點,並將步驟一中下載的patch包放在emr-userhadoop使用者的HOME目錄下。

  3. 將patch包解壓縮後,使用emr-userhadoop使用者執行操作。

    • 資料湖(DataLake)、即時資料流(DataFlow)、資料分析(OLAP)、資料服務(DataServing)和自訂情境的叢集

      su emr-user
      tar zxf patches-log4j.tar.gz
    • 其餘叢集

      su hadoop
      tar zxf patches-log4j.tar.gz
  4. 編輯patch包下的hosts檔案,添加叢集所有節點的host name,例如emr-header-1或emr-worker-1,檔案內容以行分割。

    cd patches
    vim hosts

    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
  5. 通過fix.sh指令碼執行修複操作。

    ./fix.sh

    指令碼執行完成後,返回如下提示資訊。

    ### NOTICE: YOU CAN RESTORE THIS PATCH BY RUN RESTORE SCRIPT ABOVE
    $> sh ./restore.sh 20211213001755
    ### DONE

    如果您需要將上述修複過程進行復原,可以執行以下命令。

    ./restore.sh 20211213001755
    說明

    對於已經在啟動並執行YARN作業(Application,例如,Spark Streaming或Flink作業),需要停止作業後,批量滾動重啟YARN NodeManager。

  6. 重啟服務。

    Hive、HDFS、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark和Zeppelin等組件需要重啟之後才能完全修複漏洞。

    以Hive組件為例,在EMR叢集的Hive服務頁面,選擇右上方的更多操作 > 重啟

Gateway叢集

由於該方案依賴於SSH免密登入,對於Gateway叢集,您需要手動將patch包上傳到Gateway叢集的每一個節點,並按EMR叢集的修複流程分別執行修複操作。

重要
  • patch包中的hosts檔案只需要填寫當前執行節點的hostname

  • 由於Gateway叢集中沒有組件進程,上傳patch包後,無需進行服務重啟操作。

建立叢集和擴容已有叢集

建立EMR叢集時在EMR控制台添加引導操作,或擴容已有叢集時可以自動修複漏洞。具體操作步驟如下:

  1. 單擊patches-log4j.tar.gzbootstrap_log4j.sh,下載patch包和bootstrap指令碼,並且上傳到OSS上。

    例如,上傳到OSS的路徑為oss://<bucket-name>/path/to/patches-log4j.tar.gzoss://<bucket-name>/path/to/bootstrap_log4j.sh

  2. 在EMR控制台添加引導操作,詳細資料請參見管理引導操作

    添加引導操作對話方塊中,填寫配置項。

    參數

    描述

    名稱

    引導操作的名稱。例如,log4j漏洞修複。

    指令碼位置

    選擇指令碼所在OSS的位置。

    指令碼路徑格式必須為oss://**/*.sh格式。本文樣本為oss://<bucket-name>/path/to/bootstrap_log4j.sh

    參數

    引導操作指令碼的參數,指定指令碼中所引用的變數的值。

    本文樣本為oss://<bucket-name>/path/to/patches-log4j.tar.gz

    執行範圍

    選擇叢集

    執行時間

    選擇組件啟動後

    執行失敗策略

    選擇繼續執行

  3. 如果是建立叢集,則需要重啟HDFS、Hive、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark和Zeppelin等組件。如果是新擴容節點,則只需要重啟擴容節點上的相應組件。