VxRail:管理員補救 Apache Log4Shell 漏洞 (CVE-2021-44228、CVE-2021-45046)
摘要: 本文概述可在 VxRail Manager 上執行的指令檔,以補救 CVE-2021-44228、CVE-2021-45046 和 CVE-2021-4104 (Dell 文章 DSN-2021-007,VMware 文章 VMSA-2021-0028) 中所述的 Apache Log4Shell 漏洞。
說明
Apache 軟體基金會發佈關於嚴重 Apache Log4j 遠端代碼執行漏洞的相關資訊,之前在 GitHub Advisory Database 中稱為 Log4Shell (亦於 CVE-2021-44228、CVE-2021-45046 和 CVE-2021-4104 中說明)。VxRail Manager 暴露於漏洞中所描述的問題。注意:
如需這些 CVE 的詳細資訊,請參閱下列文章:
- Apache Log4j 安全性漏洞
- CVE-2021-45046
(Log4j 2.15)
- CVE-2021-4104
(Log4j 1.2)
先前的指令檔已發現其他問題,可能會導致在 VxRail Manager 上從系統歸檔還原受影響的檔案。此問題亦已在此版本中解決。
如果您使用的指令檔版本較本文隨附的更舊,請下載最新的指令檔 (1.1.2),並在 VxRail Manager 上執行,以確保您有完整的修正程式。
要求和範圍
本文所述的補救措施涵蓋範圍如下:
- 本文適用於 VxRail 4.5.x、4.7.x 和 7.0.x 版本中的 VxRail Manager,以及 VCF 3.x 和 4.x 版本中的 VxRail Manager。
- 提供的指令檔和補救步驟僅能補救 VxRail Manager 裝置 VM 中的漏洞。
- 針對 vCenter Server Appliance (vCSA) 和 NSX 等 VxRail Manager 以外的其他元件,必須個別進行緩解,且並未包含在本指令檔內。
- 此外,此指令檔不會補救任何在 VM 內部執行的應用程式或服務,這些應用程式或服務可能會暴露於漏洞中。Dell EMC 建議所有客戶要求其應用程式或軟體廠商檢查在 VM 中執行的服務,以確保其不受影響。
下列 VMware VMSA 文章詳述受影響的 VMware 產品和潛在因應措施的連結:
VMware 在下列文章提供指令檔,可自動執行 vCenter Server Appliance 中的補救措施:
附於本文的是檔案 fixlog4j-CVE-2021-44228-CVE-2021-45046-v-1-1-2.zip 僅包含適用於 VxRail Manager 的指令檔。
已包含修正程式的 VxRail 版本
此問題已在下列 VxRail 軟體版本中解決:
- VxRail 套件軟體 7.0.320
- VxRail Appliance 軟體 4.7.541
- VxRail Appliance 軟體 4.5.471
建議升級至包含修正程式的 VxRail 軟體版本。
對於無法立即升級的客戶,建議使用此指令檔。注意:
舊版修補腳本的其他注意事項:
如果您以前執行過較早的更新指令檔 (早於 fixlog4j-CVE-2021-44228-CVE-2021-45046-v-1-1-2.zip) 中,請注意下列事項:
-
- 該腳本使用”
.bak擴展名,並將它們保存在原始庫目錄中。 -
這些
.bak檔案升級至 VxRail 8.0.380 或更新版本後,可能會導致服務啟動問題,因為這些檔案會錯誤地與使用中的檔案一起載入在同一個目錄中。
- 該腳本使用”
請按照以下步驟重新安置舊版 .bak 檔案,並確保系統正常運作:
- 檢查現有.bak檔案
find /mystic/connectors -name "log4j-core*.bak"
- 如果找到.bak檔案,請將其移動到安全位置:
mkdir -p /tmp/log4jbakfind /mystic/connectors -name "log4j-core*.bak" -type f -exec mv {} /tmp/log4jbak/ \;
- Check.bak 檔案不存在於
/mystic/connectors資料夾,然後重新啟動服務:
-
- 案例 A — 如果您尚未執行 LCM 升級:
- 繼續進行 LCM 升級。升級程序會自動重新啟動所有服務。
- 案例 A — 如果您尚未執行 LCM 升級:
-
- 案例 B — 如果您已完成 LCM 升級,但遇到 VC 附掛程式失敗:
- 重新啟動 VxRM (VxRail Manager)。
systemctl restart vmware-marvinservice runjars restart
- 重新啟動 VxRM (VxRail Manager)。
- 案例 B — 如果您已完成 LCM 升級,但遇到 VC 附掛程式失敗:
補救步驟
若要補救此問題,請執行下列步驟:
- 下載
fixlog4j-CVE-2021-44228-CVE-2021-45046-v-1-1-2.zip附加到本文的檔。 - 上傳
.zip使用 mystic 使用者,透過 SCP (例如 WinSCP 等 SCP 用戶端) 將 .zip 檔案上傳至 VxRail Manager。 - 登入 VxRail Manager VM 主控台,或以 mystic 使用者使用 SSH。
- 將目錄變更為您上傳
.zip檔案,並使用「解壓縮」命令將其解壓縮:mystic@vxrm:~> unzip fixlog4j-CVE-2021-44228-CVE-2021-45046-v-1-1-2.zip Archive: fixlog4j-CVE-2021-44228-CVE-2021-45046-v-1-1-2.zip inflating: fixlog4j-CVE-2021-44228-CVE-2021-45046.sh
- 使用 chmod 命令使腳本可執行:
chmod命令:mystic@vxrm:~> chmod +x fixlog4j-CVE-2021-44228-CVE-2021-45046.sh
- 使用 su 命令,以 VxRail Manager 的 root 使用者身分登入:
su命令:mystic@vxrm:~> su - Password:
- 請確定您位於解壓縮指令檔套件的相同目錄中:
vxrm:~ # cd /home/mystic vxrm:/home/mystic #
- 執行指令檔:
vxrm:/home/mystic # ./fixlog4j-CVE-2021-44228-CVE-2021-45046.sh
指令檔輸出範例:
Stop MARVIN and runjars service before patching the system /mystic/connectors/eservice/lib/log4j-core-2.13.0.jar is affected by CVE-2021-44228 and CVE-2021-45046, need to apply patch patching /mystic/connectors/eservice/lib/log4j-core-2.13.0.jar Successfully patched /mystic/connectors/eservice/lib/log4j-core-2.13.0.jar /mystic/connectors/cluster/lib/log4j-core-2.13.0.jar is affected by CVE-2021-44228 and CVE-2021-45046, need to apply patch patching /mystic/connectors/cluster/lib/log4j-core-2.13.0.jar Successfully patched /mystic/connectors/cluster/lib/log4j-core-2.13.0.jar To ensure there is no reload behavior, we need to pack the .war file as well. looks like /usr/lib/vmware-marvin/marvind/webapps/ROOT.war contains the bad log4j-core library WEB-INF/lib/log4j-core-2.13.0.jar Archive: /usr/lib/vmware-marvin/marvind/webapps/ROOT.war inflating: WEB-INF/lib/log4j-core-2.13.0.jar Patching WEB-INF/lib/log4j-core-2.13.0.jar in /usr/lib/vmware-marvin/marvind/webapps/ROOT.war Repack /usr/lib/vmware-marvin/marvind/webapps/ROOT.war updating: WEB-INF/lib/log4j-core-2.13.0.jar (deflated 11%) Clean up the ROOT folder... Always apply a reboot of MARVIN and runjars services restart MARVIN MARVIN restart successfully restart runjars runjars restart successfully
補救所有檔案和重新啟動 VxRail Manager 服務可能需要 5 至 10 分鐘。如果您打算執行下列任何手動驗證步驟,請等待至少 10 分鐘。
lib4j-core 程式庫有幾種不同版本,根據 VxRail Manager 的版本而定。
此指令檔的設計可正確補救 VxRail Manager,無論該版本的 VxRail Manager 包含的 lib4j-core 版本為何。
根據隨附的 lib4j-core 版本而定,以上的指令檔執行輸出結果可能會顯示為更新不同檔案。注意:
以下文章連結到 VMware 文章,其中涵蓋其產品的因應措施和修正程序 ,VxRail: Log4Shell (CVE-2021-44228/CVE-2021-45046/CVE-2021-4104) 和 VxRail 環境的相關資訊
驗證步驟
為了補救此問題,指令檔會移除 JndiLookup.class 檔案來源 lib4j-core-* jar 檔。
jar 檔是一種 Java 打包格式,用於在單個檔中包含多個類、元數據和其他 Java 程式。它在概念上類似於 .zip 檔案,並基於 .zip format:指令檔執行會驗證每個 jar 檔案是否已成功更新。
若要手動驗證指令檔是否可正常運作,您可以檢查 log4j-core-* jar VxRail Manager 上的檔案仍包含受影響的 JndiLookup.class 檔案。如果已成功,您在執行下列確認受影響命令時,應該不會看到任何輸出內容。 JndiLookup.class 檔不再存在於 jar 檔中。
JndiLookup.class 檔案已固定在 log4j-core-2.17.1.jar 和更高版本,因此嘗試在這些 jar 檔案上運行驗證步驟將顯示 JndiLookup.class 檔案存在,但問題未修正。可以安全忽略看到 JndiLookup.class 的修正版本中的檔案 log4j-core。
使用自動化命令進行驗證
可在 VxRail Manager 上執行下列命令,掃描所有 log4j-core-xxxx.jar 檔案是否存在於 VxRail Manager 上,並檢查其是否包含受影響的 JndiLookup.class 檔案:
vxrm:/home/mystic # for myfile in `find / -name log4j-core*jar -print |grep -v log4jbak`; do echo $myfile; unzip -l $myfile | grep JndiLookup.class; done
範例輸出 (更新的系統):
/mystic/connectors/eservice/lib/log4j-core-2.13.0.jar /mystic/connectors/cluster/lib/log4j-core-2.13.0.jar /usr/lib/vmware-marvin/marvind/webapps/ROOT/WEB-INF/lib/log4j-core-2.13.0.jar
在上述範例中, JndiLookup.class 檔案不存在 JAR 中,因此指令檔可運作,且驗證成功。
以下是必須更新之受影響系統的輸出範例:
/mystic/connectors/eservice/lib/log4j-core-2.13.3.jar 2892 2020-05-10 12:08 org/apache/logging/log4j/core/lookup/JndiLookup.class /mystic/connectors/cluster/lib/log4j-core-2.13.3.jar 2892 2020-05-10 12:08 org/apache/logging/log4j/core/lookup/JndiLookup.class /usr/lib/vmware-marvin/marvind/webapps/ROOT/WEB-INF/lib/log4j-core-2.13.3.jar 2892 2020-05-10 12:08 org/apache/logging/log4j/core/lookup/JndiLookup.class
在上方範例中,純文字 JndiLookup.class 檔案仍然存在於 log4j-core-2.13.3.jar jar 檔案。
以下是具有固定或更新 log4j-core 圖書館在哪裡看到 JndiLookup.class 可以忽略檔案:
/usr/lib/vmware-marvin/marvind/webapps/ROOT/WEB-INF/lib/log4j-core-2.17.1.jar
3158 2021-12-27 17:30 org/apache/logging/log4j/core/lookup/JndiLookup.class
/mystic/connectors/eservice/lib/log4j-core-2.17.1.jar
3158 2021-12-27 17:30 org/apache/logging/log4j/core/lookup/JndiLookup.class
/mystic/connectors/cluster/lib/log4j-core-2.17.1.jar
3158 2021-12-27 17:30 org/apache/logging/log4j/core/lookup/JndiLookup.class
在上面的範例中,您可以看到 JndiLookup.class 檔案,但問題的修正位於 log4j-core-2.17.1.jar。
透過手動檢查每個檔案進行驗證
若要快速識別任何 log4j-core-xxxx.jar VxRail Manager 上存在的檔案,執行下列命令 (這會將輸出格式化為可用的命令):
vxrm:/home/mystic # find / -name log4j-core*jar -print |grep -v log4jbak | awk '{print("unzip -l " $1 "|grep JndiLookup.class")}'
範例輸出:
unzip -l /mystic/connectors/eservice/lib/log4j-core-2.13.0.jar|grep JndiLookup.class unzip -l /mystic/connectors/cluster/lib/log4j-core-2.13.0.jar|grep JndiLookup.class unzip -l /usr/lib/vmware-marvin/marvind/webapps/ROOT/WEB-INF/lib/log4j-core-2.13.0.jar|grep JndiLookup.class
從以上的範例輸出中,手動執行每個命令,查看其是否偵測到受影響的 JndiLookup.class 檔案:
vxrm:/home/mystic # unzip -l /mystic/connectors/eservice/lib/log4j-core-2.13.0.jar|grep JndiLookup.class vxrm:/home/mystic # vxrm:/home/mystic # unzip -l /mystic/connectors/cluster/lib/log4j-core-2.13.0.jar|grep JndiLookup.class vxrm:/home/mystic # vxrm:/home/mystic # unzip -l /usr/lib/vmware-marvin/marvind/webapps/ROOT/WEB-INF/lib/log4j-core-2.13.0.jar|grep JndiLookup.class vxrm:/home/mystic #
在上述範例中, JndiLookup.class 檔案不存在 JAR 中,因此指令檔可運作,且驗證成功。
jar 檔案的輸出範例,該檔案仍會受到影響,並包含受影響的
JndiLookup.class 檔案:
vxrm:/home/mystic # unzip -l /mystic/connectors/cluster/lib/log4j-core-2.4.1.jar |grep JndiLookup.class 2576 2015-10-08 17:50 org/apache/logging/log4j/core/lookup/JndiLookup.class
在上方範例中,純文字 JndiLookup.class 檔案仍然存在於 log4j-core-2.4.1.jar jar 檔案。