OpenSSH 10.3p1 がリリースされました
2026/04/02, OpenSSH 10.3p1 がリリースされました.
- OpenSSH 10.3p1 Release Note 中の OpenSSH 10.3 での変更点のまとめ
- この記事にも添付します.
- OpenSSH 移植版付属文書の翻訳
# https://www.openssh.com/releasenotes.html#10.3p1
Potentially-incompatible changes
--------------------------------
互換性がなくなる可能性がある変更
* ssh(1), sshd(8): remove bug compatibility for implementations
that don't support rekeying. If such an implementation tries to
interoperate with OpenSSH, it will now eventually fail when the
transport needs rekeying.
ssh(1), sshd(8): 再鍵交換をサポートしない実装に対する
バグ互換性を削除する。そのような実装が OpenSSH と相互運用しようとすると、
トランスポートが再鍵交換を必要とする際に最終的に失敗するようになる。
* sshd(8): prior to this release, a certificate that had an empty
principals section would be treated as matching any principal
(i.e. as a wildcard) when used via authorized_keys principals=""
option. This was intentional, but created a surprising and
potentially risky situation if a CA accidentally issued a
certificate with an empty principals section: instead of being
useless as one might expect, it could be used to authenticate as
any user who trusted the CA via authorized_keys. [Note that this
condition did not apply to CAs trusted via the sshd_config(5)
TrustedUserCAKeys option.]
sshd(8): このリリース以前は、空のプリンシパルセクションを持つ証明書は、
authorized_keys の principals="" オプションを通じて使用された場合、
任意のプリンシパルに一致する (つまりワイルドカードとして) 扱われていた。
これは意図的なものだったが、CA が誤って空のプリンシパルセクションを持つ
証明書を発行した場合に、予想外で潜在的にリスクのある状況を生み出した。
予想されるように使用不能になるのではなく、authorized_keys を通じて
CA を信頼するすべてのユーザーとして認証するために使用できた。
[この条件は sshd_config(5) の TrustedUserCAKeys オプションを通じて
信頼された CA には適用されなかったことに注意。]
This release treats an empty principals section as never matching
any principal, and also fixes interpretation of wildcard
characters in certificate principals. Now they are consistently
implemented for host certificates and not supported for user
certificates.
このリリースでは、空のプリンシパルセクションはどのプリンシパルにも
一致しないものとして扱い、証明書プリンシパルにおけるワイルドカード文字の
解釈も修正する。ホスト証明書では一貫して実装され、
ユーザー証明書ではサポートされない。
* ssh(1): the -J and equivalent -oProxyJump="..." options now
validate user and host names for ProxyJump/-J options passed
via the command-line (no such validation is performed for this
option in configuration files). This prevents shell injection in
situations where these were directly exposed to adversarial
input, which would have been a terrible idea to begin with.
Reported by rabbit.
ssh(1): -J および同等の -oProxyJump="..." オプションは、
コマンドラインで渡された ProxyJump/-J オプションのユーザー名と
ホスト名を検証するようになった (設定ファイル内のこのオプションに対しては
そのような検証は行われない)。これは、敵対的な入力に直接さらされた
状況でのシェルインジェクションを防止する (そもそもひどいアイデアだが)。
rabbit により報告。
Changes since OpenSSH 10.2
==========================
OpenSSH 10.2 からの変更点
This release contains some relatively minor security fixes as well
as a number of feature improvements and general bugfixes.
このリリースには比較的軽微なセキュリティ修正のほか、
多数の機能改善と一般的なバグ修正が含まれる。
Security
========
セキュリティ
* ssh(1): validation of shell metacharacters in user names supplied
on the command-line was performed too late to prevent some
situations where they could be expanded from %-tokens in
ssh_config. For certain configurations, such as those that use a
"%u" token in a "Match exec" block, an attacker who can control
the user name passed to ssh(1) could potentially execute arbitrary
shell commands. Reported by Florian Kohnhäuser.
ssh(1): コマンドラインで指定されたユーザー名のシェルメタ文字の
検証が遅すぎたため、ssh_config の %-トークンから展開される状況を
防止できない場合があった。"Match exec" ブロックで "%u" トークンを
使用する設定などでは、ssh(1) に渡されるユーザー名を制御できる
攻撃者が任意のシェルコマンドを実行できる可能性があった。
Florian Kohnhäuser により報告。
We continue to recommend against directly exposing ssh(1) and
other tools' command-lines to untrusted input. Mitigations such
as this can not be absolute given the variety of shells and user
configurations in use.
ssh(1) やその他のツールのコマンドラインを信頼できない入力に
直接さらすことは引き続き推奨しない。使用されているシェルやユーザー設定の
多様性を考慮すると、このような緩和策は絶対的なものにはなり得ない。
* sshd(8): when matching an authorized_keys principals="" option
against a list of principals in a certificate, an incorrect
algorithm was used that could allow inappropriate matching in
cases where a principal name in the certificate contains a
comma character. Exploitation of the condition requires an
authorized_keys principals="" option that lists more than one
principal *and* a CA that will issue a certificate that encodes
more than one of these principal names separated by a comma
(typical CAs stronly constrain which principal names they will
place in a certificate). This condition only applies to user-
trusted CA keys in authorized_keys, the main certificate
authentication path (TrustedUserCAKeys/AuthorizedPrincipalsFile)
is not affected. Reported by Vladimir Tokarev.
sshd(8): 証明書内のプリンシパルリストに対して authorized_keys の
principals="" オプションを照合する際、不正なアルゴリズムが使用されており、
証明書内のプリンシパル名にカンマ文字が含まれる場合に不適切な照合が
行われる可能性があった。この条件の悪用には、複数のプリンシパルを
リストする authorized_keys の principals="" オプション *かつ*
カンマで区切られた複数のプリンシパル名をエンコードする証明書を発行する
CA が必要である (一般的な CA は証明書に配置するプリンシパル名を
強く制約する)。この条件は authorized_keys 内のユーザーが信頼する
CA キーにのみ適用され、メインの証明書認証パス
(TrustedUserCAKeys/AuthorizedPrincipalsFile) は影響を受けない。
Vladimir Tokarev により報告。
* scp(1): when downloading files as root in legacy (-O) mode and
without the -p (preserve modes) flag set, scp did not clear
setuid/setgid bits from downloaded files as one might typically
expect. This bug dates back to the original Berkeley rcp program.
Reported by Christos Papakonstantinou of Cantina and Spearbit.
scp(1): レガシー (-O) モードで root としてファイルをダウンロードする際、
-p (モード保持) フラグが設定されていない場合、scp は通常期待される
ように、ダウンロードしたファイルから setuid/setgid ビットを
クリアしなかった。このバグは元の Berkeley rcp プログラムにまで遡る。
Cantina および Spearbit の Christos Papakonstantinou により報告。
* sshd(8): fix incomplete application of PubkeyAcceptedAlgorithms
and HostbasedAcceptedAlgorithms with regard to ECDSA keys.
Previously if one of these directives contains any ECDSA algorithm
name (say "ecdsa-sha2-nistp384"), then any other ECDSA algorithm
would be accepted in its place regardless of whether it was
listed or not. Reported by Christos Papakonstantinou of Cantina
and Spearbit.
sshd(8): ECDSA キーに関する PubkeyAcceptedAlgorithms と
HostbasedAcceptedAlgorithms の不完全な適用を修正する。以前は
これらのディレクティブのいずれかに ECDSA アルゴリズム名
(例: "ecdsa-sha2-nistp384") が含まれている場合、リストされているか
どうかに関係なく、他の ECDSA アルゴリズムがその代わりに
受け入れられていた。
Cantina および Spearbit の Christos Papakonstantinou により報告。
* ssh(1): connection multiplexing confirmation (requested using
"ControlMaster ask/autoask") was not being tested for proxy mode
multiplexing sessions (i.e. "ssh -O proxy ..."). Reported by
Michalis Vasileiadis.
ssh(1): 接続多重化の確認 ("ControlMaster ask/autoask" で要求) が
プロキシモードの多重化セッション (つまり "ssh -O proxy ...") に対して
テストされていなかった。Michalis Vasileiadis により報告。
New features
------------
新機能
* ssh(1), sshd(8): support IANA-assigned codepoints for SSH agent
forwarding, as per draft-ietf-sshm-ssh-agent. Support for the new
names is advertised via the EXT_INFO message. If a server offers
support for the new names, then they are used preferentially.
ssh(1), sshd(8): draft-ietf-sshm-ssh-agent に従い、SSH エージェント
転送用の IANA 割り当てコードポイントをサポートする。新しい名前の
サポートは EXT_INFO メッセージを通じて通知される。サーバーが新しい名前の
サポートを提供する場合、それらが優先的に使用される。
Support for the pre-standardisation "@openssh.com" extensions for
agent forwarding remains supported.
エージェント転送用の標準化前の "@openssh.com" 拡張の
サポートは引き続き維持される。
* ssh-agent(1): implement support for draft-ietf-sshm-ssh-agent
"query" extension.
ssh-agent(1): draft-ietf-sshm-ssh-agent の "query" 拡張の
サポートを実装する。
* ssh-add(1): support querying the protocol extensions via the
agent "query" extension with a new -Q flag.
ssh-add(1): 新しい -Q フラグでエージェントの "query" 拡張を通じて
プロトコル拡張を照会するサポートを追加する。
* ssh(1): support multiple files in a ssh_config RevokedHostKeys
directive. bz3918
ssh(1): ssh_config の RevokedHostKeys ディレクティブで
複数のファイルをサポートする。 bz3918
* sshd(8): support multiple files in a sshd_config RevokedKeys
directive bz3918
sshd(8): sshd_config の RevokedKeys ディレクティブで
複数のファイルをサポートする。 bz3918
* ssh(1): add a ~I escape option that shows information about the
current SSH connection.
ssh(1): 現在の SSH 接続に関する情報を表示する ~I エスケープ
オプションを追加する。
* ssh(1): add an "ssh -Oconninfo user@host" multiplexing command
that shows connection information, similar to the ~I escapechar.
ssh(1): ~I エスケープ文字と同様に接続情報を表示する
"ssh -Oconninfo user@host" 多重化コマンドを追加する。
* ssh(1): add an "ssh -O channels user@host" multiplexing command to
get a running mux process to show information about what channels
are currently open.
ssh(1): 実行中の mux プロセスから現在開いているチャネルの
情報を表示する "ssh -O channels user@host" 多重化コマンドを追加する。
* sshd(8): add 'invaliduser' penalty to PerSourcePenalties, which is
applied to login attempts for usernames that do not match real
accounts. Defaults to 5s to match 'authfail' but allows
administrators to block such attempts for longer if desired.
sshd(8): PerSourcePenalties に 'invaliduser' ペナルティを追加する。
これは実際のアカウントと一致しないユーザー名でのログイン試行に
適用される。デフォルトは 'authfail' と一致する 5 秒だが、
管理者が望む場合はそのような試行をより長くブロックできる。
* sshd(8): add a GSSAPIDelegateCredentials option for the server,
controlling whether it accepts delegated credentials offered by
the client. This option mirrors the same option in ssh_config.
GHPR614
sshd(8): サーバー用の GSSAPIDelegateCredentials オプションを追加する。
クライアントが提供する委任された資格情報を受け入れるかどうかを制御する。
このオプションは ssh_config の同オプションと対になる。
GHPR614
* ssh(1), sshd(8): support the VA DSCP codepoint in the IPQoS
directive.
ssh(1), sshd(8): IPQoS ディレクティブで VA DSCP コードポイントを
サポートする。
* sshd(8): convert PerSourcePenalties to using floating point time,
allowing penalties to be less than a second. This is useful if you
need to penalise things you expect to occur at >=1 QPS.
sshd(8): PerSourcePenalties を浮動小数点の時間値を使うようにし、
1 秒未満のペナルティを可能にする。これは 1 QPS 以上で発生すると
予想されるものにペナルティを課す必要がある場合に有用である。
* ssh-keygen(1): support writing ED25519 keys in PKCS8 format.
GHPR570
ssh-keygen(1): ED25519 キーを PKCS8 形式で書き込むサポートを追加する。
GHPR570
* Support the ed25519 signature scheme via libcrypto.
libcrypto 経由で ed25519 署名スキームをサポートする。
Bugfixes
--------
バグ修正
* sshd(8): make IPQoS first-match-wins in sshd_config, like other
configuration directives. bz3924
sshd(8): sshd_config で IPQoS を他の設定ディレクティブと同様に
最初の一致が優先されるようにする。 bz3924
* sshd(8): fix potential crash when MaxStartups is using a single
argument (i.e. not using the MaxStartps x:y:z form) to a value
below 10. bz3941
sshd(8): MaxStartups が単一の引数を使用している場合
(つまり MaxStartups x:y:z 形式ではない場合) に、値が 10 未満の
ときの潜在的なクラッシュを修正する。 bz3941
* sshd(8): fix a potential hang during key exchange if needed DH
group values were missing from /etc/moduli.
sshd(8): 必要な DH グループ値が /etc/moduli にない場合の
鍵交換中の潜在的なハングを修正する。
* ssh-agent(1): fix return values from extensions to be correct wrt
draft-ietf-sshm-ssh-agent: extension requests should indicate
failure using SSH_AGENT_EXTENSION_FAILURE rather than the generic
SSH_AGENT_FAILURE error code. This allows the client to discern
between "the request failed" and "the agent doesn't support this
extension".
ssh-agent(1): draft-ietf-sshm-ssh-agent に対して正しくなるよう
拡張からの戻り値を修正する。拡張リクエストは汎用的な
SSH_AGENT_FAILURE エラーコードではなく
SSH_AGENT_EXTENSION_FAILURE を使用して失敗を示すべきである。
これにより、クライアントは「リクエストが失敗した」のか
「エージェントがこの拡張をサポートしていない」のかを区別できる。
* ssh(1): use fmprintf for showing challenge-response name and info
to preserve UTF-8 characters where appropriate. Prompted by GitHub
PR#452.
ssh(1): チャレンジレスポンスの名前と情報の表示に fmprintf を使用し、
適切な場合に UTF-8 文字を保持する。GitHub PR#452 による。
* scp(1): when uploading a directory using sftp/sftp (e.g. during a
recursive transfer), don't clobber the remote directory
permissions unless either we created the directory during the
transfer or the -p flag was set. bz3925
scp(1): sftp を使用してディレクトリをアップロードする場合
(例: 再帰転送中)、転送中にディレクトリを作成した場合または
-p フラグが設定されている場合を除き、リモートディレクトリの
パーミッションを上書きしない。 bz3925
* All: implement missing pieces of FIDO/webauthn signature support,
mostly related to certificate handling and enable acceptance of this
signature format by default. bz3748 GHPR624 GHPR625
All: FIDO/webauthn 署名サポートの欠落部分を実装する。
主に証明書の処理に関連し、この署名形式のデフォルトでの
受け入れを有効にする。 bz3748 GHPR624 GHPR625
* sshd_config(5): make it clear that DenyUsers/DenyGroups overrides
AllowUsers/AllowGroups. Previously we specified the order in which
the directives are processed but it was ambiguous as to what
happened if both matched.
sshd_config(5): DenyUsers/DenyGroups が AllowUsers/AllowGroups を
オーバーライドすることを明確にする。以前はディレクティブが処理される
順序を指定していたが、両方が一致した場合に何が起こるかは曖昧だった。
* ssh(1): don't try to match certificates held in an agent to
private keys. This matching is done to support certificates that
were loaded without their private key material, but is
unnecessary for agent-hosted certificate which always have
private key material available in the agent. Worse, this matching
would mess up the request sent to the agent in such a way as to
break usage of these keys when the key usage was restricted in
the agent. bz3752
ssh(1): エージェントに保持されている証明書を秘密鍵と照合しようと
しない。この照合は秘密鍵素材なしで読み込まれた証明書をサポートする
ために行われるが、エージェントでホストされた証明書では常に秘密鍵素材が
エージェントで利用可能であるため不要である。さらに、この照合は
エージェントで鍵の使用が制限されている場合にエージェントに送信される
リクエストを壊し、これらの鍵の使用を破壊する可能性があった。 bz3752
* sftp(1): if editline has been switched to vi mode (i.e. via "bind
-v" in .editrc), setup a keybinding so that command mode can be
entered.
sftp(1): editline が vi モードに切り替えられている場合
(例: .editrc の "bind -v")、コマンドモードに入れるように
キーバインドを設定する。
* ssh(1), sshd(8): improve performance of keying the sntrup761 key
agreement algorithm.
ssh(1), sshd(8): sntrup761 鍵合意アルゴリズムの処理性能を改善する。
* ssh(1), sshd(8): enforce maximum packet/block limit during
pre-authentication phase.
ssh(1), sshd(8): 認証前フェーズ中に最大パケット/ブロック制限を
強制する。
* sftp(1): don't misuse the sftp limits extension's open-handles
field. This value is supposed to be the number of handles a
server will allow to be opened and not a number of outstanding
read/write requests that can be sent during an upload/download.
sftp(1): sftp limits 拡張の open-handles フィールドを誤用しない。
この値はサーバーが開くことを許可するハンドル数であり、
アップロード/ダウンロード中に送信できる未処理の
読み取り/書き込みリクエスト数ではない。
* sshd(8): don't crash at connection time if the main sshd_config
lacks any subsystem directive but one is defined in a Match block.
bz3906
sshd(8): メインの sshd_config に subsystem ディレクティブがないが
Match ブロックで定義されている場合に、接続時にクラッシュしない。
bz3906
* sshd_config(5): add a warning next to the ForceCommand directive
that forcing a command doesn't automatically disable forwarding.
sshd_config(5): ForceCommand ディレクティブの隣に、コマンドの
強制は自動的にフォワーディングを無効にしないという警告を追加する。
* sshd_config(5): add a warning that TOKENS are replaced without
filtering or escaping and that it's the administrator's
responsibility to ensure they are used safely in context.
sshd_config(5): TOKENS はフィルタリングやエスケープなしに
置換されるため、コンテキスト内で安全に使用されることを確認するのは
管理者の責任であるという警告を追加する。
* scp(1): correctly quote filenames in verbose output for local->
local copies. bz3900
scp(1): ローカル間コピーの詳細出力でファイル名を正しく
クォートする。 bz3900
* sshd(8): don't mess up the PerSourceNetBlockSize IPv6 mask if
sscanf didn't decode it. GHPR598
sshd(8): sscanf がデコードしなかった場合に
PerSourceNetBlockSize の IPv6 マスクを壊さない。 GHPR598
* ssh-add(1): when loading FIDO2 resident keys, set the comment to
the FIDO application string. This matches the behaviour of
ssh-keygen -K. GHPR608
ssh-add(1): FIDO2 レジデントキーを読み込む際、コメントを
FIDO アプリケーション文字列に設定する。これは ssh-keygen -K の
動作と一致する。 GHPR608
* sshd(8): don't strnvis() log messages that are going to be logged
by sshd-auth via its parent sshd-session process, as the parent
will also run them though strnvis(). Prevents double-escaping of
non-printing characters in some log messages. bz3896
sshd(8): sshd-auth が親の sshd-session プロセスを通じてログに記録する
メッセージに strnvis() を適用しない。親も strnvis() を実行するため
である。一部のログメッセージで非印字文字の二重エスケープを防止する。
bz3896
* ssh-agent(1): escape SSH_AUTH_SOCK paths that are sent to the
shell as setenv commands. Unbreaks ssh-agent for home directory
paths that contain whitespace. bz3884
ssh-agent(1): シェルに setenv コマンドとして送信される
SSH_AUTH_SOCK パスをエスケープする。空白を含むホームディレクトリ
パスでの ssh-agent を修正する。 bz3884
* All: Remove unnecessary checks for ECDSA public key validity.
All: ECDSA 公開鍵の有効性の不要なチェックを削除する。
* sshd(8): activate UnusedConnectionTimeout only after the last
channel has closed. Previously UnusedConnectionTimeout could fire
early after a ChannelTimeout. This was not a problem for the
OpenSSH client because it terminates once all channels have
closed but could cause problems for other clients (e.g. API
clients) that do things differently. bz3827
sshd(8): 最後のチャネルが閉じた後にのみ UnusedConnectionTimeout を
アクティブにする。以前は ChannelTimeout の後に
UnusedConnectionTimeout が早期に発火する可能性があった。これは
OpenSSH クライアントではすべてのチャネルが閉じると終了するため
問題ではなかったが、異なる動作をする他のクライアント
(例: API クライアント) では問題を引き起こす可能性があった。 bz3827
* All: fix PKCS#11 key PIN entry problems introduced in
openssh-10.1/10.2. bz3879
All: openssh-10.1/10.2 で導入された PKCS#11 キーの PIN 入力問題を
修正する。 bz3879
* scp(1): when using the SFTP protocol for transfers, fix implicit
destination path selection when source path ends with "..". bz3871
scp(1): SFTP プロトコルを使用した転送で、ソースパスが ".." で
終わる場合の暗黙の宛先パス選択を修正する。 bz3871
* sftp(1): when tab-completing a filename, ensure that the completed
string does not end up mid-way through a multibyte character, as
this will cause a fatal() later on. GHPR#587
sftp(1): ファイル名のタブ補完時に、補完された文字列がマルチバイト文字の
途中で終わらないようにする。そうでないと後で fatal() が発生する。
GHPR#587
* ssh-keygen(1): fix crash at exit (visible via ssh-keygen -D) when
multiple keys loaded.
ssh-keygen(1): 複数のキーが読み込まれている場合の終了時の
クラッシュを修正する (ssh-keygen -D で顕在化する)。
* scp(1)/sftp(1): correctly display bandwidths >2GBps in the
progress meter.
scp(1)/sftp(1): プログレスメーターで 2GBps を超える帯域幅を
正しく表示する。
Portability
-----------
移植性
* sshd(8): fix condition intoduced in openssh 10.2p1 stable branch
here a PAM module that changed the requested username between
SSH_MSG_USERAUTH_REQUEST messages during authentication could
confuse the PAM stack and let it proceed with a different
understanding of the active username than the rest of sshd.
Reported by Mike Damm.
sshd(8): openssh 10.2p1 安定版ブランチで導入された、認証中に
SSH_MSG_USERAUTH_REQUEST メッセージ間で要求されたユーザー名を変更する
PAM モジュールが PAM スタックを混乱させ、sshd の残りの部分とは
異なるアクティブユーザー名の理解で処理を続行させる可能性がある
状態を修正する。Mike Damm により報告。
* sshd(8): immediately report interactive instructions to clients
when using keyboard-interactive authentication with PAM. bz2876
sshd(8): PAM を使用したキーボードインタラクティブ認証時に、
インタラクティブな指示をクライアントに即座に報告する。 bz2876
* sshd(8): fix duplicate PAM messages under some situations.
sshd(8): 一部の状況で PAM メッセージが重複する問題を修正する。
* sshd(8): don't leak PAM handle on repeat invocations. bz3882
sshd(8): 繰り返しの呼び出しで PAM ハンドルをリークしない。 bz3882
* All: support linking libcrypto implementations (e.g. BoringSSL)
that require libstdc++.
All: libstdc++ を必要とする libcrypto 実装
(例: BoringSSL) のリンクをサポートする。
* sshd(8): fix ut_type for btmp records, correctly using
LOGIN_PROCESS and USER_PROCESS.
sshd(8): btmp レコードの ut_type を修正し、LOGIN_PROCESS と
USER_PROCESS を正しく使用する。
* sshd(8): allow uname(3) in the seccomp sandbox. This is needed by
zlib-ng on RISC-V platforms.
sshd(8): seccomp サンドボックスで uname(3) を許可する。
これは RISC-V プラットフォームの zlib-ng に必要である。
* All: remove remaining OpenSSL_add_all_algorithms() calls.
We already have OPENSSL_init_crypto() in the compat layer.
Prompted by github PR#606
All: 残りの OpenSSL_add_all_algorithms() 呼び出しを削除する。
互換レイヤーに既に OPENSSL_init_crypto() がある。
github PR#606 による。
* All: fix builds on older Mac OS wrt nfds_t.
All: nfds_t に関する古い Mac OS でのビルドを修正する。
* mdoc2man: several improvements including better support for Dl
and Ns inside Ic.
mdoc2man: Ic 内の Dl と Ns のサポート改善を含むいくつかの改善。