刪除Log4j 1。x JMSAppender SocketServer類從類路徑中

刪除Log4j 1。x JMSAppender SocketServer類從類路徑中。

寫的亞當Pavlacka

去年發表在:2022年5月16日

磚最近發表一篇博客Log4j 2脆弱性(cve - 2021 - 44228)的研究和評估。磚不直接使用Log4j版本已知受此影響的脆弱性在磚平台在某種程度上我們理解可能是脆弱的。Beplay体育安卓版本

磚也不影響使用Log4j 1類。與已知的漏洞x (cve - 2021 - 4104,cve - 2020 - 9488,cve - 2019 - 17571)。但是,如果您的代碼使用這些類(JMSAppender或SocketServer)之一,使用可能影響這些漏洞。

如果您的代碼使用Log4j,你應該升級到Log4j 2.17或以上。

如果你不能升級因為技術原因,您可以使用一個全球init腳本(AWS|Azure|GCP從Log4j)帶影響類集群開始。

刪除

警告

因為我們不控製運行的代碼,我們不能保證這個解決方案將防止Log4j加載類在所有情況下的影響。

配置全球init腳本

刪除

信息

運行這個腳本是一個打破的變化依賴於影響類的任何代碼。

AWS

  1. 去管理控製台並單擊全球Init腳本選項卡。
  2. 單擊+添加按鈕。
  3. 輸入腳本的名稱。
  4. 下麵的腳本複製到腳本字段。
    % sh # !/bin/bash回聲的Init腳本刪除某些Log4J 1。x類,版本1.0 (2021-12-17)' FILES_TO_DELETE = (org/apache/log4j/net/JMSAppender。類org/apache/log4j/net/SocketServer。類)發現“/磚" \ - name ' * log4j *。jar”\ - echo - e \ nProcessing {}“\;- zip - d {} " $ {FILES_TO_DELETE [@]}“\;退出0
    全球init腳本刪除Log4j 1。x JMSAppender SocketServer類的類路徑中。
  5. 如果你有超過一個全球init腳本配置為工作區,你應該配置這個腳本運行後其他腳本。
  6. 確保啟用開關進行切換。
  7. 點擊添加
  8. 重啟所有正在運行的集群。
刪除


Azure

  1. 去管理控製台並單擊全球Init腳本選項卡。
  2. 單擊+添加按鈕。
  3. 輸入腳本的名稱。
  4. 下麵的腳本複製到腳本字段。
    % sh # !/bin/bash回聲的Init腳本刪除某些Log4J 1。x類,版本1.0 (2021-12-17)' FILES_TO_DELETE = (org/apache/log4j/net/JMSAppender。類org/apache/log4j/net/SocketServer。類)發現“/磚" \ - name ' * log4j *。jar”\ - echo - e \ nProcessing {}“\;- zip - d {} " $ {FILES_TO_DELETE [@]}“\;退出0
    全球init腳本刪除Log4j 1。x JMSAppender SocketServer類的類路徑中。
  5. 如果你有超過一個全球init腳本配置為工作區,你應該配置這個腳本運行後其他腳本。
  6. 確保啟用開關進行切換。
  7. 點擊添加
  8. 重啟所有正在運行的集群。
刪除


GCP

使用2.0全球Init腳本API下麵的init腳本應用於每一個集群在工作區中。

% sh # !/bin/bash回聲的Init腳本刪除某些Log4J 1。x類,版本1.0 (2021-12-17)' FILES_TO_DELETE = (org/apache/log4j/net/JMSAppender。類org/apache/log4j/net/SocketServer。類)發現“/磚" \ - name ' * log4j *。jar”\ - echo - e \ nProcessing {}“\;- zip - d {} " $ {FILES_TO_DELETE [@]}“\;退出0

重啟後所有正在運行的集群應用全球init腳本。

刪除

驗證影響類是不可用的

你應該每個集群上運行測試,以確保受影響的類是不可用的。

測試1

您可以運行一個斷言檢查受影響的類在一個筆記本上。

% scala斷言(this.getClass.getClassLoader () .getResource ("org/apache/log4j/net/JMSAppender.class”) = = null)斷言(this.getClass.getClassLoader () .getResource ("org/apache/log4j/net/SocketServer.class”) = = null)

這個示例代碼運行成功如果你有殘疾影響類。

這個示例代碼應該返回一個錯誤如果你沒有殘疾影響類。

測試2

你可以試圖影響類導入到一個筆記本。

% scala進口org.apache.log4j.net.JMSAppender org.apache.log4j.net.SocketServer進口

此示例代碼成功運行如果你沒有殘疾影響類。

這個示例代碼應該返回一個錯誤如果你有殘疾影響類。

警告

有一些角落的情況你可以再次引入Log4j 1。x版本JMSAppender或SocketServer。

問題

如果你安裝一個Maven庫傳遞依賴Log4j 1。x,所有的類都是重新添加到類路徑中。

解決方案

您可以通過添加Log4j的解決這個問題除外責任現場在安裝Maven庫。

安裝Maven庫選項顯示排除字段。

問題

如果你配置一個外部Apache蜂巢metastore, Apache火花使用Ivy來解決和下載正確的metastore客戶端庫,和所有的過渡依賴,可能包括Log4j 1. x。

加快集群啟動,您可以緩存下載的jar DBFS和使用init腳本安裝從緩存中。如果緩存這樣的罐子,有可能是Log4j 1。x可能包括在內。

解決方案

您可以配置外部metastore的init腳本刪除受影響的類。