新版 Java 驚現“年度加密漏洞”,網友:還好我只用 Java 8!

新版 Java 驚現“年度加密漏洞”,網友:還好我只用 Java 8!

整理 | 蘇宓

出品 | CSDN(ID:CSDNnews)

Java 作為當前最流行的程式語言之一,常被用於企業級應用開發中。

近日,安全公司 ForgeRock 的研究員 Neil Madden 發現在 Java 15、16、17、18 版本的 ECDSA(橢圓曲線數字簽名演算法)簽名驗證中存在一個嚴重漏洞,駭客可以透過該漏洞輕鬆地偽造 TSL 證書和簽名、雙因素身份驗證訊息等,以及對檔案和其他資料進行數字簽名。

對此,Neil Madden 甚至將該漏洞比作科幻劇《神秘博士》中經常出現的空白紙:

《神秘博士》中有一個反覆出現的情節裝置,即醫生通過出示一張實際上完全空白的“紙”來擺脫困境。這種紙也被稱之為“通靈紙”,這使得看著它的人可以看到醫生想讓他們看到的任何東西,如:安全通行證、搜查令或其他。

這場景放在 Java 這門語言上,意味著駭客可以透過有問題的 Java 版本,向用戶展示“非常真實”的加密通訊、身份驗證令牌、程式碼更新等等,而使用者根本察覺不到有任何的異常。

不過好在 Oracle 釋出了一則《重要補丁更新公告-2022 年 4 月》的說明,在 520 個新安全補丁中,對於 Java 漏洞也進行了修復,在此也呼籲使用 Java 15、16、17、18 的開發者或企業儘快進行更新。

ECDSA 漏洞

所謂 ECDSA,是指使用橢圓曲線密碼(ECC)對數字簽名演算法(DSA)的模擬。與 RSA 或其他加密演算法相比,ECDSA 的一個關鍵優勢是它生成的金鑰更小,使其非常適合用於包括基於 FIDO 的 2FA、安全斷言標記語言(SAML)、OpenID 和 JSON 在內的標準中。

針對這一漏洞,Oracle 將其編號為 CVE-2022-21449,嚴重性評級為 7。5(滿分 10)。不過,安全公司 ForgeRock 最早在 2021 年 11 月 11 日發現此問題時,將其評為 10 級漏洞。

Madden 解釋道,“很難誇大這個漏洞的嚴重性。如果你將 ECDSA 簽名用於這些安全機制(SSL、JWT、WebAuthn)中的任何一個,並且如果你的伺服器在 2022 年 4 月重要補丁更新 (CPU)之前執行任何 Java 15、16、17 或 18 版本,那麼攻擊者可以輕而易舉地完全繞過它們。現實世界中幾乎所有的 WebAuthn/FIDO 裝置(包括 Yubikey)都使用 ECDSA 簽名,許多 OIDC 提供商使用 ECDSA 簽名的 JWT。”

與此同時,來自 Infosec 的專家 Thomas Ptacek 甚至將這一漏洞描述為“年度加密漏洞”。因為這個漏洞非常容易被利用,而且存在明顯的程式設計錯誤。

漏洞原理

簡單來看,ECDSA 簽名由兩個值組成,稱之為 r 和 s。要驗證簽名是否有效,必須檢查涉及 R 和 S 的等式,即簽名者的公鑰,以及訊息的加密雜湊。

根據安全公司 Sophos 解釋,驗證步驟如下:

S1:選擇一個介於 1 和 N-1 之間的密碼健全的隨機整數 K。

S2:使用橢圓曲線乘法從 K 計算 R。

S3:萬一 R 為零,請返回步驟 1 並重新開始。

S4:從 K、R、要簽名的雜湊和私鑰計算 S。

S5:萬一 S 為零,請返回步驟 1 並重新開始。

理論上,當等式兩邊相等時,可以驗證透過,簽名有效。如果不對等,那說明對方不是自己人,不值得信任。但是這個相等也是有前提的,就是 r 和 s 的值不能為零。這是因為如果 r 或者 s 有任何一個值等於 0,那麼透過驗證的公式,只會有以下結果:0 = 0 X(來自私鑰和雜湊的其他值),無論 X 的值是什麼,等式都會成立。這意味著開發者只需提交一個空白簽名即可成功透過驗證檢查。固然,這個值不能為零。

而此次 Java 中 ECDSA 的漏洞也是出現在這裡,其應用的簽名驗證沒有檢查 R 或 S 值是否為零。

值得慶幸的是,Java 15 及以上版本應用率並不像早期版本那麼廣泛。據安全公司 Snyk 在 2021 年 2 月和 3 月收集的資料顯示,企業採用 Java 15 的僅佔 12%。多數企業還停留在 Java 8 等舊版本中。不過,使用任何受影響的 Java 版本也需要及時更新 Oracle 最新發布的補丁,詳見:https://www。oracle。com/security-alerts/cpuapr2022。html。

參考:

https://neilmadden。blog/2022/04/19/psychic-signatures-in-java/

https://www。theregister。com/2022/04/20/java_authentication_bug/

END

新版 Java 驚現“年度加密漏洞”,網友:還好我只用 Java 8!

頂部