漏洞性质:任意代码执行
漏洞描述:
2021 年 12 月 9 日,该项目被曝存在 严重安全漏洞 ,攻击者只需要向目标机传入一段特殊代码,就能触发漏洞,自由地在远程执行任意代码来控制目标机器!
Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。log4j2是全球使用广泛的java日志框架,同时该漏洞还影响很多全球使用量的Top序列的通用开源组件,例如 Apache Struts2、Apache Solr、Apache Druid、Apache Flink等。
漏洞危害:
Log4j-2中存在JNDI注入漏洞,当程序将用户输入的数据被日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码,可能对用户造成不可挽回的损失。
危害等级:严重
解决方案:升级平台所有依赖组件版本号,org.apache.logging.log4j 2.17.0,
目前平台springboot版本号为 2.2.0,依赖的日志组件版本为 2.12.1需要升级,官方修复补丁在2.15以上版本。本次升级到2.17.0最新版本。
1.检查项目的maven对应的组件
2.依次修改各war包工程中的pom文件引用,单独引用log4j组件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<!-- statr log4j 独立引用升级 add by soldier on 20121231-->
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
<!-- end log4j 独立引用升级 add by soldier on 20121231-->
</exclusions>
</dependency>
<!--start log4j 包管理Apache Log4j任意代码执行漏洞 20211231-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.17.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.0</version>
</dependency>
<!-- end log4j 包管理Apache Log4j任意代码执行漏洞 20211231-->
3.修改rs-parent主工程对应的pom文件,排除日志依赖的引用
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
</exclusions>
4.如有工作流模组,需要对应修改工作流
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
</exclusions>
<!-- statr log4j 独立引用升级 add by soldier on 20121231-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</exclusion>
</exclusions>
<!-- end log4j 独立引用升级 add by soldier on 20121231-->
5.再次检查整个工程的maven依赖,确认升级成功
确保log4j的版本号已经为最新的2.17.0引用。