Java 15以上版本爆加密漏洞:CVE-2022-21449

banq發表於2022-04-21

如果您的伺服器在2022 年 4 月重要補丁更新 (CPU)之前執行任何 Java 15、16、17 或 18 版本,且使用ECDSA 簽名加密:SSL 證照和握手(允許攔截和修改通訊)、簽名的 JWT 、SAML 斷言或OIDC id 令牌,甚至是WebAuthn身份驗證訊息,那麼,攻擊者可以輕鬆偽造攻陷。
現實世界中幾乎所有的 WebAuthn/FIDO 裝置(包括 Yubikeys *)都使用 ECDSA 簽名,許多 OIDC 提供商使用 ECDSA 簽名的 JWT。

如果您在生產環境中部署了 Java 15、Java 16、Java 17 或 Java 18,那麼您應該停止正在執行的操作並立即更新以安裝2022 年 4 月重要補丁更新中的修復程式。

更新:Oracle 的官方公告還列出了 Java 舊版本也可能受到影響,包括 7、8 和 11。
在同一個 CPU 中還報告了其他安全漏洞,因此(一如既往)即使您執行的是較舊的 Java 版本,也值得升級。另一方面,OpenJDK公告僅列出了受此特定問題 (CVE-2022-21449) 影響的版本 15、17 和 18。、

Oracle 對此的 CVSS 評分為 7.5,對機密性或可用性沒有影響, ForgeRock 將其評為完美 10.0 。

背景:ECDSA 簽名
ECDSA 代表Elliptic Curve Digital Signature Algorithm,它是一種廣泛使用的標準,用於簽署各種數字文件。與舊的 RSA 標準相比,橢圓曲線金鑰和簽名往往要小得多,以實現同等安全性,因此它們被廣泛用於大小非常寶貴的情況。例如,用於兩因素身份驗證的 WebAuthn 標準允許裝置製造商從廣泛的簽名演算法中進行選擇,但實際上,迄今為止製造的幾乎所有裝置都僅支援 ECDSA 簽名(一個值得注意的例外是使用 RSA 的 Windows Hello簽名;大概是為了與舊的TPM硬體相容)。

為什麼現在才發現?
您可能想知道為什麼在 Java 長期以來一直支援 ECDSA 的情況下這才被曝光。它一直很脆弱嗎?
不,這是一個相對較新的錯誤,是通過將 EC 程式碼從本機 C++ 程式碼重寫為 Java 引入的,這發生在 Java 15 版本中
儘管這種重寫在記憶體安全性和可維護性方面有好處,但似乎經驗豐富的密碼工程師並未參與實施。
最初的 C++ 實現不容易受到這些錯誤的影響,但重寫卻是。兩種實現似乎都沒有很好的測試覆蓋率,即使是對 ECDSA 規範的最粗略閱讀也肯定會建議測試無效的 r 和 s 值被拒絕。


時間線

  • 2021 年 11 月 11 日– 發現問題並向 OpenJDK 漏洞報告電子郵件地址披露。
  • 2021年11月 11 日– 確定了在 Java 15 中引入錯誤的JDK 更改。
  • 2021 年 11 月 12 日——甲骨文的初步確認。
  • 2021 年 11 月 18 日– Oracle 確認了該錯誤並表示將在未來的重要補丁更新 (CPU) 中對其進行修補。它被分配了跟蹤 ID S1559193。
  • 2021 年 11 月 18 日– ForgeRock釋出安全公告,通知我們的客戶不要將受影響的 Java 版本部署到生產環境中。
  • 2022 年 1 月 14 日– 向 Oracle 詢問狀態更新。告知該修復程式針對 2022 年 4 月的 CPU,計劃於 4 月 19 日釋出。
  • 2022 年 3 月 25 日– 再次與 Oracle 確認修復將在 4 月 CPU 中進行。通知他們,如果到那時該錯誤仍未修復,ForgeRock 將繼續進行全面披露。
  • 2022 年 4 月 19 日– 甲骨文在 4 月 CPU 中釋出了修復程式。
  • 2022 年 4 月 19 日——文章發表。

相關文章