安全

Apache Log4j 安全团队非常重视安全。这使我们的用户能够信任 Log4j 来保护其关键任务数据。在本页中,我们将帮助您找到有关安全相关问题的指南以及已知漏洞的访问权限。

警告

Log4j 1 已于 2015 年 达到使用寿命终结,不再受支持。2015 年 8 月之后针对 Log4j 1 报告的漏洞不会被检查,也不会被修复。用户应 升级到 Log4j 2 以获取安全修复。

获取支持

如果您需要帮助构建或配置 Log4j,或需要其他帮助来遵循此处列出的已知漏洞的缓解说明,请使用我们的 用户支持渠道

提示

如果您需要应用源代码补丁,请使用您正在使用的 Log4j 版本的构建说明。这些说明可以在与源代码一起分发的 BUILDING.adoc 中找到。

报告漏洞

如果您遇到未列出的安全漏洞或其他具有安全影响的意外行为,或者如果此处描述不完整,请私下Log4j 安全团队 报告。

警告

Log4j 使用的威胁模型认为配置文件是程序员控制的安全输入;需要修改配置的能力的潜在漏洞不被视为漏洞,因为执行此操作所需的访问权限意味着攻击者可以执行任意代码。

漏洞处理策略

Apache Log4j 安全团队遵循 ASF 项目安全 指南来处理安全漏洞。

报告的安全漏洞在创建 CVE 并填充其相关内容之前,需要在私有的 安全邮件列表 中进行投票(通过 延迟批准,最好是)。此过程仅涉及创建 CVE,既不阻止(漏洞)修复,也不阻止发布。

漏洞披露报告 (VDR)

从版本 2.22.0 开始,Log4j 与每个部署的工件一起分发 CycloneDX 软件物料清单 (SBOM)。生成的 SBOM 包含 BOM 链接,这些链接引用 Apache Logging Services 用于其维护的所有项目的 CycloneDX 漏洞披露报告 (VDR)。所有这些都由 logging-parent 简化,有关详细信息,请参阅 其网站

已知漏洞

Log4j 安全团队认为,安全信息的准确性、完整性和可用性对我们的用户至关重要。我们选择将所有信息集中到此页面,以便轻松搜索各种标准的安全漏洞。

注意

我们在共享受影响组件的版本时,遵守 Maven 版本范围语法。我们只用集合并运算符(即 )扩展此数学符号来表示多个范围的并集。

CVE-2021-44832

摘要

JDBC 附加器在某些配置中容易受到远程代码执行的攻击

CVSS 3.x 分数和向量

6.6 中等 (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H)

受影响的组件

log4j-core

受影响的版本

[2.0-beta7, 2.3.2) ∪ [2.4, 2.12.4) ∪ [2.13.0, 2.17.1)

已修复的版本

2.3.2(适用于 Java 6)、2.12.4(适用于 Java 7)或 2.17.1(适用于 Java 8 及更高版本)

描述

具有写入日志配置访问权限的攻击者可以使用 JDBC 附加器构建恶意配置,该附加器使用数据源引用 JNDI URI,该 URI 可以执行远程代码。通过将 JNDI 数据源名称限制为 java 协议来修复此问题。

缓解措施

升级到 2.3.2(适用于 Java 6)、2.12.4(适用于 Java 7)或 2.17.1(适用于 Java 8 及更高版本)。

在之前的版本中,请确认如果正在使用 JDBC 附加器,则它没有配置为使用除 java 以外的任何协议。

CVE-2021-45105

摘要

查找评估中的无限递归

CVSS 3.x 分数和向量

5.9 中等 (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H)

受影响的组件

log4j-core

受影响的版本

[2.0-alpha1, 2.3.1) ∪ [2.4, 2.12.3) ∪ [2.13.0, 2.17.0)

已修复的版本

2.3.1(适用于 Java 6)、2.12.3(适用于 Java 7)和 2.17.0(适用于 Java 8 及更高版本)

描述

Log4j 版本 2.0-alpha12.16.0(不包括 2.3.12.12.3)没有防止可以使用自引用查找实现的不受控制的递归。当日志配置使用带有上下文查找的非默认模式布局(例如,$${ctx:loginId})时,控制线程上下文映射 (MDC) 输入数据的攻击者可以制作包含递归查找的恶意输入数据,从而导致 StackOverflowError,这将终止进程。这也称为DoS(拒绝服务)攻击。

缓解措施

升级到 2.3.1(适用于 Java 6)、2.12.3(适用于 Java 7)或 2.17.0(适用于 Java 8 及更高版本)。

或者,可以在配置中缓解此无限递归问题

  • 在日志配置中的 PatternLayout 中,将类似 ${ctx:loginId}$${ctx:loginId} 的上下文查找替换为线程上下文映射模式(%X%mdc%MDC)。

  • 否则,在配置中,删除对类似 ${ctx:loginId}$${ctx:loginId} 的上下文查找的引用,这些引用来自应用程序外部的来源,例如 HTTP 标头或用户输入。请注意,此缓解措施在早于 2.12.2(适用于 Java 7)和 2.16.0(适用于 Java 8 及更高版本)的版本中是不够的,因为这些版本中修复的问题仍然存在。

请注意,只有 log4j-core JAR 文件受到此漏洞的影响。仅使用 log4j-api JAR 文件而没有 log4j-core JAR 文件的应用程序不受此漏洞的影响。

致谢

由 Akamai Technologies 的 Hideki Okamoto、与趋势科技的 Zero Day Initiative 合作的趋势科技研究的 Guy Lederfein 和另一位匿名漏洞研究人员独立发现。

CVE-2021-45046

摘要

线程上下文查找在某些配置中容易受到远程代码执行的攻击

CVSS 3.x 分数和向量

9.0 严重 (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H)

受影响的组件

log4j-core

受影响的版本

[2.0-beta9, 2.3.1) ∪ [2.4, 2.12.3) ∪ [2.13.0, 2.17.0)

已修复的版本

2.3.1(适用于 Java 6)、2.12.3(适用于 Java 7)和 2.17.0(适用于 Java 8 及更高版本)

描述

发现,在 Log4j 2.15.0 中解决 CVE-2021-44228 的修复在某些非默认配置中是不完整的。当日志配置使用带有线程上下文查找的非默认模式布局(例如,$${ctx:loginId})时,控制线程上下文映射 (MDC) 的攻击者可以使用 JNDI 查找模式制作恶意输入数据,从而导致某些环境中的信息泄露和远程代码执行,以及所有环境中的本地代码执行。远程代码执行已在 macOS、Fedora、Arch Linux 和 Alpine Linux 上得到证明。

请注意,此漏洞不仅限于 JNDI 查找。任何其他查找也可以包含在线程上下文映射变量中,并且可能会将私人详细信息暴露给任何有权访问日志的人。

请注意,只有 log4j-core JAR 文件受到此漏洞的影响。仅使用 log4j-api JAR 文件而没有 log4j-core JAR 文件的应用程序不受此漏洞的影响。

缓解措施

升级到 Log4j 2.3.1(适用于 Java 6)、2.12.3(适用于 Java 7)或 2.17.0(适用于 Java 8 及更高版本)。

致谢

此问题由 iC Consult 的 Kai Mindermann 和 4ra1n 独立发现。

由 Google 的 Ash Fox、GitHub 的 Alvaro Muñoz 和 Tony Torralba、Praetorian 的 Anthony Weems 以及 RyotaK (@ryotkak) 独立发现的额外漏洞详细信息。

CVE-2021-44228

摘要

JNDI 查找可被利用以执行从 LDAP 服务器加载的任意代码

CVSS 3.x 分数和向量

10.0 严重 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)

受影响的组件

log4j-core

受影响的版本

[2.0-beta9, 2.3.1) ∪ [2.4, 2.12.3) ∪ [2.13.0, 2.17.0)

已修复的版本

2.3.1(适用于 Java 6)、2.12.3(适用于 Java 7)和 2.17.0(适用于 Java 8 及更高版本)

描述

在 Log4j 中,配置、日志消息和参数中使用的 JNDI 功能无法防止攻击者控制的 LDAP 和其他与 JNDI 相关的端点。可以控制日志消息或日志消息参数的攻击者可以执行从 LDAP 服务器加载的任意代码。

请注意,只有 log4j-core JAR 文件受到此漏洞的影响。仅使用 log4j-api JAR 文件而没有 log4j-core JAR 文件的应用程序不受此漏洞的影响。

缓解措施

Log4j 1 缓解措施
警告

Log4j 1 已于 2015 年 达到使用寿命终结,不再受支持。2015 年 8 月之后针对 Log4j 1 报告的漏洞不会被检查,也不会被修复。用户应 升级到 Log4j 2 以获取安全修复。

Log4j 1 不支持查找功能,因此风险较低。仅当 Log4j 1 应用程序在其配置中使用 JNDI 时,才会受到此攻击的影响。此漏洞已提交单独的 CVE(CVE-2021-4104)。为了缓解此问题,请审核您的日志记录配置,以确保其中未配置 JMSAppender。未配置 JMSAppender 的 Log4j 1 配置不受此漏洞影响。

Log4j 2 缓解措施

升级到 Log4j 2.3.1(适用于 Java 6)、2.12.3(适用于 Java 7)或 2.17.0(适用于 Java 8 及更高版本)。

致谢

此问题由阿里云安全团队的陈兆军发现。

CVE-2020-9488

摘要

SMTP 附加程序中证书验证不当,存在主机不匹配问题

CVSS 3.x 分数和向量

3.7 低 (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N)

受影响的组件

log4j-core

受影响的版本

[2.0-beta1, 2.12.3) ∪ [2.13.1, 2.13.2)

已修复的版本

2.12.3 (Java 7) 和 2.13.2 (Java 8 及更高版本)

描述

SMTP 附加程序中证书验证不当,存在主机不匹配问题。这可能允许中间人攻击拦截 SMTPS 连接,从而泄露通过该附加程序发送的任何日志消息。

报告的问题是由 SslConfiguration 中的错误引起的。Log4j Configuration 中使用 SslConfiguration 的任何元素也会受到此问题的影响。这包括 HttpAppenderSocketAppenderSyslogAppender。通过系统属性配置的 SslConfiguration 用法不受影响。

缓解措施

升级到 2.12.3 (Java 7) 或 2.13.2 (Java 8 及更高版本)。

或者,用户可以将 mail.smtp.ssl.checkserveridentity 系统属性设置为 true,以对所有 SMTPS 邮件会话启用 SMTPS 主机名验证。

致谢

此问题由 Peter Stöckli 发现。

CVE-2017-5645

摘要

TCP/UDP 套接字服务器可被利用以执行任意代码

CVSS 2.0 分数和向量

7.5 高 (AV:N/AC:L/Au:N/C:P/I:P/A:P)

受影响的组件

log4j-core

受影响的版本

[2.0-alpha1, 2.8.2)

已修复的版本

2.8.2 (Java 7)

描述

当使用 TCP 套接字服务器或 UDP 套接字服务器从另一个应用程序接收序列化日志事件时,可以发送经过特殊设计的二进制有效负载,该有效负载在反序列化时可以执行任意代码。

缓解措施

Java 7 及更高版本的用户应迁移到 2.8.2 版本或避免使用套接字服务器类。Java 6 用户应避免使用 TCP 或 UDP 套接字服务器类,或者他们可以手动从 2.8.2 中移植 安全修复提交

致谢

此问题由 Telstra 红队的 Marcio Almeida de Macedo 发现。