深入分析Log4j 漏洞

本文深入探讨了Apache Log4j2的安全漏洞,该漏洞允许黑客通过构造特定输入执行任意代码,影响广泛。文章详细介绍了Log4j的lookup功能设计缺陷,受影响的版本与框架,并提供了漏洞复现步骤。同时,给出了设置JVM参数、环境变量以及升级Log4j版本的修复建议。
摘要由CSDN通过智能技术生成

几乎每个系统都会使用日志框架,用于记录日志信息,这些信息可以提供程序运行的上下文,但是日志过多也会影响系统的性能,所以好的日志框架应该是可靠,快速和可扩展的。

Apache Log4j2 是一个基于 Java 的日志工具,是Log4j的升级版本,引入了很多丰富的特性,包括高性能,低垃圾收集,插件系统等。目前很多互联网公司以及耳熟能详的公司的系统或者开源框架都在使用Log4j2。

2021.12.7,Log4j首次被发现了一个非常严重的漏洞,在当天Log4j就发布了log4j-2.15.0-rc1,但是12.9那天被发现这个版本仍然可以触发漏洞。简单点说,黑客可以恶意构造特殊数据请求包payload触发漏洞,从而可以在目标服务器上执行任意代码,导致服务器被黑客控制,被定性为“过去十年来最大、最关键的漏洞”。

根据目前统计,90%以上基于java开发的应用平台都会受到影响。那么这篇文章就会深入分析这个漏洞究竟是怎么产生的以及怎么修复它。

1. Log4j简介

Apache Log4j 是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在已经发展为Apache软件基金会的项目之一。

经过多年的开发迭代,Log4j 1.x的维护已经变得非常困难,因为它需要与非常旧的 Java 版本兼容,所以于 2015 年 8 月正式升级为Log4j2。

2. Log4j的lookup功能

本次漏洞是因为Log4j2组件中 lookup功能的实现类 JndiLookup 的设计缺陷导致,这个类存在于log4j-core-xxx.jar中。

lo77lI

log4j的Lookups功能可以快速打印包括运行应用容器的docker属性,环境变量,日志事件,Java应用程序环境信息等内容。比如我们打印Java运行时版本:

public class VulnerabilityTest {
   
    private static final Logger LOGGER = LogManager.getLogger();

    public static void main(String[] args) {
   
        LOGGER.error("Test:{}","${java:runtime}");
    }
}

输出:

20:20:21.312 [main] ERROR com.ldbmcs.VulnerabilityTest - OpenJDK Runtime Environment (build 11.0.11+9) from AdoptOpenJDK

那么JndiLookup到底有什么设计缺陷导致出现的史诗级漏洞呢?

我们首先把目标放在org.apache.logging.log4j.core.patte

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值