OpenSSH 10.5 修复 ssh-agent 锁定绕过与 sshd restrict 隧道转发遗漏
官方发布说明:releasenotes.html
10.5 发布说明:release-10.5
OpenSSH 10.5 于 2026-08-11 发布。
不兼容变化
Portable OpenSSH 现在要求 libcrypto 提供 ECC(椭圆曲线)支持,包括 NISTP521 曲线。ECC 已包含在所有受支持 libcrypto 实现(LibreSSL、OpenSSL、BoringSSL、AWS LC)的默认构建配置里。--without-openssl 构建不受影响。
安全修复
ssh-agent(1):修复「agent 锁定」与session-bind@openssh.com扩展(用于标识被转发的 agent)之间的交互问题。agent 被锁定时,这些绑定请求遭到拒绝,结果是本应只限本地使用的操作可以被远程执行,包括添加 PKCS#11 token、以及使用带有 destination 限制的密钥。报告者 sn0x-sharma。ssh(1):修复客户端中一个潜在的reallocuse-after-free——当通过本地 session 多路复用 socket 添加远程转发、而向服务器发起远程转发 open 请求仍在挂起时可能触发。报告与修复来自 Brian Mingus(Cognatory)。sshd(8):authorized_keys的restrict关键字现在也正确作用于隧道转发(隧道转发默认在管理上被禁用)。报告者 Erichen(中科院计算所)。
新特性
ssh-keygen(1):在重置私钥口令时,可设置或清除 FIDO 私钥上的 touch-required 与 verify-required 标志。ssh(1):调整公钥认证时尝试证书的顺序——优先不需要用户触碰(touch)的 FIDO 密钥,把需要 PIN/生物识别的 FIDO 密钥放到最后,即先试低摩擦认证器。ssh(1):新增ssh -Z user@host模式,按将使用的顺序打印公钥认证会尝试的密钥。sshd(8):使用setproctitle(3)标识充当认证后监视器的sshd-session。
Bug 修复要点
ssh-keyscan(1):读取服务器 banner 改为非阻塞,避免某台卡住的服务器阻塞多主机 keyscan。sshd(8):修复sshd_config的 Match 块内ChannelTimeout与RekeyLimit不生效的问题。sshd(8):重新允许在 Match 块内使用PAMServiceName(openssh-10.4 重构时被误禁,bz3987)。sshd(8):修复 10.4 重构中损坏的 GSSAPI 选项名(bz3974)。sshd(8):把「公钥类型是否符合允许算法」的检查移到解析对端发送的密钥之前,减少预认证攻击面(建议者:Anthropic 的 Christopher Paul Rohlf)。
更早版本的关键项
OpenSSH 10.4(2026-07,含若干安全修复)
- 全部组件新增对复合后量子签名方案的实验性支持,组合 ML-DSA 44 与 Ed25519(
draft-miller-sshm-mldsa44-ed25519-composite-sigs)。该方案默认不启用,需加入HostKeyAlgorithms、PubkeyAcceptedAlgorithms等;密钥可用ssh-keygen -t mldsa44-ed25519生成。 ssh(1)、sshd(8):把通配符匹配器换成基于 NFA 的实现,避免旧实现的最坏情况指数级行为。sshd(8):internal-sftp实现下,长命令行此前在第 9 个参数后被静默截断;若有安全相关选项落在第 10 位及之后,会被丢弃(报告者 Steve Caffrey)。sshd(8):避免GSSAPIAuthentication启用时(默认关闭)的预认证 DoS;该问题不受MaxAuthTries缓解,但会被PerSourcePenalties惩罚(报告者:奥地利国防部 milCERT AT 的 Manfred Kaiser)。sshd(8):修复若干未强制最小认证延迟的情况。
OpenSSH 10.3(2026-04-02)
ssh(1)、sshd(8):移除对不支持 rekeying 实现的 bug 兼容;此类实现与 OpenSSH 互通时最终会在传输需要 rekey 时失败。- 证书 principals 段为空时现在永不匹配任何 principal(此前在某些情况下被当作通配符,存在风险);修正证书 principals 中通配符的解释,主机证书一致实现、用户证书不支持通配符。
ssh(1):-J与-oProxyJump="..."现在校验用户与主机名(命令行传入时),防止 shell 注入。