OpenSSH 9.2 がリリースされました
2023/02/02, OpenSSH 9.2 がリリースされました.
- OpenSSH 9.2 Release Note 中の OpenSSH 9.2 での変更点の翻訳
- この記事にも添付します.
- OpenSSH 移植版付属文書の翻訳
バグ修正中心のリリースです. おそらく悪用できないと思われるメモリ安全に関する問題が 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