1.漏洞描述
1.1 Apache Log4j介绍
Apache Log4j是一个基于Java语言开源的日志框架,已于2015年8月5日停止维护。Log4j2是其重构升级版本,引入了大量丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组件等,并通过定义每一条日志信息的级别,使其能更加细致地控制日志的生成过程。
1.2 CVE-2021-45105漏洞介绍
2021年12月20日,360CERT监测发现Apache官方发布了Apache Log4j的风险通告,漏洞编号为CVE-2021-45105,漏洞等级:高危,漏洞评分:7.5。目前官方已发布安全版本。这是最近在 Log4J 中发现的第三个安全漏洞。
参考:https://cert.360.cn/report/detail?id=afe61624e78397657fd332b5dee8fa16
1.3 CVE-2021-44228漏洞介绍
2021.12.09 腾讯安全注意到,一个Apache log42高危漏洞(CVE-221-44228)细节已被公开,Log4j-2中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息,大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。
漏洞等级:高危,该漏洞影响范围极广,危害极大。
参考:https://s.tencent.com/research/report/144.html
2.漏洞原因
因为Log4停止维护了,所以需要升级到Log4j2的目前推荐版本或者最高版本。
3.漏洞修复
修复前pom.xml文件(文件中相关依赖):
<!-- LOGGING begin -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- common-logging 实际调用slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- java.util.logging 实际调用slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- LOGGING end -->
修复后pom.xml文件(需要将上述文件依赖变成):
<!-- LOGGING begin -->
<!--slf4j的依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!--log4j2 的依赖-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<!--用于与sfl4j保持桥接-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency>
<!-- 用来无缝切换Log4j到log4j2的中间层 注意版本号要跟用的log4j2的版本号一致 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- LOGGING end -->