近期Apache Log4j2爆出遠程執行代碼的安全漏洞,忙壞了程序猿們。
相關新聞連接1:https://view.inews.qq.com/a/20211210A06S8S00
現在的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>
以上就是全部修復過程。