Apache Log4j 2.x FilteredObjectInputStream 允許清單繞過 RCE (Log4j #4255)

critical Nessus Plugin ID 341335

概要

遠端主機正在執行 Log4j TCP 記錄接收器,該接收器容易受到未經驗證的遠端程式碼執行的影響。

說明

遠端主機正在執行使用 FilteredObjectInputStream (FOIS) 進行還原序列化篩選的 Log4j 2 序列化 LogEvent TCP 接收器 (例如 log4j-samples 存放庫中隨附的 ObjectInputStreamLogEventBridge 範例)。

Log4j 2 FOIS 會將 java.rmi.MarshalledObject 列入允許清單,因為 LogEventProxy 會將內部訊息儲存為 MarshalledObject。不過,MarshalledObject.get() 會開啟第二個 UNFILTERED ObjectInputStream 來讀取其 objBytes 承載,從而擊敗篩選器。可連線至接收端 TCP 連接埠的未經驗證的遠端攻擊者可傳送特製的序列化 LogEventProxy,其 marshalledMessage 內嵌 CommonsCollections 小工具鏈。當在類別路徑包含 Commons Collections <= 3.2.1的接收器上進行反序列化時,這會導致任意作業系統命令執行。

利用所需的條件:
- 應用程式部署未經驗證的 FOIS 型序列化 LogEvent TCP 接收器 (無驗證,無 TLS)。
- Commons Collections 3.2.1 (或更早版本) 位於 JVM 類別路徑上。
(CC 3.2.2 會停用小工具所依賴的不安全函子序列化;CC 3.2.2 不受影響。
- 沒有其他 jdk.serialFilter 拒絕 java.rmi.MarshalledObject 或 MarshalledObject 子代類型。

該漏洞利用是一勞永逸的:接收者以靜默方式處理事件,即使被利用也會記錄「已處理的事件正常」。唯一可靠的偵測是來自目標的頻外回呼。

此外掛程式使用兩個偵測階段:首先是 DNS 回呼,其中惡意利用命令會觸發 Nessus 控制的主機名稱的 DNS 查詢;
其次,直接 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

Plugin 詳細資訊

嚴重性: 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