OpenSSH 8.3 がリリースされました

2020/05/27, OpenSSH 8.3 がリリースされました.

https://www.openssh.com/txt/release-8.3

Future deprecation notice
=========================

将来廃止される機能の告知
(訳注: 8.2 のリリースノートにもほぼ同じ内容が含まれている)

It is now possible[1] to perform chosen-prefix attacks against the
SHA-1 algorithm for less than USD$50K. For this reason, we will be
disabling the "ssh-rsa" public key signature algorithm by default in a
near-future release.

USドル 50K より少ない金額で SHA-1 アルゴリズムに対する選択プレフィックス
攻撃が実行できることが [1] で示されている. このため, 我々は
近い将来のリリースで "ssh-rsa" 公開鍵署名アルゴリズムをデフォルトでは
無効にする予定だ.

This algorithm is unfortunately still used widely despite the
existence of better alternatives, being the only remaining public key
signature algorithm specified by the original SSH RFCs.

このアルコリズムは, よりよい代替アルゴリズムがあるにもかかわらず
もともとの SSH RFC で定義された公開鍵署名アルゴリズムのの中で
ただ1つ残ったアルゴリズムとして,
不幸なことにいまだ広く用いられている.

The better alternatives include:

次に示すものがよりよい代替だ:

 * The RFC8332 RSA SHA-2 signature algorithms rsa-sha2-256/512. These
   algorithms have the advantage of using the same key type as
   "ssh-rsa" but use the safe SHA-2 hash algorithms. These have been
   supported since OpenSSH 7.2 and are already used by default if the
   client and server support them.

   RFC8332 の RSA SHA-2 署名アルゴリズム rsa-sha-256/512.
   これらのアルゴリズムは "ssh-rsa" と同じ鍵タイプを用いる利点があり
   安全な SHA-2 ハッシュアルゴリズムを用いている. これらは
   OpenSSH 7.2 以降でサポートされており, クライアントとサーバが
   サポートしているならすでにデフォルトで用いられている.

 * The ssh-ed25519 signature algorithm. It has been supported in
   OpenSSH since release 6.5.

   ssh-ed25519 署名アルゴリズム. OpenSSH 6.5 以降でサポートされている.

 * The RFC5656 ECDSA algorithms: ecdsa-sha2-nistp256/384/521. These
   have been supported by OpenSSH since release 5.7.

   RFC5656 の ECDSA アルゴリズム: ecdsa-sha2-nistp256/384/521. These
   これらは OpenSSH 5.7 以降でサポートされている.

To check whether a server is using the weak ssh-rsa public key
algorithm, for host authentication, try to connect to it after
removing the ssh-rsa algorithm from ssh(1)'s allowed list:

サーバが, ホストの認証のために, 弱い ssh-rsa 公開鍵アルゴリズムを
利用しているか検査するには, ssh(1) の許可リストから ssh-rsa
アルゴリズムを除いたあとで接続を試行すればよい.

    ssh -oHostKeyAlgorithms=-ssh-rsa user@host

If the host key verification fails and no other supported host key
types are available, the server software on that host should be
upgraded.

ホスト鍵検証が失敗し他にサポートされたホスト鍵の種類がない場合,
ホストのサーバソフトウェアをアップグレードする必要がある.

A future release of OpenSSH will enable UpdateHostKeys by default
to allow the client to automatically migrate to better algorithms.
Users may consider enabling this option manually. Vendors of devices
that implement the SSH protocol should ensure that they support the
new signature algorithms for RSA keys.

OpenSSH の将来のリリースでは, クライアントがよりよいアルゴリズムに
自動的に移行できるようにする UpdateHostKeys 設定項目をデフォルトで有効にする.
ユーザはこの設定項目をマニュアルで有効にしてもよい. (訳注: この節の
次の文が 8.3 で追記された) SSH プロトコルを実装するデバイスのベンダは
RSA 鍵に対する新しい署名アルゴリズムをサポートすることを保証すべきだ.

[1] "SHA-1 is a Shambles: First Chosen-Prefix Collision on SHA-1 and
    Application to the PGP Web of Trust" Leurent, G and Peyrin, T
    (2020) https://eprint.iacr.org/2020/014.pdf

Security
========

セキュリティ

 * scp(1): when receiving files, scp(1) could be become desynchronised
   if a utimes(2) system call failed. This could allow file contents
   to be interpreted as file metadata and thereby permit an adversary
   to craft a file system that, when copied with scp(1) in a
   configuration that caused utimes(2) to fail (e.g. under a SELinux
   policy or syscall sandbox), transferred different file names and
   contents to the actual file system layout.

   scp(1): ファイルを受け取る際, utimes(2) システムコールが失敗すると
   scp(1) は 非同期になる可能性がある. この時ファイルの内容が
   ファイルのメタデータとして解釈される可能性があり, それゆえ
   ファイルシステムを加工する攻撃を許してしまう.
   (例えば SELinux のポリシー や システムコールサンドボックスによって)
   utimes(2) が失敗しうる設定で scp(1) でのコピーされたファイルが,
   実際のファイルシステムの配置とは異なるファイル名や内容でコピーされる.

   Exploitation of this is not likely as utimes(2) does not fail under
   normal circumstances. Successful exploitation is not silent - the
   output of scp(1) would show transfer errors followed by the actual
   file(s) that were received.

   この問題は, utimes(2) は通常の環境で失敗しないので, 発生する蓋然性は低い.
   問題が発生したときはわかりやすい - scp の出力は, 実際に転送されたファイル(群)
   に続いて転送エラーを表示するだろう.

   Finally, filenames returned from the peer are (since openssh-8.0)
   matched against the user's requested destination, thereby
   disallowing a successful exploit from writing files outside the
   user's selected target glob (or directory, in the case of a
   recursive transfer). This ensures that this attack can achieve no
   more than a hostile peer is already able to achieve within the scp
   protocol.

   最後に, 相手方から転送されたファイル名は (openssh-8.0 から)
   ユーザの要求した転送先に一致するので, ユーザが選択した対象の
   glob (ないし, 再帰転送の場合は, ディレクトリ) の外側で
   この問題が発生することはない. これは, この攻撃によって悪意のある
   相手方が scp プロトコル内で達成できること以上のことはできないことを
   保証します.

Potentially-incompatible changes
================================

潜在的に非互換な変更

This release includes a number of changes that may affect existing
configurations:

このリリースは, 既存の設定に変更しうる変更を含んでいる.

 * sftp(1): reject an argument of "-1" in the same way as ssh(1) and
   scp(1) do instead of accepting and silently ignoring it.

   sftp(1): コマンドライン引数 "-1" を ssh(1) と scp(1) と同様に拒否する.
   これまでは受け入れて静かに無視していた.

Changes since OpenSSH 8.2
=========================

OpenSSH 8.2 からの変更

The focus of this release is bug fixing.

このリリースの焦点はバグ修正だ.

New Features
------------

新機能

 * sshd(8): make IgnoreRhosts a tri-state option: "yes" to ignore
   rhosts/shosts, "no" allow rhosts/shosts or (new) "shosts-only"
   to allow .shosts files but not .rhosts.

   ssh(8): IgnoreRhosts は 3つの状態を持つ設定項目となる. "yes" は
   rhosts/shosts を無視する. "no" は rhosts/shosts を利用可能とする.
   (新しい) "shosts-only" は .shosts を利用可能とするが, .rhosts は
   そうしない.

 * sshd(8): allow the IgnoreRhosts directive to appear anywhere in a
   sshd_config, not just before any Match blocks; bz3148

   sshd(8): IgnoreRhosts 設定項目を, すべての Match ブロック の前ではなく
   sshd_config のどこに配置してもよいようにする. bz3148

 * ssh(1): add %TOKEN percent expansion for the LocalFoward and
   RemoteForward keywords when used for Unix domain socket forwarding.
   bz#3014

   ssh(1): ユニックスドメインソケット転送で利用する際の %TOKEN (%h など)
   の展開を LocalFoward と RemoteForward で追加する. bz#3014

 * all: allow loading public keys from the unencrypted envelope of a
   private key file if no corresponding public key file is present.

   all: 秘密鍵ファイルがあって対応する公開鍵がない場合に, 秘密鍵ファイルの
   暗号化されていない envelope から公開鍵をロードできるようにする.

 * ssh(1), sshd(8): prefer to use chacha20 from libcrypto where
   possible instead of the (slower) portable C implementation included
   in OpenSSH.

   ssh(1), sshd(8): chacha20 の利用時に, 可能ならば
   (より遅い) OpenSSH に含まれる (より遅く) 移植性のある C の実装よりも
   libcrypto を利用する.

 * ssh-keygen(1): add ability to dump the contents of a binary key
   revocation list via "ssh-keygen -lQf /path" bz#3132

   ssh-keygen(1): "ssh-keygen -lQf /path" によって バイナリ 鍵
   失効リストの内容を出力できるようにする. bz#3132

Bugfixes
--------

バグ修正

 * ssh(1): fix IdentitiesOnly=yes to also apply to keys loaded from
   a PKCS11Provider; bz#3141

   ssh(1): PKCS11Provider からロードされた鍵に対しても IdentitiesOnly=yes
   を適用するように修正する; bz#3141

 * ssh-keygen(1): avoid NULL dereference when trying to convert an
   invalid RFC4716 private key.

   ssh-keygen(1): 不正な RFC4716 秘密鍵を変換しようとする際に
   NULL の参照を外さないようにする.

 * scp(1): when performing remote-to-remote copies using "scp -3",
   start the second ssh(1) channel with BatchMode=yes enabled to
   avoid confusing and non-deterministic ordering of prompts.

   scp(1): "scp -3" を用いて リモート-リモート コピーを実行する際,
   プロンプトの混乱を招き非決定的な順番を回避できるよう
   2番目の ssh(1) チャンネルを BatchMode=yes で開始する.

 * ssh(1), ssh-keygen(1): when signing a challenge using a FIDO token,
   perform hashing of the message to be signed in the middleware layer
   rather than in OpenSSH code. This permits the use of security key
   middlewares that perform the hashing implicitly, such as Windows
   Hello.

   ssh(1), ssh-keygen(1): FIDO トークンを用いてチャレンジに署名する際,
   OpenSSH のコードよりもミドルウェアの層で署名されたメッセージの
   ハッシュ化を優先して行なうようにする.  Windows ハローのような, 
   ハッシュを暗黙的に実行するセキュリティ鍵ミドルウェアの利用が
   できるようになる.

 * ssh(1): fix incorrect error message for "too many known hosts
   files." bz#3149

   ssh(1): "too many known hosts files" に対する間違った
   エラーメッセージを修正する. bz#3149

 * ssh(1): make failures when establishing "Tunnel" forwarding
   terminate the connection when ExitOnForwardFailure is enabled;
   bz#3116

   ssh(1): ExitOnForwardFailure が有効な場合に "トンネル" 転送の確立に失敗したら
   接続を終了するようにする; bz#3116

 * ssh-keygen(1): fix printing of fingerprints on private keys and add
   a regression test for same.

   ssh-keygen(1): 秘密鍵の指紋の出力を修正し, 回帰テストを追加する.

 * sshd(8): document order of checking AuthorizedKeysFile (first) and
   AuthorizedKeysCommand (subsequently, if the file doesn't match);
   bz#3134

   sshd(8): AuthorizedKeysFile (最初にチェックする) と AuthorizedKeysCommand
   (ファイルがマッチしなかったら, 次に) の順番を文書化する. bz#3134

 * sshd(8): document that /etc/hosts.equiv and /etc/shosts.equiv are
   not considered for HostbasedAuthentication when the target user is
   root; bz#3148

   sshd(8): 対象ユーザが root の場合に HostbasedAuthentication で
   /etc/hosts.equiv と /etc/shosts.equiv が考慮されないことを文書化する;
   bz#3148

 * ssh(1), ssh-keygen(1): fix NULL dereference in private certificate
   key parsing (oss-fuzz #20074).

   ssh(1), ssh-keygen(1): 秘密証明書鍵のパース時の NULL の参照外しを
   修正する (oss-fuzz #20074).

 * ssh(1), sshd(8): more consistency between sets of %TOKENS are
   accepted in various configuration options.

   ssh(1), sshd(8): %TOKENS の集合の間の一貫性を
   いろいろな設定オプション間でより一致するようにする.

 * ssh(1), ssh-keygen(1): improve error messages for some common
   PKCS#11 C_Login failure cases; bz#3130

   ssh(1), ssh-keygen(1):  PKCS#11 C_Login 失敗のいくつかの場合の
   エラーメッセージを改善する; bz#3130

 * ssh(1), sshd(8): make error messages for problems during SSH banner
   exchange consistent with other SSH transport-layer error messages
   and ensure they include the relevant IP addresses bz#3129

   ssh(1), sshd(8): SSH バナー交換時の問題のエラーメッセージを
   他の SSH トランスポート層エラーメッセージと一貫するようにし,
   関連する IPアドレスを含むようにする. bz#3129

 * various: fix a number of spelling errors in comments and debug/error
   messages

   いろいろ: コメントや debug/error メッセージ中のスペルミスを多数
   修正する.

 * ssh-keygen(1), ssh-add(1): when downloading FIDO2 resident keys
   from a token, don't prompt for a PIN until the token has told us
   that it needs one. Avoids double-prompting on devices that
   implement on-device authentication.

   ssh-keygen(1), ssh-add(1): FIDO2 resident 鍵をトークンから
   ダウンロードする際, トークンが PIN が必要だと言うまでは
   PIN のプロンプトを表示しない. デバイスの認証を実装しているデバイスでの
   2重プロンプトを避ける.

 * sshd(8), ssh-keygen(1): no-touch-required FIDO certificate option
   should be an extension, not a critical option.

   sshd(8), ssh-keygen(1): 接触が必要ない FIDO 証明書オプションは
   拡張とする必要がある. 必須のオプションではない.

 * ssh(1), ssh-keygen(1), ssh-add(1): offer a better error message
   when trying to use a FIDO key function and SecurityKeyProvider is
   empty.

   ssh(1), ssh-keygen(1), ssh-add(1): FIDO 鍵関数を利用しようとして
   SecurityKeyProvider が空の場合のエラーメッセージを改善する.

 * ssh-add(1), ssh-agent(8): ensure that a key lifetime fits within
   the values allowed by the wire format (u32). Prevents integer
   wraparound of the timeout values. bz#3119

   ssh-add(1), ssh-agent(8): 鍵の有効時間は wire format (u32) で
   許可されている値の範囲内に収まることを保証する. タイムアウト値の
   整数循環を防止する. bz#3119

 * ssh(1): detect and prevent trivial configuration loops when using
    ProxyJump. bz#3057.

   ssh(1): ProxyJump を利用した 自明な設定ループを検出し防止する bz#3057

Portability
-----------

移植性

 * Detect systems where signals flagged with SA_RESTART will interrupt
   select(2). POSIX permits implementations to choose whether
   select(2) will return when interrupted with a SA_RESTART-flagged
   signal, but OpenSSH requires interrupting behaviour.

   SA_RESTART フラグ付きのシグナルが select(2) に割り込むシステムを検出する.
   POSIX は SA_RESTART フラグ付きのシグナルによって割り込まれた場合に
   select(2) が return するかどうかを実装にまかせているが,
   OpenSSH は割り込まれる振舞いを要求している.

 * Several compilation fixes for HP/UX and AIX.

   HP/UX と AIX でのいくつかのコンパイルの問題の修正.

 * On platforms that do not support setting process-wide routing
   domains (all excepting OpenBSD at present), fail to accept a
   configuration attempts to set one at process start time rather than
   fatally erroring at run time. bz#3126

   プロセス単位のルーティングドメインの設定をサポートしないプラットフォーム
   (現在 OpenBSD 以外のすべてのプラットフォーム) で, そのような設定に対して
   実行時に致命的に失敗するのではなく開始時に設定しようとしたらエラーと
   なるようにする. bz#3126

 * Improve detection of egrep (used in regression tests) on platforms
   that offer a poor default one (e.g. Solaris).

   (例えば Solaris のような) 貧弱なデフォルトの egrep を提供するプラットフォーム
   での egrep の検出を改善する. (egrep は回帰テストで利用している)

 * A number of shell portability fixes for the regression tests.

   回帰テストでの シェル移植性を多数修正する.

 * Fix theoretical infinite loop in the glob(3) replacement
   implementation.

   glob(3) 置換実装での理論上ありえる無限ループを修正する.

 * Fix seccomp sandbox compilation problems for some Linux
   configurations bz#3085

   いくつかの Linux の設定での seccomp サンドボックスのコンパイルの
   問題を修正する bz#3085

 * Improved detection of libfido2 and some compilation fixes for some
   configurations when --with-security-key-builtin is selected.

   libfido2 の検出改善し, --with-security-key-builtin が選択された場合の
   いくつかの設定でのコンパイル時の問題を修正する.