一、背景介绍
Apache Log4j2存在远程代码执行漏洞,攻击者通过构造恶意的代码即可利用该漏洞,从而导致服务器权限丢失。目前已知有6000+开源框架使用该组件,几乎中国境内涉及到业务端日志存储都有可能存在该问题。
1.1 漏洞描述
Log4j是Apache的一个开源项目,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。Apache Log4j2是 Log4j的升级版本,据分析,该漏洞产生的原因在于Log4j在记录日志的过程中会对日志内容进行判断,如果内容中包含了${,则Log4j会认为此字符属于可替换的变量,并且Log4j支持JNDI远程加载的方式替换变量值。此漏洞的危害等级很大,只要是调用了Log4j的日志记录功能,并且有用户可控的输入,就可能导致JNDI注入。
1.2 漏洞等级
高危
二、修复建议
2.1 受影响版本
Apache Log4j 2.x <= 2.14.1 版本均受影响。
Apache Struts2、Apache Solr、Apache Druid、Apache Flink 等均受影响。
2.2 修复建议
(1)目前官方已经对此漏洞进行修复并发布了更新补丁,补丁地址为:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
(2)升级其他涉及到的通用组件,例如 Apache Struts2、Apache Solr 等。
三、解决办法
1、下载源码,
下载地址:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
下载完成后为:
2、将源码编译,生成最新版jar包
解压到当前目录,使用maven工具将项目时行打包;(1、下载maven,要求版本是3.5以上版本;2、需要jdk8和jdk9和jdk11编译过程需要用到)
将根目录的
toolchains-sample-win.xml复制到maven本地仓库下,修改里面JDK的安装目录。
cd到解压目录:执行mvn install -DskipTests
显示如图,编译写入本地仓库成功!
3、替换项目中引用的jar包
jar包下载地址: