1. 程式人生 > 其它 >KubeSphere 對 Apache Log4j 2 遠端程式碼執行最新漏洞的修復方案

KubeSphere 對 Apache Log4j 2 遠端程式碼執行最新漏洞的修復方案

Apache Log4j 2 是一款開源的日誌記錄工具,被廣泛應用於各類框架中。近期,Apache Log4j 2 被爆出存在漏洞,漏洞現已公開,本文為 KubeSphere 使用者提供建議的修復方案。

此次漏洞是由於 Log4j 2 提供的 lookup 功能造成的,該功能允許開發者通過一些協議去讀取相應環境中的配置。但在實現的過程中,並未對輸入進行嚴格的判斷,從而造成漏洞的發生。由於大量的軟體都使用了 Log4j 2 外掛,所以大量的 Java 類產品均被波及,包括但不限於 Apache Solr、srping-boot-strater-log4j2、Apache Struts2、ElasticSearch、Dubbo、Redis、Logstash、Kafka...更多元件可以參考

Log4j 2 相關文件

受影響的 Log4j 版本為 Apache Log4j 2.x < 2.15.0-rc2。目前官方釋出了 Apache 2.15.0-rc2 版本對該漏洞進行了修復,但是該版本並非正式發行版,故存在不穩定的因素,如要升級建議對相關資料進行備份。

同時,也提供了三種方法對漏洞進行補救,為

  • 將系統環境變數 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 設定為 true
  • 修改配置 log4j2.formatMsgNoLookups=True
  • 修改 JVM 引數 -Dlog4j2.formatMsgNoLookups=true

以下三種解決方法,您可以任選其中一種進行參考。

方法一:修改系統環境變數

由於 KubeSphere 預設使用了 ElasticSearch 收集日誌,所以也應該在 KubeSphere 修改相應的配置來對漏洞進行修復。以下說明如何在 KubeSphere 中進行相應的操作對 ElasticSearch 進行修復。

將系統環境變數 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 設定為 True,為此,我們需要修改 ElasticSearch 的 Yaml 檔案,因為它是一個 StatefulSet 檔案,所以需要進行如下修改:

kubectl edit  statefulset  elasticsearch-logging-data -n kubesphere-logging-system
kubectl edit  statefulset  elasticsearch-logging-discovery  -n kubesphere-logging-system

在這兩個 Yaml 檔案中插入環境變數設定:

env:
- name: FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS
  value: "true"

方法二:修改 Log4j 2 配置

另外,您也可以修改配置 log4j2.formatMsgNoLookups=True,您可以執行如下命令:

kubectl edit configmaps elasticsearch-logging  -n kubesphere-logging-system

然後插入上面所提到的配置:

log4j2.properties: |-
    status=error
    appender.console.type=Console
    appender.console.name=console
    appender.console.layout.type=PatternLayout
    appender.console.layout.pattern=[%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
    rootLogger.level=info
    rootLogger.appenderRef.console.ref=console
    logger.searchguard.name=com.floragunn
    logger.searchguard.level=info
    # 插入此行
    log4j2.formatMsgNoLookups=true

注意:

  1. 修改後請注意相關配置是否掛載進去,如果沒有掛載進去,請重啟 Pod。
  2. 如果您將 KubeSphere Logging 元件重新安裝,ks-installer 可能會導致該 ConfigMap 的配置被重置,需要再參考方法二手動配置一遍,或者採取方法一,設定系統環境變數 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 為 true

方法三:修改 ElasticSearch 的 JVM 引數

除了上述兩種方法,您還可以選擇在 KubeSphere 叢集中的 ElasticSearch 新增配置檔案,單獨配置 JVM 引數,詳見 ElasticSearch 公告宣告

相關參考

本文由部落格一文多發平臺 OpenWrite 釋出!