觀點 · 資訊分享

Apache MINA 與 Camel 同日爆 9.8 分反序列化漏洞:用到的 Java 專案請升級

Apache MINA(CVE-2026-41635)與 Apache Camel 的 JMS 相關元件(CVE-2026-40860)同日公布嚴重漏洞,成因都是反序列化沒有擋住惡意類別,在特定條件下可能導致遠端執行程式碼。請升級到官方修正版。

發布
2026-04-27
篇幅
約 4 分鐘 · 1,644 字
結構
7 節 + 3 題常見問題
標籤
#Apache MINA#Apache Camel#CVE-2026-41635#CVE-2026-40860
Apache MINA 與 Camel 同日爆 9.8 分反序列化漏洞:用到的 Java 專案請升級

一句話看懂:Apache MINA 與 Apache Camel 同一天公布兩個 9.8 分的反序列化漏洞,成因都是收到的物件沒擋住惡意類別;用到的 Java 專案請升級到官方修正版。

Apache MINA 與 Camel 反序列化漏洞資訊圖卡:收到的物件沒擋住惡意類別,特定條件下可能被執行程式碼

先用白話講:什麼是反序列化?

程式之間傳資料,常常要先把物件「打包」成一串位元組(序列化),收到後再「拆包」還原(反序列化)。就像收到一個快遞:拆開前,你最好先確認裡面是什麼,而不是看到什麼就照單全收。

如果拆包時沒有限制「允許拆出哪些類型的東西」,寄件人就可能塞進危險物品,一拆開就出事。這類漏洞就叫不安全的反序列化。

發生什麼事

2026 年 4 月 27 日,GitHub 公布 Apache 的兩份嚴重公告,CVSS 3.1 皆為 9.8:

  • Apache MINA(CVE-2026-41635):AbstractIoBuffer.resolveClass() 有兩條分支,其中一條(處理靜態類別或基本型別)完全沒有檢查類別,繞過了類別白名單,可能導致任意程式碼被執行。受影響的是呼叫 IoBuffer.getObject() 的應用
  • Apache Camel(CVE-2026-40860):camel-jms 等元件在處理收到的 JMS ObjectMessage 時,呼叫 getObject() 反序列化,卻沒有套用任何過濾器或類別白名單

影響範圍與修正版本

元件 受影響版本 修正版本
Apache MINA 2.0.0 到 2.0.27 2.0.28
Apache MINA 2.1.0 到 2.1.10 2.1.11
Apache MINA 2.2.0 到 2.2.5 2.2.6
Apache Camel 3.0.0 到 4.14.6 4.14.7(LTS 4.14.x)
Apache Camel 4.15.0 到 4.18.1 4.18.2
Apache Camel 4.19.x 4.20.0

給開發者的技術細節

  • Camel 的條件:只要 mapJmsMessage 選項啟用(預設就是)、且 Camel 作為 JMS 消費者,就會走到這段程式;官方說明,攻擊者需要能把特製的 ObjectMessage 送進被消費的佇列或主題,且類別路徑上有可利用的 gadget 鏈
  • Camel 受影響的元件:camel-jms、camel-sjms、camel-sjms2、camel-amqp,以及建立在 JmsComponent 上的 camel-activemq、camel-activemq6
  • MINA 的條件:應用有呼叫 IoBuffer.getObject();官方的修正是更早套用類別白名單
  • 可用依賴樹工具(例如 mvn dependency:tree)確認專案實際用到的版本,連同間接依賴一起檢查

我的看法

就算平常不寫 Java,很多企業系統的底層也是這些套件,接案時可能在客戶的老系統裡遇到。最容易被忽略的是「間接依賴」:你沒有直接引用 MINA,但別的函式庫引用了它。

如果你負責維護這類系統,我的建議是:先查依賴版本,再看有沒有真的呼叫會觸發反序列化的功能;順便檢查哪些訊息佇列是外部可以寫入的。這比單純升級更能判斷風險大小。

名詞小辭典

  • 序列化 / 反序列化:把物件轉成可傳輸的位元組,以及把位元組還原回物件。
  • JMS:Java 的訊息服務標準,用來在系統之間透過佇列傳訊息。
  • Gadget 鏈:程式庫裡既有的程式碼片段,被攻擊者串起來達成惡意目的。
  • 白名單(Allowlist):只允許清單內的類別,其餘一律拒絕。

資料來源

常見問題

什麼是反序列化漏洞?
程式把收到的一串資料還原成物件時,如果沒有限制可以還原哪些類別,攻擊者就可能送來精心設計的資料,讓程式在還原過程中執行不該執行的動作。
我的專案要怎麼確認有沒有受影響?
MINA:看你有沒有使用 2.0.28、2.1.11、2.2.6 以前的版本,且呼叫 IoBuffer.getObject()。Camel:看你有沒有使用上述 JMS 系列元件、且 Camel 作為訊息消費者,版本低於 4.14.7、4.18.2 或 4.20.0(依所在版本線而定)。
Camel 的攻擊要滿足什麼條件?
官方說明:攻擊者要能把特製的物件訊息送進 Camel 應用所消費的佇列或主題,且應用的類別路徑上存在可被利用的反序列化「gadget」程式碼鏈。
LINE