OpenSSH 10.4/10.4p1 发布
摘要
OpenSSH 10.4/10.4p1 发布,包含安全修复和实验性后量子签名支持。
暂无内容
查看缓存全文
缓存时间: 2026/07/07 02:08
来源:https://www.openssh.org/txt/release-10.4
OpenSSH 10.4 于 2026-07-06 发布。可从 https://www.openssh.com/ 所列镜像站获取。OpenSSH 是一个 100% 完整的 SSH 协议 2.0 实现,并包含 sftp 客户端和服务器支持。再次感谢 OpenSSH 社区对本项目的持续支持,尤其感谢那些贡献代码或补丁、报告 bug、测试快照或向本项目捐款的人。更多捐款信息请参见:https://www.openssh.com/donations.html
潜在不兼容变更
------------------
* sshd(8):配置转储模式("sshd -G")现在以混合大小写形式写入指令(例如 "PubkeyAuthentication"),而之前仅输出小写名称。
* sshd(8):在启用了 seccomp 沙盒的 Linux 系统上,启用 SECCOMP 或 NO_NEW_PRIVS 失败现在会导致致命错误。此前 sshd(8) 会记录错误但继续运行,以支持缺少这些功能的系统。现在缺少这些功能的系统应在配置时禁用沙盒。
* ssh(1)、sshd(8):加强传输协议严格性,如果对等端在认证后的密钥重新交换期间发送非 KEX 消息,则断开连接。此前恶意对等端可以继续发送非密钥交换消息而不受惩罚,这些消息会被缓冲,导致内存浪费直到连接终止或服务器/客户端达到内存限制。根据 RFC4253 第 7.1 节,不限制密钥交换期间发送消息的实现可能会被断开。由 Marko Jevtic 报告。
自 OpenSSH 10.3 以来的变更
==========================
本版本包含若干安全修复、一般 bug 修复以及几个新功能。
安全
=====
* sftp(1):在使用 "sftp host:/path ." 命令从命令行下载文件时,恶意服务器可能导致文件被下载到非预期位置。该问题由 Swival Security Scanner 发现。
* scp(1):在两个远程目的地之间复制文件时,不允许恶意服务器将文件写入目标目录的父目录。该问题由 Swival Security Scanner 发现。
* sshd(8):使用 "internal-sftp" SFTP 服务器实现(非默认)时,长命令行在第 9 个参数之后会被静默截断。如果安全相关选项位于第 10 个或更后面的位置,它将被丢弃。由 Steve Caffrey 报告。
* sshd(8):添加文档注释,说明当服务器加入 Windows Active Directory 时,GSSAPIStrictAcceptorCheck 选项无效。由 Safebreach 的 Yarin Aharoni 报告。
* sshd(8):DisableForwarding=yes 没有按照文档描述覆盖 PermitTunnel=yes。请注意 PermitTunnel 默认未启用。分别由 Redhat 的 Huzaifa Sidhpurwala 和 Marko Jevtic 独立报告。
* sshd(8):避免在启用 GSSAPIAuthentication 时(该功能默认关闭)出现潜在的预认证拒绝服务。此问题不受 MaxAuthTries 缓解,但会受到 PerSourcePenalties 惩罚。由 milCERT AT(奥地利国防部)的 Manfred Kaiser 报告。
* sshd(8):修复若干未强制实施最小认证延迟的情况。由 Orange Cyberdefense 漏洞团队报告。
* ssh(1):修复当服务器在密钥重新交换期间更改其主机密钥时可能发生的客户端释放后使用(use-after-free)。由 Depthfirst 的 Zhenpeng (Leo) Lin 报告。
新功能
--------
* 全部:添加实验性支持,用于一种组合后量子签名方案,该方案结合了 ML-DSA 44 和 Ed25519,如 draft-miller-sshm-mldsa44-ed25519-composite-sigs 所规定。该方案默认未启用。要使用它,需要将其添加到 HostKeyAlgorithms、PubkeyAcceptedAlgorithms 等选项中。可使用 "ssh-keygen -t mldsa44-ed25519" 生成密钥。
* ssh(1)、sshd(8):将通配符模式匹配器替换为基于 NFA 的实现。这避免了旧实现的指数级最坏情况行为。
Bug 修复
--------
* ssh-agent(1):修复对 "query" SSH_AGENTC_EXTENSION 请求的错误回复。bz3967
* sshd(8):避免在 GSSAPIAuthentication(默认关闭)中为有效和无效用户发送可观察到的不同消息。
* ssh(1)、sshd(8):修复若干将批量流量错误分类为交互流量的 bug。bz3972、bz3958
* ssh-keygen(1)、ssh-add(1):从 FIDO 令牌下载驻留密钥时跳过不支持的密钥类型。之前遇到此类密钥时下载会中止。GHPR657
* ssh(1):修复在 cipher_init() 失败的错误路径上可能发生的释放后使用。
* sshd(8):对在 sshd 权限分离子进程之间传递的传输状态执行更严格的编码和验证。这进一步增强了服务器对 sshd-auth 或 sshd-session 子进程攻击的防护。
* ssh-agent(1):通过对密钥使用约束中用户名长度施加限制,避免可能的运行时拒绝服务。
* sftp(1):修复两个独立的单字节越界读取,分别位于 SSH2_FXP_REALPATH 和批处理命令处理中。
* sftp-server(8):禁止使用 copy-data 扩展同时读取和写入同一个 inode。
* ssh(1)、sshd(8):如果在发送 x11-req SSH_MSG_CHANNEL_REQUEST 之前创建了 X11 通道,则避免 strlen(NULL) 崩溃。GHPR679
* sftp(1)、scp(1):避免在读取文件时,如果故障服务器重复返回零长度,sftp_download() 可能陷入循环的情况。
* ssh(1):避免将 DNS0x20 大小写随机化名称泄漏到使用 CanonicalizePermittedCNAMEs 规范化的名称中。bz3966
* sftp-server(8):在 PATH_MAX 不是实际最大长度的系统上,处理 SSH_FXP_REALPATH 时避免传递给 lstat() 的路径名被截断。GHPR688
* ssh(1)、sshd(8):修正某些套接字类型通道的 poll(2) 事件掩码的设置。GHPR660
* sshd(8):对 sshd_config 解析和管理代码进行重大重构,以允许在权限分离边界上进行更精确的序列化/反序列化。
* ssh-add(1):仅在 getopt() 处理完成后才打开与代理的连接,以使 "-v" 等选项有机会显示此操作的调试信息。
* 加密代码:修复在对长度大于 size_t 可容纳的消息进行签名时的边界检查。在 OpenSSH 中,消息大小受 SSHBUF_SIZE_MAX 限制,因此此问题无法触发。
* 加密代码:为 ed25519 验证添加签名可塑性和公钥有效性检查。SSH 不依赖这些属性。
* 加密代码:修复对于辅因子 != 1 的曲线进行 ECDSA 顺序校验的问题。所有支持的 EC 曲线辅因子均为 1,因此此问题无法触发。
* sshd(8):在记录子系统启动失败的原因时,区分执行失败和子系统未找到。GHPR637
* 全部:对 timegm(3) 和 mktime(3) 的错误检测使用更安全的习惯用法。
* ssh(1)、sshd(8):避免在配置文件或命令行参数中接受无效的密码或 MAC 列表。这可能导致后续运行时失败。
* ssh(1):修复在使用无对应 .pub 密钥的 PEM 格式私钥进行公钥认证时的 NULL 解引用崩溃。
* sshd(8):当使用 PKCS#11 密钥时,不在尝试加载主机私钥时打印错误消息,因为此类密钥不需要文件系统上的私钥部分。GHPR664
* 全部:不使用已弃用的 ERR_load_crypto_strings()。GHPR650
* ssh(1):正确报告配置默认设置期间的错误。GHPR649
* ssh(1):在错误消息中使用正确的指令名称(Match 而非 Host)。bz3968
* sftp(1):修复 "ls -ln" 未能正确显示数字 UID/GID,而是显示用户和组名的问题。bz3953
* sshd(8):避免在配置解析期间分配失败时可能出现的 NULL 解引用。bz3948
* 全部:修复在多个位置加载过大公钥时防护措施无效的问题。bz3969 和 bz3970
* sftp(1):确保 sftp 用于与其 ssh(1) 子进程通信的文件描述符不会泄漏到执行的子进程中(例如通过 "!")。GHPR693
可移植性
----------
* 将 fmt_scaled.c 与 OpenBSD 上游同步,修复了大指数情况下的精确性问题(GHPR671)。
* sshd(8):移除 clock_gettime64 的重复沙盒条目。
* ssh(1)、sshd(8):如果系统头文件未提供,则使用正确的 IPTOS_DSCP_VA 值。
* 将 getrrsetbyname.c 与 OpenBSD 上游同步,引入了鲁棒性修复。
* 在 openbsd-compat 中禁用 strvisx(3) 和 stravis(3) 的替代实现,因为它们在 OpenSSH 中未使用。
* 避免 Android 上的 fortify 警告(bz3954)。
* 修复可移植性代码中错误路径上的若干内存泄漏。GHPR681
* 修订 README.privsep 文档,以反映 sshd 最近切换到多二进制模型的情况。
校验和:
==========
* SHA1 (openssh-10.4.tar.gz) = 8502b516230865e229d55045bb4ccc67aeae905b
* SHA256 (openssh-10.4.tar.gz) = qUVI+wMg4mVpiQbXvfMVkF3Zuyy2JrS+ZjN764mtyGE=
* SHA1 (openssh-10.4p1.tar.gz) = ae8650a71cc52dbbd049519cee276ae6d65c2c4d
* SHA256 (openssh-10.4p1.tar.gz) = 72Am3SrqjVYFljjV0yYpAsiSzrqfiDlYNeDQbT+2Mjg=
请注意,SHA256 签名采用 base64 编码,而非十六进制(大多数校验和工具的默认格式)。用于签署发布的 PGP 密钥可从镜像站点获取:
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc
报告 Bug:
==============
* 请阅读 https://www.openssh.com/report.html
安全 bug 应直接报告至 [email protected]
相似文章
OpenSSH 10.4
OpenSSH 10.4 于 2026 年 7 月 6 日发布,包含安全修复以及对一种结合 ML-DSA 44 和 Ed25519 的复合后量子签名方案的实验性支持。
OpenBSD 7.9 发布
OpenBSD 7.9 已发布,包含针对 arm64、amd64、luna88k、riscv64 等架构的平台特定改进,以及各种错误修复和增强的硬件支持。
Erlang/OTP 29.0 发布
Erlang/OTP 29.0 是一个重要版本,引入了原生记录、多值推导式、改进的编译器警告,以及增强的安全默认设置(如禁用 SSH 守护进程)。此外,该版本还包含了 JIT 改进以及诸如后量子加密支持等实验性功能。
被植入木马的OpenSSH(2002年)
2002年8月,OpenBSD FTP服务器上的OpenSSH源码tarball包被替换为被植入木马的版本,导致了一起安全事件,OpenBSD团队对此作出了响应。
Let's Encrypt的后量子未来
Let's Encrypt宣布计划采用Merkle Tree证书进行后量子认证,以应对Web PKI中向后量子签名迁移日益增长的紧迫性。