不是"核弹"。Log4j issue 4255 的FAQ

· 2026-08-27 14:02 · 2 阅读

原创 微步情报局 2026-08-27 14:02 北京

立即查看详情 →

结论

结论:技术链真实,但不是新的 Log4Shell,多数生产环境不受影响。

  1. 风险只存在于「用 Java 序列化接收远程日志」的少数接收端,不是「装了 log4j 就会被打」。建议按「有无序列化日志接收端」排查,而不是全公司升级 log4j。

  2. 是否为Log4j-core的漏洞仍存在争议,根据官方Security文档来看可能属于被拒接的那一类。

  3. 微步威胁感知平台TDP对此issue相关的利用链支持检测

issue 4255是什么

2026 年 8 月 24 日,Apache Log4j2 公开 issue 4255。随后出现公开 PoC 和媒体表述「Log4j 又一次 RCE」。

本质是:Log4j 提供的反序列化白名单工具 FilteredObjectInputStream(FOIS)里放行了 java.rmi.MarshalledObject。Log4j 自己的 LogEvent 序列化格式会在还原时调用 MarshalledObject.get(),用一条没有白名单的流再解一次。于是外层白名单被绕过。

公开 PoC 在「自建接收端 + Commons Collections 等 gadget」条件下可以打成命令执行。链是成立的。

和Log4Shell的区别

Log4Shell(CVE-2021-44228)

issue 4255

触发

应用把用户输入打进日志即可

必须有人在接收并反序列化 LogEvent

默认受影响

大量默认/常见部署中招

默认不影响

官方定性

产品漏洞,出 CVE、紧急修复

目前不是正式漏洞

影响面

「用了 log4j-core 打日志就受影响」

「用 Java 序列化在网络上收日志的接收进程」

结论:不是「日志里出现恶意字符串就 RCE」,而是「有一个收 Java 序列化日志的服务,且对端不可信」。

实际风险有多大

要同时满足才可能被利用:

  1. 存在接收端:对 TCP/HTTP/消息队列做 Java readObject(),对象是 LogEvent(接收日志,而不是往外发日志)。

  2. 对端不可信:公网或内网任意主机能连这个口(无来源限制、无 mTLS)。

  3. 要打成 RCE:接收端 classpath 上还要有反序列化 gadget(如 Commons Collections 3.2.1)。没有 gadget 最多是拒绝服务或伪造日志。

多数业务不受影响,包括:只写文件/控制台、JSON/HTTP/Syslog 收日志、仅配置了 SocketAppender 往外发、普通 logger.info(用户输入)

存在什么争议

Log4j 维护者 Piotr P. Karwasz(ppkarwasz)自己在早 2026-07-01写的加固备忘:https://github.com/apache/logging-log4j2/discussions/4168

其中的 Finding 1 就是 issue 4255,而且当时已经定性为 hardening。

而且官方Security文档也明确对 Log4j 的安全边界进行了定义。issue 4255 描述的是官方 FAQ 已经预判并拒绝的那一类报告。

https://logging.apache.org/security/faq.html#deserialization

Log4cxx, Log4j, and Log4net donot deserialize data fromany source as part of their normal operation.
The hardening utilities we ship are partial andnot exhaustive; bypasses are treated as opportunities for further hardening, notas vulnerabilities inthe project.
The application performing the deserialization is responsible for ensuring that thebyte stream originates froma trusted source.

值得一提的是:

Log4j2-core 里曾带 TcpSocketServer.createSerializedSocketServer。

(参考CVE-2017-5645),大约 2.15 起已从生产库移除。当前 log4j-core不再监听端口、不再从网络反序列化。目前受影响场景主要是:

  • 仍跑 ≤2.14.x 并显式启动了 TcpSocketServer 的老部署;

  • 拷了官方 samples 或自研了「FOIS / ObjectInputStream 收 LogEvent」的网关。

互联网公开的POC(含 HTTP POST /log 打 RCE)都是专门搭的接收端,不是「凡用 log4j 2.x 的系统」都受影响。

排查建议

不建议按 Log4Shell 模式把「log4j-core 2.11–2.26」当全量应急任务。

要做: 找出有没有「序列化 LogEvent 接收端」。

  1. 源代码排查:搜 SerializedLayoutTcpSocketServerObjectInputStreamLogEventBridge。注意:FilteredObjectInputStream 几乎每个 log4j-api 都有,单独命中不算。

  2. 运行中 JVMjps / jcmd GC.class_histogram 看是否加载了接收端类;ss 看 Java 是否对外 listen,再对白名单和安全组。

部分决策建议:

  • 没有接收端:不受影响

  • 只有发送端:去排查接收端是否受影响

  • 加载了接收端且对非信任网络开放:能关则关,这属于是误用 Java 序列化传日志的部署风险。

微步产品支撑

微步威胁感知平台TDP已于20260827支持检测,检测ID:S3100182062模型/规则高于:20260827000000

跳转微信打开