TeraTermProject / teraterm

Other
465 stars 38 forks source link

CVE-2024-31497 #202

Closed nmaya closed 5 months ago

nmaya commented 5 months ago

TTSSH に影響があるかどうか要判断

nmaya commented 5 months ago

Tera Term(TTSSH)を使った場合の影響 cf. https://twitter.com/ttdoda/status/1780184386501259605 以下のツリーより

ttdoda commented 5 months ago

一応補足しておくと、

TTSSH に直接 ppk を食わせて認証しているなら問題ない。

TTSSHではECDSA鍵での署名にOpenSSL/LibreSSLのECDSA_do_sign()を使っています。 なのでECDSA_do_sign()に同様の問題が有った場合は影響を受ける事になります。 ただその場合はOpenSSL/LibreSSLの脆弱性となり、本当にあるならばすでに脆弱性として報告されているだろうから、恐らく問題無いと判断しています。 ECDSA_do_sign()の実装までは確認していません。

nmaya commented 5 months ago

補足ありがとうございます。 少し追いかけてみました。

LibreSSL 3.9.1

おそらく行き着くのは crypto/ecdsa/ecdsa.c の ecdsa_sign_sig() だろうと思います。 コメントによると FIPS 186-5 の手順を行っているようです。

OpenSSL 3.3.0

おそらく行き着くのは crypto/ec/ecdsa_ossl.c の ossl_ecdsa_simple_sign_sig() だろうと思います。 ossl_gen_deterministic_nonce_rfc6979() という関数が存在しますが、nonce_type に 0 が渡されるのでこの関数は使われなそうです。

その場合はOpenSSL/LibreSSLの脆弱性となり、本当にあるならばすでに脆弱性として報告されているだろうから、恐らく問題無い

私もそう思います。 PuTTY は RFC6979 を実装した関数に切り替えましたが、違う実装だと必ず危険というわけではないのだろうと思います。

ttdoda commented 5 months ago

廃止されたdsa_gen_k()の何が問題だったかというと、nonceの生成にSHA-512を使っていたけれど、SHA-512の出力の512ビットではP-521に必要な521ビットに9ビット足りないので9ビット分が常に0になってしまっていたという事のようです。 c.f. https://twitter.com/lambdafu/status/1779969509522133272

長さが足りない場合は必要な長さが得られるまで処理を繰り返せばいいのですが、dsa_gen_k()は元々DSA用だった為、DSAで必要な160ビットにはSHA-512の出力は十分な長さが有るので、足りなかった場合の処理が省略されたのだと思います。 P-256やP-384でも問題が出ずP-521の時のみ問題となったのは一回のSHA-512の出力で長さが足りなくなるのはP-521だけだからという事です。 なので、利用するハッシュ関数の出力で長さが足りない時に処理を繰り返すようになっていれば今回の問題は発生しないと思います。

nmaya commented 5 months ago

Tera Term (TTSSH) 自体は CVE-2024-31497 の問題を持たないが、認証に Pageant を用いて P-521 の ECDSA の鍵を利用している場合には影響を受ける。 使用している場合は PuTTY (Pageant) のアップデートを推奨する。

ということで close します。