本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
今天,闲来无事,逛了一下 Apache 的官网。突然发现了 Log4j 还在更新。
不止是再更新,还一次修复了 5 个漏洞。
这 5 个漏洞一下子吸引了我,所以接下来,我们一起来看看这次Apache Log4j 2.25.4 的紧急发布,到底到来了哪些改变。
根据官网上的公告可知,2026 年 3 月 25 日,Apache Log4j 团队发布了 2.25.4 版本。这不是一次普通的补丁更新,官方安全页面显示,该版本一口气修复了5 个 CVE 安全漏洞(CVE-2026-34477 至 CVE-2026-34481),涉及 XML 日志丢失、TLS 中间人攻击、日志注入等高危场景。如果你还在用 2.25.3 或更早版本,建议立即升级。
版本概览
为什么说,这次是“必须升级”呢?看看这次的版本概览,你可能就知道原因了。
Log4j 2.25.4 是一个补丁版本(Patch Release),主要聚焦下面这三类问题。
- 配置一致性修复:恢复文档与实际配置属性的对齐
- 格式化与净化问题:修复 XML 和 RFC5424 布局的字符转义缺陷
- 无效字符处理:改进对非标准值和非法字符的处理机制
但真正的重头戏在安全领域——该版本修复了 5 个 CVE 漏洞,其中多个可导致日志静默丢失或中间人攻击等。
五大安全漏洞详解
文章配图参见 https://mp.weixin.qq.com/s/3Bwjwfa1G6aEHj1cK1SMmA。
XML 布局的隐形杀手
重点涉及 CVE-2026-34480、CVE-2026-34479。
它们的风险等级为 Medium (CVSS 6.9)。影响的版本范围为 2.0-alpha1 至 2.25.3。
漏洞原因是XmlLayout 和 Log4j1XmlLayout 未能正确转义 XML 1.0 规范禁止的字符(如控制字符 \u0000-\u001F)。这会导致下面这两种后果。
- 使用 JRE 内置 StAX:非法字符被静默写入,生成畸形 XML,下游解析器会直接丢弃这些日志记录
- 使用 Woodstox 等第三方库:直接抛出异常,日志事件永远无法到达 Appender
这会导致,如果你的应用通过 MDC 记录用户输入,而攻击者提交了包含非法字符的内容,关键审计日志可能无声无息地消失。
针对这类问题,官方给出的修复方案是升级到最新版本,因为最新的 2.25.4 版本将非法字符替换为 Unicode 替换字符(U+FFFD)。
CVE-2026-34478
这个漏洞,会对 Rfc5424Layout 的 CRLF 注入。
风险等级也为 Medium (CVSS 6.9),影响版本范围为 2.21.0 至 2.25.3。
这是一个“自己坑自己”的漏洞。在 2.21.0 重构 Rfc5424Layout 时,两个关键安全配置属性被静默重命名。
| 原属性名 | 问题后果 |
|---|---|
newLineEscape | 换行转义失效,TCP framing(RFC 6587)用户面临 CRLF 注入风险 |
useTlsMessageFormat | TLS framing(RFC 5425)被降级为无 framing 的 TCP,且没有换行转义 |
指的注意的是,直接使用 SyslogAppender 的用户不受影响,因为 Appender 层的配置属性未被修改。只有手动配置 Rfc5424Layout 的流式 syslog 服务会中招。
CVE-2026-34477
CVE-2026-34477 这个漏洞会让你的 TLS 主机名验证形同虚设。
该漏洞对应的风险等级也为 Medium (CVSS 6.3)。其影响的版本范围是 2.12.0 至 2.25.3。
这是 CVE-2025-68161 的“修复不完整”版本。虽然 2.25.3 修复了通过系统属性 log4j2.sslVerifyHostName 启用主机名验证的问题,但通过 <Ssl> 元素的 verifyHostName 属性配置的方式始终被忽略。
触发该漏洞,需全部满足下面这 3 个攻击条件。
- 使用 SMTP、Socket 或 Syslog Appender
- 通过嵌套
<Ssl>元素配置 TLS - 攻击者能出示受信任 CA 签发的证书
对我们的影响是,你以为开启了主机名验证,实际上并没有。攻击者可实施中间人攻击拦截日志流量。
CVE-2026-34481
CVE-2026-34481 这个漏洞是 JSON 中的非有限浮点数。
其风险等级也是 Medium (CVSS 6.3)。影响的版本范围是 2.14.0 至 2.25.3。
JsonTemplateLayout 在输出 NaN、Infinity、-Infinity 等非有限浮点数时,会生成违反 RFC 8259的非法 JSON。下游系统可能拒绝索引这些记录。
该漏洞的利用条件如下。
- 使用
JsonTemplateLayout - 应用记录包含攻击者控制的浮点值的
MapMessage
功能性修复
除了 5 个安全漏洞之外,下面这些 Bug 也值得关注。
2.25.4 还修复了 10 个功能性问题。
| Issue | 描述 | 影响场景 |
|---|---|---|
| #3975, #4014 | 参数化日志中 null 额外参数不再触发警告 | 大量使用 logger.info("User: {}", user) 且参数可能为 null 的应用 |
| #4022, #4074 | 恢复 Rfc5424Layout 文档中声明的参数名支持 | 依赖官方文档配置 syslog 的运维人员 |
| #3623, #4033 | Pattern Layout 渲染堆栈跟踪时考虑 Throwable#toString() | 自定义异常类的日志输出 |
| #4058, #4060 | Loader 类成功加载资源时添加 DEBUG 日志 | 排查类加载问题的开发者 |
| #4061, #4075 | SslConfiguration 工厂方法对齐 2.12+ API,verifyHostname 属性被正确识别 | 使用程序化配置 TLS 的应用 |
| #4073 | 修复 RFC5424 结构化数据参数名净化 | 使用结构化数据(SD)字段的 syslog 场景 |
| #4077-4080 | XML/JSON 布局的非法字符/非有限浮点数处理 | 所有使用 XML/JSON 输出的应用 |
升级指南
只需要升级版本即可,改动不大。
Maven 配置
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.25.4</version>
</dependency>
Gradle 配置
implementation 'org.apache.logging.log4j:log4j-core:2.25.4'
升级检查清单
下面是官方列举的检查清单。
- 检查是否直接使用
Rfc5424Layout(非通过SyslogAppender) - 检查是否使用
<Ssl verifyHostName="true">配置 - 检查是否使用
XmlLayout或Log4j1XmlLayout - 检查是否使用
JsonTemplateLayout记录浮点数 - 验证升级后日志输出格式是否符合预期(特别是 XML 中的 U+FFFD 替换)
Log4j 的安全演进
下面我们说一下 Log4j 的安全演进。
从 2021 年的 Log4Shell(CVE-2021-44228)到如今的 2.25.4,Log4j 团队的安全响应机制已日趋成熟:
- 漏洞分级更精细:CVSS 4.0 评分体系下,此次漏洞均为 Medium 级别,避免了过度恐慌
- 修复更彻底:CVE-2026-34477 是对之前修复的补完,体现了持续跟进
- 文档与代码对齐:官方强调“权威配置属性列表”已更新至
https://logging.apache.org/log4j/2.x/plugin-reference.html,避免配置漂移
值得注意的是,Log4j 1.x 的兼容桥(log4j-1.2-api)已被标记为废弃,将在 Log4j 3 中移除。还在维护老系统的开发者,是时候规划迁移了。
结语
Log4j 2.25.4 是一次安静但关键的更新。没有惊天动地的 RCE 漏洞,但 XML 日志静默丢失、TLS 验证失效等问题,在 production 环境中同样致命。建议所有使用 2.21.0 及以上版本的用户,在下次发版周期内优先安排升级。

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » Apache Log4j 2.25.4 紧急发布,修复 5 个安全漏洞