【线上运维之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>

以上就是全部修复过程。

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