Apache MINA 修補漏進舊分支,兩個漏洞仍在等升級
oss-security 郵件論壇 · 2026-09-21
Apache MINA 在 2026 年 6 月替 CVE-2026-47065 寫的修補,其實只進了 2.2.x 分支;掛在 2.0.x 與 2.1.x 上、以為已經升級到「安全版」的專案,繞過白名單的洞口照樣開著。這件事和另一個新發現的 CVE-2026-47321 解壓縮放大 DoS 一起在 2026 年 9 月 21 日登上 oss-security 郵件論壇,兩則揭露合起來看,才知道同一批 MINA 老分支到底欠了多少債。Apache MINA 常被當成底層 NIO 框架,藏在 SSH 伺服器、FTP 伺服器等更上層的 Java 網路套件裡,很多維護者甚至不知道自己專案間接背著這兩條老分支,升級規劃很容易被忽略。
漏洞機制
CVE-2026-94301 的根因是 resolveProxyClass() 沒有被正確覆寫:MINA 的 acceptMatchers 過濾機制原本要靠這個方法辨識代理類別,一旦沒覆寫,攻擊者就能用 java.lang.reflect.Proxy 包出一個能繞過白名單比對的假類別,直接闖過原本設定好的連線過濾規則。這正是 2026 年 6 月的 CVE-2026-47065(ZDRES-232)想解決的問題;官方公告寫著已經修好,但 patch 實際上只進了 2.2.x 分支的程式碼庫,2.0.x 與 2.1.x 從來沒有真的套用這段覆寫。換句話說,版本號雖然往上跳了,過濾邏輯本身完全沒變。
CVE-2026-47321 則是另一條獨立漏洞,出在 CompressionFilter 處理壓縮資料的方式上。原文寫得很白:inflate 收到的資料時,這個過濾器「不會控制解壓縮後的大小,不管三七二十一就先配好緩衝區」,只要送進一段壓縮比超過 1000:1 的資料,接收端就得被迫配出遠超原始封包大小的記憶體,重複幾次就能把應用程式記憶體吃光,形成放大型阻斷服務攻擊。這個弱點跟 acceptMatchers 繞過無關,純粹是解壓縮流程從一開始就沒設上限。
受影響版本
- CVE-2026-94301(acceptMatchers 繞過):
2.0.0到2.0.30(含官方原以為已修好的2.0.29)、2.1.0到2.1.14(含原以為已修好的2.1.13) - CVE-2026-47321(CompressionFilter 解壓縮放大 DoS):
2.0.0到2.0.28、2.1.0到2.1.12、2.2.0到2.2.7
修補與緩解
| CVE | 機制 | 修復版本 |
|---|---|---|
CVE-2026-94301 | acceptMatchers 經 java.lang.reflect.Proxy 繞過 | 2.0.31 / 2.1.15 |
CVE-2026-47321 | CompressionFilter 解壓縮無上限,放大 DoS | 2.0.29 / 2.1.13 / 2.2.8 |
這次真正補上洞的版本是 2.0.31 與 2.1.15:修補內容就是把先前只存在於 2.2.x 的 resolveProxyClass() 覆寫,原封不動搬進 2.0.x 與 2.1.x 分支,讓這兩條老分支第一次真正擋下代理類別繞過。至於解壓縮放大攻擊,2.0.29、2.1.13 與 2.2.8 都加上了 maxDecompressedSize(可搭配 maxDecompressRatio)參數,讓 CompressionFilter 在展開資料前先設好硬性上限,超過就直接中止,不再無條件配置緩衝區。
還在跑 2.0.x 或 2.1.x 分支的 Java 網路程式維護者,這次不能只看版本號往上跳就安心:要嘛直接升到 2.0.31/2.1.15 拿到 acceptMatchers 的真正修補,要嘛至少確認自己有沒有同時吃到 2.0.29/2.1.13 內建的 maxDecompressedSize 防線。兩件事分屬不同版本號,混著看很容易漏掉其中一個,最保險的做法還是直接跳到各分支的最新修補版。
實務上要先確認自己的 mina-core 依賴不是被上層框架間接鎖死的舊版:如果專案透過 Maven 或 Gradle 引用了內嵌 MINA 的元件,光升級自家 pom.xml 的宣告版本不一定生效,還得檢查是否有其他相依套件把版本鎖回 2.0.28 或 2.1.12 之類的舊號。對還沒辦法立刻升版的團隊,至少要先在 CompressionFilter 上手動掛上 maxDecompressedSize 限制,並檢查 acceptMatchers 設定是不是唯一的存取控管防線,避免單點防禦被繞過後就直接失守,也建議在升級前後各跑一次滲透測試或依賴掃描,確認補丁真的落到自己實際部署的分支上。
原始來源:oss-security:CVE-2026-94301、oss-security:CVE-2026-47321