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

2023/02/02, OpenSSH 9.2 がリリースされました.

バグ修正中心のリリースです. おそらく悪用できないと思われるメモリ安全に関する問題が 3 件修正されています.

https://www.openssh.com/releasenotes.html#9.2

Changes since OpenSSH 9.1
=========================

OpennSSH 9.1 からの変更点

This release fixes a number of security bugs.

このリリースはいくつかのセキュリティバグを修正する.

Security
========

セキュリティ

This release contains fixes for two security problems and a memory
safety problem. The memory safety problem is not believed to be
exploitable, but we report most network-reachable memory faults as
security bugs.

このリリースは 2 つのセキュリティ問題と 1 つのメモリ安全問題の修正
を含む. このメモリ安全問題は攻撃可能ではないと思われるが, 
ネットワーク到達可能なメモリ操作の欠陥のほとんどはセキュリティの
問題として報告します.

 * sshd(8): fix a pre-authentication double-free memory fault
   introduced in OpenSSH 9.1. This is not believed to be exploitable,
   and it occurs in the unprivileged pre-auth process that is
   subject to chroot(2) and is further sandboxed on most major
   platforms.

   sshd(8): OpenSSH 9.1 で導入された認証前の二重 free メモリ欠陥
   を修正する. これは攻撃可能ではないと思われる. chroot(2) の元での
   非特権認証前プロセス内で発生し, さらにほとんどの主要なプラットフォーム
   上ではサンドボックス化されている.

 * ssh(8): in OpenSSH releases after 8.7, the PermitRemoteOpen option
   would ignore its first argument unless it was one of the special
   keywords "any" or "none", causing the permission list to fail open
   if only one permission was specified. bz3515

   ssh(8): 8.7 より後の OpenSSH で, PermitRemoteOpen 設定項目は
   その最初の引数を, "any" や "none" といった特別なキーワードの
   1 つでない場合無視している. これはただ 1 つのパーミッションを
   指定している場合にパーミッションリストのオープンの失敗を
   引き起す. bz3515

 * ssh(1): if the CanonicalizeHostname and CanonicalizePermittedCNAMEs
   options were enabled, and the system/libc resolver did not check
   that names in DNS responses were valid, then use of these options
   could allow an attacker with control of DNS to include invalid
   characters (possibly including wildcards) in names added to
   known_hosts files when they were updated. These names would still
   have to match the CanonicalizePermittedCNAMEs allow-list, so
   practical exploitation appears unlikely.

   ssh(1): CanonicalizeHostname と CanonicalizePermittedCNAMEs 設定項目が
   有効で, system/libc のリゾルバは DNS 応答中の名前が正当かチェックしない場合,
   これらの設定項目の利用は DNS を制御している攻撃者に known_hosts ファイルを
   更新する際に追加する名前に不正な文字(ワイルドカードを含む可能性がある)
   を含めることを可能にする. これらの名前は CanonicalizePermittedCNAMEs の
   許可リストに一致する必要がまだあるので, 実際に攻撃をすることは
   難しいと思われる.

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

潜在的に非互換な変更

 * ssh(1): add a new EnableEscapeCommandline ssh_config(5) option that
   controls whether the client-side ~C escape sequence that provides a
   command-line is available. Among other things, the ~C command-line
   could be used to add additional port-forwards at runtime.

   ssh(1): ssh_config(5) の新しい EnableEscapeCommandline 設定項目を
   追加する. これは, コマンドラインが提供するクライアント側の ~C
   シーケンスが利用可能かを制御する. 特に, ~C コマンドラインは
   実行時に追加のポート転送を追加するのに使われる場合がある.

   This option defaults to "no", disabling the ~C command-line that
   was previously enabled by default. Turning off the command-line
   allows platforms that support sandboxing of the ssh(1) client
   (currently only OpenBSD) to use a stricter default sandbox policy.

   この設定項目のデフォルトは "no" で, 以前はデフォルトで有効であった
   ~C コマンドラインは無効となる. このコマンドラインでの無効は,
   プラットフォームでの (現在 OpenBSD のみでの) 
   より厳格なデフォルトのサンドボックスポリシーを用いる
   ssh(1) クライアントのサンドボックス化のサポートを可能にする.

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

新機能

 * sshd(8): add support for channel inactivity timeouts via a new
   sshd_config(5) ChannelTimeout directive. This allows channels that
   have not seen traffic in a configurable interval to be
   automatically closed. Different timeouts may be applied to session,
   X11, agent and TCP forwarding channels.

   sshd(8): 新しい sshd_config(8) ChannelTimeout 設定項目により
   チャンネルのアイドルタイムアウトをサポートする. これは
   設定可能な間隔でトラフィックが観測されないチャンネルを
   自動的なクローズを可能にする. セッションや X11, エージェント,
   TCP 転送チャンネルに異なるタイムアウトが適用可能だ.

 * sshd(8): add a sshd_config UnusedConnectionTimeout option to
   terminate client connections that have no open channels for a
   length of time. This complements the ChannelTimeout option above.

   sshd(8): 一定期間開いているチャンネルがないクライアント接続を
   終了させる sshd_config の UnusedConnectionTimeout を追加する.
   これは前述の ChannelTimeout オプションを補完する.
    
 * sshd(8): add a -V (version) option to sshd like the ssh client has.

   sshd(8): ssh クライアントが持っているような -V (version) オプションを
   sshd に追加する.

 * ssh(1): add a "Host" line to the output of ssh -G showing the
   original hostname argument. bz3343

   ssh(1): ssh -G の出力に 元のホスト名引数を示す "Host" 行を追加
   する. bz3343
    
 * scp(1), sftp(1): add a -X option to both scp(1) and sftp(1) to
   allow control over some SFTP protocol parameters: the copy buffer
   length and the number of in-flight requests, both of which are used
   during upload/download. Previously these could be controlled in
   sftp(1) only. This makes them available in both SFTP protocol
   clients using the same option character sequence.

   scp(1), sftp(1): scp(1) と sftp(1) に -X オプションを追加する.
   これはいくつかの SFTP プロトコルのパラメーターの制御を可能にする:
   コピーバッファの長さと利用中のリクエストの数. どちらもアップロード/
   ダルンロード中の用いられる. 以前これらは sftp(1) でのみ制御可能
   だった. これにより 同じオプションの文字列を用いて両方の SFTP
   プロトコルクライアントでの設定が利用可能となる.
    
 * ssh-keyscan(1): allow scanning of complete CIDR address ranges,
   e.g.  "ssh-keyscan 192.168.0.0/24". If a CIDR range is passed, then
   it will be expanded to all possible addresses in the range
   including the all-0s and all-1s addresses. bz#976

   ssh-keyscan(1): 完全な CIDR アドレスの範囲, たとえば
   "ssh-keyscan 192.168.0.0/24" のスキャンが可能となる. CIDR の範囲が
   渡されると, すべてが 0 と すべてが 1 のアドレスを含む範囲中の
   すべての可能なアドレスへ展開される. bz#976

 * ssh(1): support dynamic remote port forwarding in escape
   command-line's -R processing. bz#3499

   ssh(1): コマンドラインの -R の処理のエスケープでダイナミックな
   リモートポート転送をサポートする. bz#3499

Bugfixes
--------

バグ修正

 * ssh(1): when restoring non-blocking mode to stdio fds, restore
   exactly the flags that ssh started with and don't just clobber them
   with zero, as this could also remove the append flag from the set.
   bz3523

   ssh(1): 標準出力のファイルディスクリプタのノンブロッキングモードを
   回復する際, append フラグが削除される可能性があるため,
   単に 0 にせずに ssh が開始されたフラグに正確に戻す. bz3523
    
 * ssh(1): avoid printf("%s", NULL) if using UserKnownHostsFile=none
   and a hostkey in one of the system known hosts file changes.

   ssh(1): UserKnownHostsFile=none を用いていて, システムの
   known_hosts ファイルの 1 つにあるホスト鍵が変更された場合に
   printf("%s", NULL) するのを回避する.
    
 * scp(1): switch scp from using pipes to a socket-pair for
   communication with its ssh sub-processes, matching how sftp(1)
   operates.

   scp(1): sftp(1) の操作と合わせるため, scp とそのssh サブプロセスとの通信に
   pipe ではなく socket のペアを利用するよう変更する.

 * sshd(8): clear signal mask early in main(); sshd may have been
   started with one or more signals masked (sigprocmask(2) is not
   cleared on fork/exec) and this could interfere with various things,
   e.g. the login grace timer. Execution environments that fail to
   clear the signal mask before running sshd are clearly broken, but
   apparently they do exist.

   sshd(8): main() で早期にシグナルマスクをクリアする; sshd は
   1 つ以上のシグナルをマスクして開始され (sigprocmask(2) は fork/exec で
   クリアされない) これは多くの物事に干渉する可能性がある, たとえば
   ログインの猶予タイマー. sshd が実行される前にシグナルマスクをクリアするのに
   失敗する実行環境は明らかに破綻しているが, どうやら存在する模様.
    
 * ssh(1): warn if no host keys for hostbased auth can be loaded.

   ssh(1): ホストベース認証のためにロードできるホスト鍵がなければ
   警告する.
    
 * sshd(8): Add server debugging for hostbased auth that is queued and
   sent to the client after successful authentication, but also logged
   to assist in diagnosis of HostbasedAuthentication problems. bz3507

   sshd(8): HostbasedAuthentication の問題の診断を助けるために
   認証成功後にキューに入れられクライアントに送信されログする
   ホストベース認証のサーバ側デバッグを追加する. bz3507

 * ssh(1): document use of the IdentityFile option as being usable to
   list public keys as well as private keys. GHPR352

   ssh(1): 秘密鍵と同様に公開鍵のレッキョにも利用できるとして
   IdentityFile 設定項目の利用を文書化する. GHPR352
    
 * sshd(8): check for and disallow MaxStartups values less than or
   equal to zero during config parsing, rather than failing later at
   runtime.  bz3489

   sshd(8): 後で実行時に失敗するのではなく設定のパース時に
   MaxStartups の 0 以下の値をチェックし許可しない. bz3489
    
 * ssh-keygen(1): fix parsing of hex cert expiry times specified on
   the command-line when acting as a CA.

   ssh-keygen(1): CA として振る舞う際のコマンドラインで指定された
   16 進の証明書満期のパースを修正する.
 
 * scp(1): when scp(1) is using the SFTP protocol for transport (the
   default), better match scp/rcp's handling of globs that don't match
   the globbed characters but do match literally (e.g. trying to
   transfer a file named "foo.[1]"). Previously scp(1) in SFTP mode
   would not match these pathnames but legacy scp/rcp mode would.
   bz3488

   scp(1): (デフォルトである) scp(1) が転送に SFTP プロトコルを用いる際,
   glob された文字には一致しないが文字通り一致する (例えば, "foo.[1]" 
   と名付けられたファイルを転送しようとする)
   scp/rcp の glob の処理によりよく一致するようになる. SFTP モードでの
   scp(1) は以前それらのパス名に一致していなかったが, 伝統的な scp/rcp は
   していた. bz3488
    
 * ssh-agent(1): document the "-O no-restrict-websafe" command-line
   option.

   ssh-agent(1): "-O no-restrict-websafe" コマンドラインオプションを
   文書化する.

 * ssh(1): honour user's umask(2) if it is more restrictive then the
   ssh default (022).

   ssh(1): ssh のデフォルト (022) よりも厳しい場合, ユーザーの umask(2)
   を尊重する.

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

移植性

 * sshd(8): allow writev(2) in the Linux seccomp sandbox. This seems
   to be used by recent glibcs at least in some configurations during
   error conditions. bz3512.

   sshd(8): Linux の seccomp サンドボックスで writev(2) を有効にする.
   最近の glibc で少なくともいくつかの構成でエラー時に用いられている
   ようだ. bz3512.

 * sshd(8): simply handling of SSH_CONNECTION PAM env var, removing
   global variable and checking the return value from pam_putenv.
   bz3508

   sshd(8): SSH_CONNECTION PAM 環境変数をシンプルに扱う, グローバル変数
   から削除し, pam_putenv からの返り値をチェックする. bz3508

 * sshd(8): disable SANDBOX_SECCOMP_FILTER_DEBUG that was mistakenly
   enabled during the OpenSSH 9.1 release cycle.

   sshd(8): OpenSSH 9.1 のリリースサイクル中に間違えて有効になった
   SANDBOX_SECCOMP_FILTER_DEBUG を無効にする.

 * misc: update autotools and regenerate the config files using the
   latest autotools

   misc: autotools を更新し, 最新の autotools を用いて config ファイルを
   再生成する.

 * all: use -fzero-call-used-regs=used on clang 15 instead of
   -fzero-call-used-reg=all, as some versions of clang 15 have
   miscompile code when it was enabled. bz3475

   all: clang 15 では -fzero-call-used-reg=all の代わりに 
   -fzero-call-used-regs=use を用いる. clang 15 のいくつかの
   バージョンでは -fzero-call-used-reg=all が有効だとコードの
   コンパイルに失敗する. bz3475

 * sshd(8): defer PRNG seeding until after the initial closefrom(2)
   call. PRNG seeding will initialize OpenSSL, and some engine
   providers (e.g. Intel's QAT) will open descriptors for their own
   use that closefrom(2) could clobber. bz3483

   最初の closefrom(2) 呼び出しの後まで PRNG のシーディングを
   延期する. PRNG のシーディングは OpenSSL を初期化し, 他のエンジンプロバイダー
   (例えば Intel の QAT) は closefrom(2) た閉じてしまう
   自身のためのデスクリプトを開く. bz3483

 * misc: in the poll(2)/ppoll(2) compatibility code, avoid assuming
   the layout of fd_set.

   misc: poll(2)/ppoll(2) の互換モードで fd_set のレイアウトを
   決めつけない.

 * sftp-server(8), ssh-agent(1): fix ptrace(2) disabling on older
   FreeBSD kernels. Some versions do not support using id 0 to refer
   to the current PID for procctl, so try again with getpid()
   explicitly before failing.

   sftp-server(8), ssh-agent(1): より古い FreeBSD カーネルで
   ptrace(2) の無効化を修正する. いくつかのバージョンは 
   procctl の現在の PID を参照するために id 0 を用いることを
   サポートせず, 失敗の前に getpid() を明示的に呼び出して再試行する.

 * configure.ac: fix -Wstrict-prototypes in configure test code.
   Clang 16 now warns on this and legacy prototypes will be removed
   in C23. GHPR355

   configure.ac: configure の テストモードでの -Wstrict-prototypes
   を修正する. Clang 16 はこのプロトタイプと C23 で除去されるレガシーな
   プロトタイプで警告するようになる. GHPR355

 * configure.ac: fix setres*id checks to work with clang-16. glibc
   has the prototypes for setresuid behind _GNU_SOURCE, and clang 16
   will error out on implicit function definitions. bz3497

   configure.ac: clang-16 との setres*id チェックを修正する.
   glibc は _GNU_SOURCE の後ろにある setresuid のための
   プロトタイプを持つが, clang 16 は 暗黙の関数定義として
   エラーにする. bz3497