log4j漏洞版本详解

一、log4j漏洞

log4j是一个广泛使用的Java日志工具,由于其方便度和灵活程度,受到开发人员的喜爱。然而,log4j近期被曝出一个严重漏洞(CVE-2021-44228),攻击者可以利用该漏洞在受影响的系统中执行任意代码。这个漏洞是由于log4j在处理用户输入时存在缺陷引起的。具体而言,log4j在处理日志消息时,可以通过采用”${“和”}”包裹用户输入的参数,来将其替换到日志消息中,以便更好地组合日志消息。假如用户恶意构造这些参数,就能够在日志消息中注入命令执行语句,导致执行任意代码。

二、log4j漏洞攻击原理

攻击者可以构造恶意的日志消息,将恶意代码注入到日志消息中,通过包括但不限于HttpServletRequest、JNDI、Java Management Extensions(JMX)、Java Naming and Directory Interface(JNDI)、PrintWriter等语句执行代码。因为这些语句应用十分广泛,极容易受到攻击。由于漏洞本质上是在提供日志服务的应用程序中出现,攻击者只需向应用程序提供恶意日志消息,即可触发漏洞。

三、log4j2漏洞

除了log4j,log4j2版本也发现了漏洞。log4j2漏洞(CVE-2021-45046)功能上与log4j漏洞十分相似,由于同样存在缺陷,它在接收到特殊字符时,可以触发任意代码执行。这个漏洞在log4j2版本2.0-2.14.1和log4j-1.2-17及之前版本中出现。和log4j漏洞一样,攻击者可以构造恶意的日志消息,将恶意代码注入到日志消息中,通过脚本执行代码。

四、log4j2漏洞修复

根据官方通告,log4j2的漏洞已经修复。修复方式是在log4j-core 2.14.2之后的版本中,使用JNDI查询时默认禁用了“LDAP协议处理器”和“XBean”模块。这种修复方案的难度较低,大家只需要升级到最新版本即可。需要注意的是,如果您正在使用log4j2 2.0-2.14.1或log4j-1.2-17及之前版本,则应立即升级到最新版本。

五、log4j漏洞影响版本

根据log4j官方通告,log4j漏洞影响一系列版本,包括但不限于:

log4j-1.2.x
log4j:1.2.17及之前版本
log4j-1.2.8
log4j:1.2.14
log4j:1.2.12
log4j:1.2.11
log4j:1.2.9
log4j:1.2.3
log4j-1.2.17
log4j:1.2.15
log4j:1.2.13
log4j:1.2.16
log4j:1.2.10
log4j:1.2.7
log4j:1.2.1
log4j-1.3-Alpha (当时的实验版本,已经停止开发)
log4j-1.4.x
log4j:1.4.2至1.4.17
log4j:1.4.1
log4j:1.4
log4j-1.5.x及以上版本
log4j:1.5.0至1.5.16
log4j:1.5.17至1.5.20
log4j:1.5.21至1.5.22
log4j:1.5.23
log4j:1.5.24
log4j-1.6.x及以上版本
log4j-2.x版本
log4j:2.0至2.17 (<=2.17.0)

六、log4j漏洞是什么

log4j漏洞是一种用于java日志工具log4j的通用代码注入漏洞,允许攻击者在受污染的应用程序中执行任意代码。攻击者可以向应用程序输入带有特殊代码的字符串,以嵌入在输出日志中也得以执行。该漏洞是由于log4j中错误地实现了“${}”语法引起的。攻击者可以利用这种漏洞来编写特殊字符串,并植入mac.osx.TorsionBean类,从而窃取服务器目录中的文件。

七、log4j漏洞是谁发现的

log4j漏洞是由一名实名为“y2k23xz”(匿名人士)的中国安全研究人员发现的。实际上,他早在11月23日就向Apache Software Foundation报告了这个漏洞,并发布了漏洞利用脚本。此后,Apache Software Foundation速度非常快地发布了更新。

八、log4j2漏洞修复方案

官方提供了多种log4j2漏洞的修复方案,包括关闭JNDI查询、配置黑名单、升级新版本等。

ConfigurationBuilder builder = ConfigurationBuilderFactory.newConfigurationBuilder();
DefaultReliabilityStrategy strategy = new DefaultReliabilityStrategy();
if (useXml) {
    builder.setConfigurationName("RollingBuilderTest")
        .addProperty("filename", "target/rolling-builder-test.log")
        .addProperty("rolloverStrategy.Threshold", "1")
        // Use special entity reference for "java:" prefix to avoid outputting it as a legitimate JNDI context name
        .addProperty("log4j2.patternSelector.default.pattern",
            "" +
            "" +
            "");
} else {
    builder.setConfigurationName("RollingBuilderTest")
        .addProperty("filename", "target/rolling-builder-test.log")
        .addProperty("rolloverStrategy.Threshold", "1")
        // Use special entity reference for "java:" prefix to avoid outputting it as a legitimate JNDI context name
        .addProperty("log4j2.patternSelector.default.pattern",
                "${java:"java.naming.factory.initial":-""}${java:"java.naming.provider.url":-""}\\tab %d{ISO8601} %p %c{1.} [%t] %m%n");
}
builder.setStatusLevel(Level.ERROR);
builder.setConfigurationReliabilityStrategy(strategy);
...

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/284633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-22 15:41
下一篇 2024-12-22 15:41

相关推荐

  • Git secbit:一种新型的安全Git版本

    Git secbit是一种新型的安全Git版本,它在保持Git原有功能的同时,针对Git存在的安全漏洞做出了很大的改进。下面我们将从多个方面对Git secbit做详细地阐述。 一…

    编程 2025-04-29
  • 如何将Java项目分成Modules并使用Git进行版本控制

    本文将向您展示如何将Java项目分成模块,并使用Git对它们进行版本控制。分割Java项目可以使其更容易维护和拓展。Git版本控制还可以让您跟踪项目的发展并协作开发。 一、为什么要…

    编程 2025-04-28
  • Python的版本演变

    Python是一门非常流行的编程语言,它有着简洁、易读、易写的特点。自1991年由Guido van Rossum发明以来,Python已经发展成为一个成熟的编程语言,拥有多个版本…

    编程 2025-04-28
  • Log4j日志打印到Systemout.log

    Log4j是Apache的一个强大的日志组件,可以帮助开发者更好地管理日志。在Java应用程序中,很多开发者都会选择使用Log4j来实现日志输出。本文将介绍如何使用Log4j将日志…

    编程 2025-04-28
  • librosa版本用法介绍

    librosa是一个用于音频信号处理的python库,具有多种处理音频的功能。在librosa库中,版本号非常重要,在不同的版本中可能会存在一些差异。本文将围绕librosa的版本…

    编程 2025-04-28
  • Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901解析

    本文将对Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901进行详细解析,并提供相关代码示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    编程 2025-04-27
  • Java多版本支持实现方式

    本文将从以下几个方面阐述如何实现Java多版本支持,并给出可行的代码示例。 一、多版本Java环境概述 Java是一门跨平台的编程语言,但是在不同的应用场景下,可能需要使用不同版本…

    编程 2025-04-27
  • Python漏洞挖掘全指南

    本文将从多个方面详细阐述Python漏洞挖掘的相关知识,帮助开发工程师了解并掌握漏洞挖掘的基础知识和实战技巧。 一、漏洞类型 漏洞是指误用或设计上的错误,可导致产品、应用或系统中存…

    编程 2025-04-27
  • Taro3.5.11版本微信小程序端v-html依然无法解析video为中心的问题解决方案

    该问题的解决是通过使用 Taro3.5.11 版本自定义组件进行处理,具体解决方案如下: 一、自定义组件 首先,我们需要创建一个自定义组件 VideoComponent,该组件的主…

    编程 2025-04-27
  • 利用SeaweedFS版本进行大规模文件存储与分配

    SeaweedFS是一个基于Go语言开发的分布式文件系统,它是一种高可用、高扩展性、高效率的解决方案。通过利用SeaweedFS版本,我们可以方便地实现大规模文件的存储与分配。 一…

    编程 2025-04-27

发表回复

登录后才能评论