PuTTY 中允許恢復用戶私鑰的漏洞

PuTTY 是 Windows 平台上流行的 SSH 用戶端,存在一個危險漏洞 (CVE-2024-31497),允許使用 NIST P-521 橢圓曲線 ECDSA 演算法 (ecdsa-sha2-nistp521) 重新建立使用者的私鑰。要選擇私鑰,只需分析有問題的金鑰產生的大約 60 個數位簽章即可。

漏洞從 PuTTY 0.68 版本開始出現,也影響包含 PuTTY 易受攻擊版本的產品,例如 FileZilla (3.24.1 - 3.66.5)、WinSCP (5.9.5 - 6.3.2)、TortoiseGit (2.4.0.2 - 2.15.0)和TortoiseSVN(1.10.0 - 1.14.6)。該問題已在 PuTTY 0.81、FileZilla 3.67.0、WinSCP 6.3.3 和 TortoiseGit 2.15.0.1 更新中修復。安裝更新後,建議使用者產生新金鑰並從其authorized_keys 檔案中刪除舊公鑰。

該漏洞是由於開發人員的粗心造成的,他們使用基於 521 位元隨機序列的初始化向量(nonce)來產生 512 位元金鑰,可能認為 512 位元的熵就足夠了,剩下的 9 位元並不具有根本重要性。因此,在 PuTTY 中使用 ecdsa-sha2-nistp521 演算法建立的所有私鑰中,初始化向量的前 9 位元始終採用零值。

對於 ECDSA 和 DSA,偽隨機數產生器的品質以及用於透過隨機資料計算模數的參數的完整覆蓋至關重要,因為即使確定具有初始化向量資訊的幾個位元也足以承載進行攻擊以順序恢復整個私鑰。要成功恢復金鑰,只需擁有公鑰並分析使用有問題的金鑰產生的數十個數位簽章即可取得攻擊者已知的資料。該攻擊歸結為解決 HNP(隱藏數字問題)問題。

例如,當使用者連接到攻擊者的 SSH 伺服器或使用 SSH 作為傳輸的 Git 伺服器時,可以獲得必要的數位簽章。如果金鑰用於驗證任意數據,也可以找到攻擊所需的簽名,例如,使用 Pageant SSH 代理將流量重定向到開發者主機時的 git commits。在 MITM 攻擊期間取得恢復金鑰所需的資料是不可能的,因為 SSH 中的簽章不是以明文形式傳輸的。

值得注意的是,PuTTY 中對其他類型的橢圓曲線也使用了類似的不完整初始化向量,但對於 ECDSA P-521 以外的演算法,由此產生的資訊外洩不足以實施工作金鑰恢復攻擊。其他大小的 ECDSA 金鑰和 Ed25519 金鑰不易受到攻擊。

來源: opennet.ru

添加評論