• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Log4j2高危漏洞CNVD-2021-95914复现修复

武飞扬头像
lizz666
帮助2

漏洞描述

安全公告编号: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引入

  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.  
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.  
    <modelVersion>4.0.0</modelVersion>
  6.  
    <groupId>com.lizz</groupId>
  7.  
    <artifactId>parent-tester</artifactId>
  8.  
    <version>1.0-SNAPSHOT</version>
  9.  
    <properties>
  10.  
    <skipTests>true</skipTests>
  11.  
    </properties>
  12.  
     
  13.  
    <dependencies>
  14.  
    <dependency>
  15.  
    <groupId>org.apache.logging.log4j</groupId>
  16.  
    <artifactId>log4j-core</artifactId>
  17.  
    <version>2.13.3</version>
  18.  
    </dependency>
  19.  
    </dependencies>
  20.  
     
  21.  
    <build>
  22.  
    <plugins>
  23.  
    <plugin>
  24.  
    <groupId>org.springframework.boot</groupId>
  25.  
    <artifactId>spring-boot-maven-plugin</artifactId>
  26.  
    </plugin>
  27.  
    </plugins>
  28.  
    </build>
  29.  
    </project>
学新通

或引入spring-boot-starter-log4j2,依赖的也是log4j-core.jar

  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.  
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.  
    <modelVersion>4.0.0</modelVersion>
  6.  
    <groupId>com.lizz</groupId>
  7.  
    <artifactId>parent-tester</artifactId>
  8.  
    <version>1.0-SNAPSHOT</version>
  9.  
    <properties>
  10.  
    <skipTests>true</skipTests>
  11.  
    </properties>
  12.  
     
  13.  
    <parent>
  14.  
    <groupId>org.springframework.boot</groupId>
  15.  
    <artifactId>spring-boot-starter-parent</artifactId>
  16.  
    <version>2.3.4.RELEASE</version>
  17.  
    <relativePath/>
  18.  
    </parent>
  19.  
    <dependencies>
  20.  
    <dependency>
  21.  
    <groupId>org.springframework.boot</groupId>
  22.  
    <artifactId>spring-boot-starter-log4j2</artifactId>
  23.  
    </dependency>
  24.  
    </dependencies>
  25.  
     
  26.  
    <build>
  27.  
    <plugins>
  28.  
    <plugin>
  29.  
    <groupId>org.springframework.boot</groupId>
  30.  
    <artifactId>spring-boot-maven-plugin</artifactId>
  31.  
    </plugin>
  32.  
    </plugins>
  33.  
    </build>
  34.  
    </project>
学新通

测试用例

  1.  
    import org.apache.logging.log4j.LogManager;
  2.  
    import org.apache.logging.log4j.Logger;
  3.  
     
  4.  
    /**
  5.  
    * @description: LogBugTest
  6.  
    * @author: lizz
  7.  
    * @date: 2021/12/14 14:51
  8.  
    */
  9.  
    public class LogBugTest {
  10.  
    private static final Logger logger = LogManager.getLogger(LogBugTest.class);
  11.  
     
  12.  
    public static void main(String[] args) {
  13.  
    String msg="${java:hw}";
  14.  
    logger.info("log {}",msg);
  15.  
    logger.error("${jndi:rmi://127.0.0.1:1099/xxxx}");
  16.  
     
  17.  
    }
  18.  
    }
学新通

输出结果:

  1.  
    [main] INFO com.lizz.LogBugTest - log processors: 4, architecture: x86_64-64
  2.  
    main WARN Error looking up JNDI resource [rmi://127.0.0.1:1099/xxxx].
  • ${java:hw}输出了服务器cpu信息
  • jndi:rmi可以远程加载外部类,使用可以执行外部想要你执行的命令,漏洞所在。
  • 上面的输出内容表示可以执行特殊命令,可以通过开放接口将命令通过参数传递到服务中执行,从而执行破坏或控制命令。

无漏洞输出结果

  1.  
    [main] INFO com.lizz.LogBugTest - log ${java:hw}
  2.  
    [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即可。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcbfeb
系列文章
更多 icon
同类精品
更多 icon
继续加载