【線上運維之03】Apache Log4j2 遠程代碼執行漏洞修復

近期Apache Log4j2爆出遠程執行代碼的安全漏洞,忙壞了程序猿們。

相關新聞連接1:https://view.inews.qq.com/a/20211210A06S8S00 

相關新聞連接2:https://www.toutiao.com/i7039977011359515149/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1639177430&app=news_article&utm_source=weixin&utm_medium=toutiao_android&use_new_style=1&req_id=202112110703500102121421630A667F39&share_token=15974080-3057-4adc-8988-8b76b7b388f2&group_id=7039977011359515149 

現在的Java應用以Springboot構建爲主,在這個基礎上衍生出了SpringCloud微服務等。

默認的Springboot使用的是logbak日誌,本以爲不會用到Log4j2jar包,經過分析pom的依賴文件,以及檢查生成的jar包,發現存在log4j-api的jar包引用。

版本是log4j-api-2.14.1,安全版本必須是大於2.15.0;

臨時修復建議

#臨時修復建議:禁止使用log4j的服務器外連;升級Java版本至JDK 11.0.1、8u191、7u201、6u211或更高版本

1. 設置jvm參數 “-Dlog4j2.formatMsgNoLookups=true”
2. 設置“log4j2.formatMsgNoLookups=True”
3. 系統環境變量“FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS”設置爲“true”
4. 關閉對應應用的網絡外連,禁止主動外連

-------------------------------------------------------

根本修復辦法,升級Log4j2的版本

Bug剛爆出,maven庫最新的版本還沒有更新,只能從github上,下載代碼自行編譯。

源代碼地址:https://github.com/apache/logging-log4j2/tree/rel/2.16.0

版本是2.16.0,下載到本地後,配置maven的toolchains.xml文件,主要源代碼中使用了Java9和Java11兩個版本,不配置的話,編譯失敗。

toolchains.xml默認在maven的conf目錄下,或者在maven的本地倉庫裏也可以repository;

toolchains.xml配置說明

<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
  <toolchain>
    <type>jdk</type>
    <provides>
      <!-- 同pom.xml的設置保持一致-->
      <version>1.8</version>
	  <vendor>sun</vendor>
    </provides>
    <configuration>
      <!-- 寫上本地jdk安裝的路徑-->
      <jdkHome>C:\Program Files\Java\jdk1.8.0_152</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <!-- 同pom.xml的設置保持一致-->
      <version>9</version>
	  <vendor>sun</vendor>
    </provides>
    <configuration>
      <!-- 寫上本地jdk安裝的路徑-->
      <jdkHome>C:\Program Files\Java\jdk-9</jdkHome>
    </configuration>
  </toolchain>

</toolchains>

maven pom.xml的配置節選

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-toolchains-plugin</artifactId>
        <version>1.1</version>
        <executions>
          <execution>
            <goals>
              <goal>toolchain</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <toolchains>
            <jdk>
              <!-- 同maven裏的toolchain.xml配置保持一致 -->
              <version>9</version>
              <vendor>sun</vendor>
            </jdk>
          </toolchains>
        </configuration>
      </plugin>
    </plugins>
</build>

在代碼的根目錄,執行

mvn clean package -Dmaven.test.skip=true 

即可得到相應的jar包。

---------------------------------------------------------------------------

目前官網已經放出修復後的版本,連接爲:https://logging.apache.org/log4j/2.x/download.html

直接下載官方編譯好的版本:https://www.apache.org/dyn/closer.lua/logging/log4j/2.16.0/apache-log4j-2.16.0-bin.tar.gz

或者引用最新的maven依賴

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.16.0</version>
</dependency>

以上就是全部修復過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章