
この脆弱性は、ecc-ssh.c ファイルにおける ECDSA ノンス生成の偏りを悪用します。ノンスは $sha512(ID\ ||\ sha512(privKey)\ ||\ sha1(data))\ mod\ q$ で生成され、上位9ビットがゼロになります。秘密鍵を復元するには60個の署名が必要ですが、58個でも成功確率は50%です。
脆弱性は Bäumer と Marcus Brinkmann によって発見されました。
このエクスプロイトを使用するには、sagemath と requirements.txt 内の Python 依存関係がインストールされている必要があります。
PuTTY または TortoiseGit を使用してコミット内容に署名した、検証済みの GitHub コミット60個から ECDSA 署名を抽出します。
別の攻撃方法として、不正な SSH サーバーを立てて被害者を (PuTTY または Pageant を使用して) 接続させ、数回の接続後に60個の署名を取得することで秘密鍵を復元する方法もあります。
署名ファイルには、メッセージハッシュ、スペース、および r と s の連結された値が含まれている必要があります。
pubkey ファイル入力は、raw、PEM、DER、または OpenSSH 形式にできます。
この PoC は、On Bounded Distance Decoding with Predicate: Breaking the "Lattice Barrier" for the Hidden Number Problem という論文の malb による実装の一部を使用しています。