全球知名开源日志组件Apache Log4j被曝存在严重高危险级别远程代码执行漏洞,攻击者可以利用该漏洞远程执行恶意代码。据阿里云通报,由Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。
该漏洞于12月7日由游戏平台Minecraft用户在网上曝光,据称黑客可以通过操作日志消息(甚至在聊天信息中键入内容),并且还可以在Minecraft服务器端执行恶意代码。Apache log4j官方在7日当天便发布2.15.0-rc1版本以修复漏洞,随后,阿里云、斗象科技、绿盟科技、默安科技、奇安信等安全厂商发布危害通报。
目前受漏洞影响的主要是Apache Log4j 2.x <= log4j-2.15.0-rc1版本,当用户使用Apache Log4j2来处理日志时,漏洞会对用户输入的内容进行特殊处理,攻击者便可以在Apache Log4j2中构造特殊请求来触发远程代码执行。
如何判断是否受影响,开发者只需排查在Java应用中是否引入log4j-api, log4j-core两个jar文件,若存在,建议立即进行安全排查,采取防护措施。
如果我们的项目是基于maven的spring boot项目。查看项目依赖中是否存在log4j-api, log4j-core的依赖即可。
目录
1.打开依赖树
2.查看log4j-api依赖
3.排除log4j-to-slf4j
4.排除log4j-api
5.排除依赖的代码
1.打开依赖树
发现我们引用的log4j-api是2.13.3版本。
2.查看log4j-api依赖
发现是log4j-to-slf4j依赖了log4j-api。首先排除log4j-to-slf4j,引入最新版试试。
3.排除log4j-to-slf4j
发现引入的log4j-api依旧是2.13.3版本。那么,我们要排除log4j-api,引入最新版。
4.排除log4j-api
发现引入的log4j-api最新版本是2.15.0版本。成功。
项目打包后,查看lib里面的jar版本:
5.排除依赖的代码
<!-- 排除log4j-api,引入最新log4j-api -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
</exclusions>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.15.0</version>
</dependency>
<!-- 排除log4j-api,引入最新log4j-api END-->