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

2021/08/20, OpenSSH 8.7 がリリースされました.

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

Imminent deprecation notice
===========================

差し迫った廃止の通知

OpenSSH will disable the ssh-rsa signature scheme by default in the
next release.

OpenSSH は次のリリースで ssh-rsa 署名スキームをデフォルトで無効にする.

In the SSH protocol, the "ssh-rsa" signature scheme uses the SHA-1
hash algorithm in conjunction with the RSA public key algorithm.
It is now possible[1] to perform chosen-prefix attacks against the
SHA-1 algorithm for less than USD$50K.

SSH プロトコルで, "ssh-rsa" 署名スキームは RSA 公開鍵アルゴリズムと共に
SHA-1 ハッシュアルゴリズムを利用する. 
USドル 50K より少ない金額で SHA-1 アルゴリズムに対する選択プレフィックス
攻撃が実行できることが [1] で示されている. 

Note that the deactivation of "ssh-rsa" signatures does not necessarily
require cessation of use for RSA keys. In the SSH protocol, keys may be
capable of signing using multiple algorithms. In particular, "ssh-rsa"
keys are capable of signing using "rsa-sha2-256" (RSA/SHA256),
"rsa-sha2-512" (RSA/SHA512) and "ssh-rsa" (RSA/SHA1). Only the last of
these is being turned off by default.

"ssh-rsa" 署名の無効化は RSA 鍵の利用の停止を必ずしも必要としない
ことに注意. SSH プロトコルでは, 鍵は複数のアルゴリズムを用いて署名に利用
できる. 特に "ssh-rsa" 鍵は, "rsa-sha2-256" (RSA/SHA256) と
"rsa-sha2-512" (RSA/SHA512),  "ssh-rsa" (RSA/SHA1) を用いて署名可能だ.
最後のものだけがデフォルトで無効になる予定だ.

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 that is still
enabled by default.

このアルコリズムは, よりよい代替があるにもかかわらず
もともとの 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 RFC8709 ssh-ed25519 signature algorithm. It has been supported
   in OpenSSH since release 6.5.

   RFC8709 の 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.

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

OpenSSH recently enabled the UpdateHostKeys option by default to
assist the client by automatically migrating to better algorithms.

OpenSSH では, クライアントがよりよいアルゴリズムに自動的に移行できるよう
助ける UpdateHostKeys 設定項目が最近デフォルトで有効となった.

[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

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

潜在的に非互換な変更

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

このリリースは, 既存の設定に影響する可能性のある変更をいくつか含んでいる.

 * scp(1): this release changes the behaviour of remote to remote
   copies (e.g. "scp host-a:/path host-b:") to transfer through the
   local host by default. This was previously available via the -3
   flag. This mode avoids the need to expose credentials on the
   origin hop, avoids triplicate interpretation of filenames by the
   shell (by the local system, the copy origin and the destination)
   and, in conjunction with the SFTP support for scp(1) mentioned
   below, allows use of all authentication methods to the remote
   hosts (previously, only non-interactive methods could be used).
   A -R flag has been added to select the old behaviour.

   scp(1): このリリースはリモート-リモートのコピー (たとえば
   "scp host-a:/path host-b:") の振舞いを変更し, デフォルトでローカル
   ホストを経由して転送するようになる. これは以前から -3 フラグにより
   利用可能だ. このモードは転送元の認証情報を開示する必要を避け,
   シェルによるファイル名の (ローカルなシステム, コピー元, コピー先による)
   3重の解釈を避け, 後述する scp(1) に対する SFTP のサポートと併せて
   リモートホストへのすべての認証法の利用を許す (以前はインタラクティブ
   でない方法のみが利用できた). -R フラグが古い振舞いを選択するために
   追加される.

 * ssh(1)/sshd(8): both the client and server are now using a
   stricter configuration file parser. The new parser uses more
   shell-like rules for quotes, space and escape characters. It is
   also more strict in rejecting configurations that include options
   lacking arguments. Previously some options (e.g. DenyUsers) could
   appear on a line with no subsequent arguments. This release will
   reject such configurations. The new parser will also reject
   configurations with unterminated quotes and multiple '='
   characters after the option name.

   ssh(1)/sshd(8): クライアント/サーバはより厳格な設定ファイル
   パーサを利用する. 新しいパーサはクオートやスペース, エスケープ文字
   に対してよりシェル的なルールを利用する. 引数のない設定項目を含む設定
   の拒否をより厳格にする. 以前はいくつかのオプション (たとえば DenyUsers)
   が後続の引数なしで行に現われることがあった. このリリースは
   そのような設定を拒否する. 新しいパーサは終端していないクオートや
   設定項目名の後の複数の '=' 文字を持つ設定も拒否する.

 * ssh(1): when using SSHFP DNS records for host key verification,
   ssh(1) will verify all matching records instead of just those
   with the specific signature type requested. This may cause host
   key verification problems if stale SSHFP records of a different
   or legacy signature type exist alongside other records for a
   particular host. bz#3322

   ssh(1): ホスト鍵の検証に SSHFP DNS レコードを用いる際, ssh(1) は
   要求された特定の署名タイプのレコードだけを検証する代わりに
   すべての一致するレコードを検証するようになる. (以前の振舞いは)
   特定のホストの他のレコードと共に, 異なるないし過去の署名タイプの新鮮でない
   SSHFP レコードが存在する場合に, ホスト鍵の検証の問題を引き起こす.
   bz#3332

 * ssh-keygen(1): when generating a FIDO key and specifying an
   explicit attestation challenge (using -Ochallenge), the challenge
   will now be hashed by the builtin security key middleware. This
   removes the (undocumented) requirement that challenges be exactly
   32 bytes in length and matches the expectations of libfido2.

   ssh-keygen(1): FIDO 鍵を生成し ( -Ochallenge を用いて ) 明示的な
   attestation チャレンジ を指定する際, チャレンジは組込みのセキュリティ
   鍵ミドルウェアによりハッシュされるようになる.  これは, チャレンジが
   正確に 32 バイト長でlibfido2 の期待の一致するという
   (文書化されていない) 要件を除く.

 * sshd(8): environment="..." directives in authorized_keys files are
   now first-match-wins and limited to 1024 discrete environment
   variable names.

   sshd(8): authorized_keys ファイルでの environment="..." の指定は,
   最初の一致が優先され, 1024 の独立した環境変数名に限定されるようになる.

Changes since OpenSSH 8.6
=========================

OpenSSH 8.6 からの変更

This release contains a mix of new features and bug-fixes.

このリリースは新機能とバグ修正が含まれる.

New features
------------

新機能

 - scp(1): experimental support for transfers using the SFTP protocol
   as a replacement for the venerable SCP/RCP protocol that it has
   traditionally used. SFTP offers more predictable filename handling
   and does not require expansion of glob(3) patterns via the shell
   on the remote side.

   scp(1): 伝統的に利用されている尊い SCP/RCP プロトコルの代替として
   SFTP プロトコルを利用する転送を実験的にサポートする. SFTP は
   より意外性のないファイル名の扱いを提供し, リモート側のシェルによる
   glob(3) の展開を必要としない.

   SFTP support may be enabled via a temporary scp -s flag. It is
   intended for SFTP to become the default transfer mode in the
   near future, at which time the -s flag will be removed. The -O
   flag exists to force use of the original SCP/RCP protocol for
   cases where SFTP may be unavailable or incompatible.

   SFTP サポートは scp の 一時的な -s フラグによって有効化される.
   近い将来 SFTP をデフォルトの転送モードにするつもりで, その時
   -s フラグは除去されるだろう. SFTP が利用できなかったり互換性がない
   場合に元の SCP/RCP プロトコルを強制的に利用するために -O フラグが
   存在する(追加される).

 - sftp-server(8): add a protocol extension to support expansion of
   ~/ and ~user/ prefixed paths. This was added to support these
   paths when used by scp(1) while in SFTP mode.

   sftp-server(8): ~/ と ~user/ で始まるパスの展開をサポートする
   プロトコル拡張を追加する. SFTP モードの scp(1) によって利用される際に
   これらのパスのサポートが追加される.

 - ssh(1): add a ForkAfterAuthentication ssh_config(5) counterpart to
   the ssh(1) -f flag. GHPR#231

   ssh(1): ssh(1) の -f フラグの対照として ForkAfterAuthentication
   ssh_config(5) を追加する. GHPR#231

 - ssh(1): add a StdinNull directive to ssh_config(5) that allows the
   config file to do the same thing as -n does on the ssh(1) command-
   line. GHPR#231

   ssh(1): ssh(1) コマンドラインでの -n が行なうのと同様のことを
   設定ファイルで設定できる StdinNull 設定項目を ssh_config(5) に追加する.
   GHPR#231

 - ssh(1): add a SessionType directive to ssh_config, allowing the
    configuration file to offer equivalent control to the -N (no
    session) and -s (subsystem) command-line flags. GHPR#231

   ssh(1): ssh_config に SessionType 設定項目を追加する.
   コマンドラインフラグでの -N (no sessoin) と -s (subsystem)
   と同等の制御を設定ファイルで提供する. GHPR#231

 - ssh-keygen(1): allowed signers files used by ssh-keygen(1)
   signatures now support listing key validity intervals alongside
   they key, and ssh-keygen(1) can optionally check during signature
   verification whether a specified time falls inside this interval.
   This feature is intended for use by git to support signing and
   verifying objects using ssh keys.

   ssh-keygen(1): ssh-keygen(1) の署名で利用される許可された署名者のファイルが
   鍵の正当性の期間を鍵と共に列挙できるようになり, ssh-keygen(1)は, 署名検証中に
   指定した時間がこの期間内にあるかどうかチェックできるようになる.
   で指定できるようになる.  この機能は, git が ssh 鍵を用いたオブジェクトの署名と
   検証をサポートするために利用されることを意図している.

 - ssh-keygen(8): support printing of the full public key in a sshsig
   signature via a -Oprint-pubkey flag.

   ssh-keygen(8): -Oprint-pubkey フラグにより sshsig 署名中の完全な
   公開鍵の表示をサポートする.

Bugfixes
--------

バグ修正

 * ssh(1)/sshd(8): start time-based re-keying exactly on schedule in
   the client and server mainloops. Previously the re-key timeout
   could expire but re-keying would not start until a packet was sent
   or received, causing a spin in select() if the connection was
   quiescent.

   ssh(1)/sshd(8): クライアントとサーバのメインループ中でスケジュール通りに
   時間ベースの鍵の再生成を始める. 以前は鍵の再生成のタイムアウトが
   期限切れになってもパケットが送信されるか受信されるまで鍵の再生成が
   始まらなかった. 接続が活動していない場合に select() 内で spin が
   生じていた.

 * ssh-keygen(1): avoid Y2038 problem in printing certificate
   validity lifetimes. Dates past 2^31-1 seconds since epoch were
   displayed incorrectly on some platforms. bz#3329

   ssh-keygen(1): 証明書の有効期限の表示での Y2038 問題を回避する.
   epoch から 2^31-1 秒経過した日付がいくつかのプラットフォームで
   正確に表示されていなかった. bz#3329

 * scp(1): allow spaces to appear in usernames for local to remote
   and scp -3 remote to remote copies. bz#1164

   scp(1): ローカルからリモートへの転送と scp -3 でのリモート-リモート
   コピーで, ユーザ名に空白が入っていてもよくなる. bz#1164

 * ssh(1)/sshd(8): remove references to ChallengeResponseAuthentication
   in favour of KbdInteractiveAuthentication. The former is what was in
   SSHv1, the latter is what is in SSHv2 (RFC4256) and they were
   treated as somewhat but not entirely equivalent. We retain the old
   name as a deprecated alias so configuration files continue to work
   as well as a reference in the man page for people looking for it.
   bz#3303

   ssh(1)/sshd(8): ChallengeResponseAuthentication への参照を削除し
   KbdInteractiveAuthentication を採用する. 前者は SSHv1 のもので,
   後者は SSHv2 (RFC4256) のもので, これらは 同じように扱われるが
   完全に同等のものではない. 我々は古い名前も非推奨の別名として維持し
   設定ファイルは動作する. また, この名前を探している人のために
   マニュアルに参照は残す. bz#3303

 * ssh(1)/ssh-add(1)/ssh-keygen(1): fix decoding of X.509 subject name
   when extracting a key from a PKCS#11 certificate. bz#3327

   ssh(1)//ssh-add(1)/ssh-keygen(1): PKCS#11 証明書から鍵を
   抜き出す際の X.509 subject name のデコードを修正する.

 * ssh(1): restore blocking status on stdio fds before close. ssh(1)
   needs file descriptors in non-blocking mode to operate but it was
   not restoring the original state on exit. This could cause
   problems with fds shared with other programs via the shell,
   bz#3280 and GHPR#246

   ssh(1): stdio のファイルデスクリプタの blocking 状態を
   閉じる前に回復する. ssh(1) は 操作のためにファイルデスクリプタ
   を non-blocking モードにする必要があるが, 終了時に元の状態に戻して
   いなかった. これは シェルを経由して他のプログラムと共有される
   ファイルデスクリプタで問題を起こしうる. bz#3280 と GHPR#246

 * ssh(1)/sshd(8): switch both client and server mainloops from
   select(3) to pselect(3). Avoids race conditions where a signal
   may arrive immediately before select(3) and not be processed until
   an event fires. bz#2158

   ssh(1)/sshd(8): クライアントとサーバのメインループで select(3) から
   pselect(3) に切り替える.  select(3) の直前にシグナルが来ても
   イベントが発火するまで処理されない競合状態を回避する. bz#2158

 * ssh(1): sessions started with ControlPersist were incorrectly
   executing a shell when the -N (no shell) option was specified.
   bz#3290

   ssh(1): ControlPersist 付きで始まるセッションが, -N (no shell) オプションを
   指定されていてもシェルを不正に実行していた. bz#3290

 * ssh(1): check if IPQoS or TunnelDevice are already set before
   overriding. Prevents values in config files from overriding values
   supplied on the command line. bz#3319

   ssh(1): IPQoS と TunnelDevice がすでに設定されているか上書きする前に
   確認する. 設定ファイルの値が コマンドラインで指定された値を上書きするのを
   防ぐ. bz#3319

 * ssh(1): fix debug message when finding a private key to match a
   certificate being attempted for user authentication. Previously it
   would print the certificate's path, whereas it was supposed to be
   showing the private key's path. GHPR#247

   ssh(1): ユーザ認証が試行される証明書に一致する秘密鍵の検索での
   debug メッセージを修正する. 以前は, 証明書のパスを表示するはずが
   秘密鍵のパスを表示していた. GHPR#247

 * sshd(8): match host certificates against host public keys, not
   private keys. Allows use of certificates with private keys held in
   a ssh-agent.  bz#3524

   sshd(8): ホスト秘密鍵ではなくホスト公開鍵に対してホスト証明書を一致させる.
   ssh-agent 中に保持される秘密鍵付きの証明書の利用を可能にする.
   bz#3524

 * ssh(1): add a workaround for a bug in OpenSSH 7.4 sshd(8), which
   allows RSA/SHA2 signatures for public key authentication but fails
   to advertise this correctly via SSH2_MSG_EXT_INFO. This causes
   clients of these server to incorrectly match
   PubkeyAcceptedAlgorithmse and potentially refuse to offer valid
   keys. bz#3213

   ssh(1): OpenSSH 7.4 sshd(8) のバグに対する回避策を追加する.
   OpenSSH 7.4 sshd(8) は RSA/SHA2 署名を公開鍵認証で許可するが, 
   SSH2_MSG_EXT_INFO でこれを正しく広告するのに失敗する.
   これらのサーバのクライアントに対し PubkeyAcceptedAlgorithms を不正に
   一致させ, 潜在的に正当な鍵の提供を拒否する事態を起こす. bz#3213

 * sftp(1)/scp(1): degrade gracefully if a sftp-server offers the
   limits@openssh.com extension but fails when the client tries to
   invoke it. bz#3318

   sftp(1)/scp(1): sftp-server が limits@openssh.com 拡張を提供するが
   クライアントがその起動に失敗した場合に慈悲深く拡張を無効にする.
   bz#3318

 * ssh(1): allow ssh_config SetEnv to override $TERM, which is
   otherwise handled specially by the protocol. Useful in ~/.ssh/config
   to set TERM to something generic (e.g. "xterm" instead of
   "xterm-256color") for destinations that lack terminfo entries.

   ssh(1): ssh_config の SetEnv が $TERM の上書きを可能にする.
   これはプロトコルでは特別に処理される. terminfo エントリが欠けている
   接続先に対して TERM をなにか一般的なもの (例えば "xterm-256color"
   の代わりに "xterm") に ~/.ssh/config で設定するのに便利だ.

 * sftp-server(8): the limits@openssh.com extension was incorrectly
   marked as an operation that writes to the filesystem, which made it
   unavailable in sftp-server read-only mode. bz#3318

   sftp-server(8): limits@openssh.com 拡張がファイルシステムへの書き込みをする
   操作で不正にマークされていて, sftp-server を読み取り専用モードで
   利用できなくなっていた. bz#3318

 * ssh(1): fix SEGV in UpdateHostkeys debug() message, triggered when
   the update removed more host keys than remain present.

   ssh(1): UpdateHostkeys debug() メッセージでの SEGV を修正する.
   現在保持しているホスト鍵以上のホスト鍵を削除する更新によって引き起こされる.

 * many manual page fixes.

   多くのマニュアルページを修正する.

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

移植性

 * ssh(1): move closefrom() to before first malloc. When built against
   tcmalloc, the closefrom() would stomp on file descriptors created
   for tcmalloc's internal use. bz#3321

   ssh(1): 最初の malloc の前に closefrom() を移す. tcmalloc に対して
   ビルドされた場合, tcmalloc の内部利用のために用いられる ファイル
   デスクイプタを closefrom は 利用してしまう. bz#3321

 * sshd(8): handle GIDs > 2^31 in getgrouplist. When compiled in 32bit
   mode, the getgrouplist implementation may fail for GIDs greater than
   LONG_MAX.

   sshd(8): getgrouplist で 2^31 を越える GID を処理する. 32 ビットモード
   でコンパイルされると getgrouplist の実装は LONG_MAX を越える
   GID で失敗する.

 * ssh(1): xstrdup environment variable used by ForwardAgent. bz#3328

   ssh(1): ForwardAgent で利用される環境変数を xstrdup する bz#3328

 * sshd(8): don't sigdie() in signal handler in privsep child process;
   this can end up causing sandbox violations per bz3286

   sshd(9): 特権分離された子プロセル内のシグナルハンドラで sigdie() しない;
   これは bz3286 によるとサンドボックの破壊を引き起す可能性がある.