Apache Log4j 2.x FilteredObjectInputStream 允许列表绕过 RCE (Log4j #4255)

critical Nessus 插件 ID 341335

简介

远程主机正在运行的 Log4j TCP 日志接收器容易受到未经身份验证的远程代码执行的影响。

描述

远程主机正在运行使用 FilteredObjectInputStream (FOIS) 进行反序列化筛选的 Log4j 2 serialized-LogEvent TCP 接收器(例如 log4j-samples 存储库中随附的 ObjectInputStreamLogEventBridge 示例)。

Log4j 2 FOIS 将 java.rmi.MarshalledObject 列入允许列表,因为 LogEventProxy 将内部消息存储为 MarshalledObject。但是,MarshalledObject.get() 打开第二个未过滤的 ObjectInputStream 来读取其 objBytes 负载,从而破坏过滤器。可连接到接收方 TCP 端口的未经认证的远程攻击者可发送其 marshalledMessage 嵌入 CommonsCollections 小工具链的特别构建的序列化 LogEventProxy。在类路径包含 Commons Collections <= 3.2.1的接收器上反序列化时,这会导致执行任意操作系统命令。

利用所需的条件:
- 应用程序部署未经身份验证的基于 FOIS 的序列化 LogEvent TCP 接收器(无认证、无 TLS)。
- Commons Collections 3.2.1 (或更早版本)位于 JVM 类路径上。
(CC 3.2.2 禁用小工具所依赖的不安全的函子序列化;CC 3.2.2 不受影响。)
- 没有其他拒绝 java.rmi.MarshalledObject 或 MarshalledObject 后代类型的 jdk.serialFilter。

此利用方式为即忘却:接收方会静默处理事件,即使遭到利用,仍会记录“已处理事件正常”。唯一可靠的检测是来自目标的带外回调。

此插件使用两个检测阶段:第一个是 DNS 回调,其中利用命令触发 DNS 查找受 Nessus 控制的主机名;
第二种是直接的 TCP 套接字回调,目标连接回扫描仪并发送唯一的控制标记。任一阶段的确认响应证明服务器端代码执行。

解决方案

应用下列其中一种缓解措施:
1. 将 Commons Collections 升级到 3.2.2 或更高版本(禁用不安全的 Transformer 函子)。
2. 添加 jdk.serialFilter = '!java.rmi.MarshalledObject;...'完全拒绝 MarshalledObject 反序列化。
3. 移除未经身份验证的 TCP 日志接收器或设置防火墙。

另见

https://github.com/apache/logging-log4j2/discussions/4168

https://github.com/apache/logging-log4j2/issues/4255

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

插件详情

严重性: Critical

ID: 341335

文件名: apache_log4j2_4255_fois_bypass_rce.nbin

版本: 1.1

类型: Remote

系列: Misc.

发布时间: 2026/8/28

最近更新时间: 2026/8/28

支持的传感器: Nessus

漏洞信息

CPE: cpe:/a:apache:log4j

可利用: true

易利用性: Exploits are available

被 Nessus 利用: true

漏洞发布日期: 2024/10/1