甲骨文修復(fù) Java “年度加密漏洞”,影響 Java 15 及以上版本
甲骨文于昨日推送了安全更新修復(fù)了一個漏洞,該漏洞允許攻擊者偽造某些種類的 SSL 證書和握手、雙因素認(rèn)證信息,以及由一系列廣泛使用的開放標(biāo)準(zhǔn)產(chǎn)生的授權(quán)憑證。這使得攻擊者可以輕松地對文件和其他數(shù)據(jù)進行數(shù)字簽名。
該漏洞影響了 Java 15 及以上版本中對 ECDSA(橢圓曲線數(shù)字簽名算法)的實現(xiàn)。ECDSA 是一種利用橢圓曲線密碼學(xué)原理對信息進行數(shù)字認(rèn)證的算法。與 RSA 或其他加密算法相比,ECDSA 的一個關(guān)鍵優(yōu)勢是它生成的密鑰較小,非常適合用于包括基于 FIDO 的 2FA、SMAL 和 OpenID 等標(biāo)準(zhǔn)。
這個漏洞的 CVE ID 為 CVE-2022-21449,最初是由 ForgeRock 安全研究員 Neil Madden 所發(fā)現(xiàn)的,他在漏洞說明中寫道:
如果你在這些安全機制中使用 ECDSA 簽名,并且如果你的服務(wù)器在 2022 年 4 月關(guān)鍵補丁更新(CPU)之前運行任何 Java 15、16、17 或 18 版本,攻擊者就可以輕而易舉地完全繞過它們。 如今幾乎所有的 WebAuthn/FIDO 設(shè)備(包括 Yubikeys)都使用 ECDSA 簽名,許多 OIDC 提供商也在使用 ECDSA 簽名的 JWT。
Madden 指出,上述這些受影響的 Java 版本主要是因為它們未能檢查 ECDSA 中的兩個關(guān)鍵變量,以確保它們是非零的。
ECDSA 簽名依賴于一個偽隨機數(shù),通常表示為 K,用于推導(dǎo)兩個額外的數(shù)字 R 和 S。要驗證簽名是否有效,必須檢查涉及 R 和 S 的等式。當(dāng)?shù)仁絻蛇呄嗟葧r,簽名才有效。為了使過程正常工作,R 和 S 都不能為零。
這是因為如果值都是 0,等式兩邊將始終相等,簽名也就一直有效。這意味著只需提交一個空白簽名即可成功通過驗證檢查。
這個 bug 是由相關(guān)代碼從 C++ 改寫成 Java 時引入的,漏洞最早可以追溯到 2020 年 Java 15 發(fā)布的時候。該 bug 在去年 11 月就已被發(fā)現(xiàn)并報告給了甲骨文,而甲骨文在推出的 4 月關(guān)鍵補丁更新(CPU)中修復(fù)了該問題。
甲骨文在通用漏洞評分系統(tǒng)(Common Vulnerability Scoring System)中將該漏洞的嚴(yán)重性評級為 7.5(滿分 10 分),但 Madden 根據(jù)他自己的評估,認(rèn)為該漏洞的嚴(yán)重性評級為 10 分。除了 Madden 認(rèn)為該漏洞十分嚴(yán)重,另一位安全專家 Thomas Ptacek 更是將該漏洞評為 “年度加密漏洞”(crypto bug of the year)。
目前 Java 15 及以上版本并沒有像 Java 早期版本那樣被開發(fā)者廣泛使用。安全公司 Snyk 在 2021 年統(tǒng)計的數(shù)據(jù)顯示,當(dāng)時 Java 15 僅占了 12% 的份額。
本文轉(zhuǎn)自O(shè)SCHINA
本文標(biāo)題:甲骨文修復(fù) Java “年度加密漏洞”,影響 Java 15 及以上版本
本文地址:https://www.oschina.net/news/192162/signatures-in-java