資安雷達 2026 年 10 月 19 日

2026-10-19 — Apache Camel 一次修 38 個 CVE,OAuth 驗證失敗會放行請求

primary=https://www.openwall.com/lists/oss-security/2026/10/18/2 primary=https://camel.apache.org/security/CVE-2026-83531.html primary=https://camel.apache.org/security/CVE-2026-80312.html

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 時,會把 Authorization header 帶到 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 清單。

原始來源:oss-security 公告、CVE-2026-83531、CVE-2026-80312


End of article
0
Would love your thoughts, please comment.x
()
x