本文目录导读:

这是一个非常关键且现实的问题,直接回答是:从技术原理和已知漏洞库来看,Log4j 的核心漏洞(特别是 CVE-2021-44228)已被彻底修复,但“影响范围完全清除干净”在现实世界是一个几乎不可能完成的目标。
可以这样理解:疫苗已经研发出来,但全世界仍有大量没打疫苗的人。
具体原因如下,这解释了为什么直到今天(2025年),Log4j 问题依然被视为一个长期存在的安全债:
漏洞早已彻底修复(技术层面)
- 官方修复: Apache 早在 2021年12月 就发布了 Log4j 2.17.0 及以上版本,彻底移除了 JNDI Lookup 功能和消息查找功能,从根本上杜绝了此类远程代码执行(RCE)漏洞。
- 补丁有效: 只要你的应用使用的是 Log4j 2.17.0+ 或 Log4j 1.x 的特定安全补丁版本,就不存在已知的、能直接远程利用的 Log4j 核心漏洞。
为什么“完全清除”几乎不可能?
核心原因:深度依赖与供应链的惯性
- 埋藏在深层依赖中: 很多企业不是直接使用 Log4j,而是通过框架(如 Spring Boot、Struts2、Elasticsearch、Apache Flink、Kafka 等)间接引入,开发团队可能只升级了“表层”的依赖,但底层框架捆绑的旧版 Log4j 依然存在。
- 遗留系统(Legacy System): 银行、政府、工业控制系统、医疗设备等领域的老旧系统,其部署周期长、变更流程复杂、甚至无人维护,要找到并替换其中所有 Log4j jar 文件,成本极高,甚至需要停机。
- 容器与镜像固化: Docker 镜像或 VM 虚拟机模板在漏洞爆发前被构建,并被大量复制和部署,即使容器运行时打了补丁,但镜像内的旧 Log4j 依然存在,一旦被唤醒或扫描,依然是风险点。
- 物联网(IoT)与嵌入式设备: 路由器、摄像头、智能家电等小型设备,其固件更新周期极慢,甚至不再支持更新。
现实数据佐证:仍有大量“影子资产”
- 根据 2024-2025年 的行业报告(如 Verizon DBIR、Censys 扫描数据),Log4j 仍然是全球互联网上被扫描到的最常见高风险漏洞之一。
- 公开披露的漏洞利用案例: 即使在2023-2024年,仍有多起重大勒索软件攻击和APT攻击利用未修复的 Log4j 漏洞作为初始入侵入口。
- 供应链攻击: 即使一个最终产品更新了,但其使用的第三方组件或库(如某些过时的 Hadoop、Spark 版本)内部可能依然包含旧 Log4j。
唯一的例外:新的攻击面
Log4j 危机后,安全社区和 Apache 自身加强了审计,虽然核心的 JNDI 注入问题已根除,但在 Log4j 1.x(已停止维护)和 2.x 的其他组件中,后续几年又发现了数个中高危漏洞(如 CVE-2022-23302, CVE-2023-26464 等),但这些漏洞的利用条件通常复杂得多(需认证、本地权限等),远不及 2021 年那次的“核弹级”影响力。
该如何应对?
不要认为 Log4j 问题已经过去,你需要做的是:
- 持续扫描(SBOM): 使用软件物料清单(SBOM) 工具(如 Trivy, Grype, Snyk)扫描所有代码仓库、Docker 镜像和虚拟机,查找 org.apache.logging.log4j 的任何版本,特别是低于 2.17.0 的。
- 关注“深度”依赖: 不要只看
pom.xml或build.gradle的顶层,使用mvn dependency:tree或gradle dependencies查看哪些库引入了 Log4j。 - 最小化原则: 在无法升级的极端情况下,删除 JNDI 类(
JndiLookup.class)可能比升级更彻底,或者使用log4j2.formatMsgNoLookups=true环境变量(仅对 2.10~2.15 版本有效)。 - 监控与响应: 即便 2025 年的新系统都是安全的,也需要持续监控网络流量中是否出现针对 Log4j 漏洞的探测或利用特征。
一句话总结:技术漏洞已被消灭,但现实世界中的“未修复实例”数量依然庞大,对于任何未完全掌控自身软件供应链和所有运行资产的系统,Log4j 的影响范围都远未清除。