PuTTYチームは4月15日(英国時間)、「PuTTY vulnerability vuln-p521-bias」において、リモートログオンクライアントの「PuTTY」に重大な脆弱性が存在すると発表した。この脆弱性を悪用されると、署名付きメッセージから秘密鍵を取得されるリスクがある。影響範囲はPuTTYだけではなく、関連ツールと鍵ペアに及ぶという。
脆弱性「CVE-2024-31497」の概要
発見された脆弱性は「CVE-2024-31497」として追跡されている。このセキュリティ脆弱性はPuTTYの署名処理に存在する。米国国立標準技術研究所(NIST: National Institute of Standards and Technology)が定めた楕円曲線P-521を使用する楕円曲線デジタル署名アルゴリズム(ECDSA: Elliptic Curve Digital Signature Algorithm)において、PuTTYの生成するノンス(nonce)値に偏りがあるとされる。
DSAのデジタル署名スキームにおいて使用されるノンス(nonce)は、ある一定の範囲内に存在するランダム値とされる。この値に偏りがある場合、複数の署名から秘密鍵を算出することができる。そのため、ノンスには安全なランダム値の使用が求められる。
PuTTYは古いWindowsなどの安全な乱数を生成できない環境に対応するため、秘密鍵とメッセージを入力に含む決定論的方法によりノンス値を生成していた。具体的にはSHA-512を使用して入力からハッシュ値を生成し、これを必要なビット数に丸め込む(剰余演算する)。楕円曲線P-256、P-384の場合はSHA-512のビット数(512)が上回るため演算結果にランダム性を期待できるが、P-521(521ビット)の場合は9ビット不足するため、ノンスの上位9ビットが常に0となり、偏りが発生する。
脆弱性の影響を受ける製品
脆弱性の影響を受けるとされる製品およびバージョンは次のとおり。
- PuTTY バージョン0.68から0.80まで
- FileZilla Client バージョン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 Client バージョン3.67.0
- WinSCP バージョン6.3.3
- TortoiseGit バージョン2.15.0.1
- TortoiseSVN バージョン1.14.7
影響と対策
PuTTYによると、この脆弱性を悪用するには約60枚の電子署名が必要だという。何らかの方法で署名を収集した攻撃者は、計算して得られた秘密鍵を使用して署名を偽装し、サーバに侵入する可能性がある。
この脆弱性は修正前のPuTTYによって生成された楕円曲線P-521を使用する電子署名すべてに影響しており、秘密鍵の安全性もこれら電子署名により失われていると評価できる。そのため、影響を受けるこれら電子署名と鍵ペアはすべて破棄することが推奨されている。
なお、この脆弱性は鍵ペアではなく電子署名に影響している点に注意が必要。鍵ペアを他のソフトウェアから生成していたとしても、この脆弱性の影響を受ける電子署名により秘密鍵が計算できる可能性があるため、その鍵ペアもすでに安全ではない。
影響を受ける製品を使用しているユーザーには、すべての製品をアップデートし、必要に応じて鍵ペアと電子署名を再生成して置き換えることが望まれている。