Apache Camel 一次修 38 個 CVE,OAuth 驗證失敗會放行請求
oss-security(Apache Camel PMC) · 2026-10-18(advisory 發布於 2026-10-15)
Apache Camel 在同一批 advisory 裡一次補上 38 個 CVE,其中 camel-oauth 的驗證檢查會「失敗後照樣往下走」,等於把原本該擋人的守門元件變成擺設。修補版本是 4.18.5、4.22.1 與 4.23.0。
Camel PMC 於 10 月 15 日發布這批 advisory,並在 10 月 18 日寄到 oss-security。4.14.x 已終止維護,不會拿到修補。
漏洞機制
這批漏洞大致分成幾種重複出現的寫法問題,不是 38 個互不相干的 bug。最值得先看的是「驗證與授權失效」。CVE-2026-80312(HIGH):camel-oauth 的 processor 在無法完成驗證時,是把控制權交還給 route,而不是中止 exchange,所以驗證失敗的請求會被當成成功處理。advisory 說明這發生在要求 OAuth 的 route 的一般請求路徑上,caller 不需要任何特殊設定或事先權限。
同類的還有 CVE-2026-80343(Netty-HTTP 的 security constraint 比對路徑區分大小寫,但 route 分派不區分,改變路徑大小寫就能繞過)與 CVE-2026-84181(Shiro 在執行緒上已綁定的 subject 與傳入 principal 相符時,不驗證所呈現的憑證)。
程式碼執行與反序列化
CVE-2026-83531(HIGH)影響 4.4.0 起引入的 dynamic-router-control endpoint。處理 subscribe 或 update 時,DynamicRouterControlProducer 直接從訊息取出述詞(predicate)與編譯它所用的表達式語言,來源是 DynamicRouterControlMessage 的欄位或 CamelDynamicRouterPredicate、CamelDynamicRouterExpressionLanguage header,沒有 allow-list 也沒有 opt-in。
只要某條 route 把外部傳輸收到的訊息轉給控制 endpoint,任何能在該傳輸上送訊息的人就能指定表達式,以 Camel 行程的權限執行。advisory 特別指出:simple 語言一定在 classpath 上,所以「移除可選的表達式語言」不是有效緩解。
另一個 HIGH 是 CVE-2026-78165:camel-spring-redis 預設的 JdkSerializationRedisSerializer 讀取 Redis payload 時沒有 ObjectInputFilter,能對訂閱頻道發布訊息的人可達成遠端程式碼執行。
其他反覆出現的類型
- 路徑穿越:
CVE-2026-79983、CVE-2026-79984、CVE-2026-79985、CVE-2026-79986,分別是 FTP、Mina-SFTP、SMB、Azure-Files。consumer 用伺服器目錄列表中的檔名組出遠端路徑,沒有限制在輪詢目錄內,惡意條目可讓檔案在目錄外被讀取、刪除或改名。 - XXE:
CVE-2026-85250(XPath)、CVE-2026-88901(Smooks)為 HIGH,CVE-2026-91858(FOP)為 MEDIUM。 - 憑證外洩:
CVE-2026-85251,camel-http開啟followRedirects時,會把Authorizationheader 帶到Location指定的任何主機。CVE-2026-78164則是 HTTP producer 會解析訊息所帶CamelHttpUri內的 property placeholder,讓設定值與 vault 機密被展開進外送請求。 - 不完整的舊修補:
CVE-2026-78162(Hazelcast,補CVE-2026-43865的漏網路徑)與CVE-2026-85314(Mail,補CVE-2026-46584)。
修補前後的行為差異
Dynamic Router 的修補是少數會改預設行為的一項,值得拿出來比較。
| 修補前 | 修補後(4.23.0 / 4.22.1 / 4.18.5) | |
|---|---|---|
| 訊息自帶 predicate 與語言 | 直接編譯並加入規則庫 | 預設以 IllegalArgumentException 拒絕 |
| 開關 | 無 | allowPredicateFromMessage,預設 false,只能由 route 作者在 endpoint URI 設定 |
| Endpoint 限制 | 無 | 4.23.0 與 4.22.1 多了 allowedSchemes(預設未設定);4.18.5 只有 allowPredicateFromMessage |
該選項只在每個控制訊息的發送者都可信時才應開啟,並且不會從任何訊息 header 映射,只有 route 作者能啟用。
影響範圍
所有 advisory 的受影響範圍都是「從某版本起、4.18.5 之前」以及「4.19.0 起、4.22.1 之前」,起點依元件而異:Spring-Redis 從 2.11.0,OAuth 從 4.11.0,Dynamic Router 從 4.4.0。多數元件從 4.0.0 起就受影響。
- 跑
4.14.x或更舊的人:沒有修補可用,必須換到受支援的版本線。 - route 前面用
camel-oauth守門的服務:升級前,在 OAuth processor 之後加一道明確的授權檢查,並確認驗證失敗時 route 確實停止,這是 advisory 給的暫行做法。 - 用到 dynamic-router-control 且控制訊息依賴自帶 predicate 的應用:升級後行為會變,必須自行評估是否設定
allowPredicateFromMessage=true。 - 用
camel-mllp處理 HL7 的團隊:CVE-2026-85260指出logPhi預設為true,HL7 內容預設就寫進日誌,而且有兩條程式路徑不論設定一律記錄。升級後也要檢查既有日誌。
修補內容在各 advisory 的 Notes 裡有對應的 PR 與 commit,例如 Dynamic Router 的修補是 PR #25992(1d5d3e983c3a3fb64b6bfe238d614726191ee977),OAuth 的是 PR #25567。其餘 CVE 的細節請查閱 Camel 安全 advisory 清單。