← 返回信息流
AI 资讯Hacker News·3 小时前

OpenSSH 10.4/10.4p1 正式发布

原标题:OpenSSH 10.4/10.4p1 Released

速览

OpenSSH项目发布了10.4及10.4p1版本,这是安全通信工具的重要更新。新版本修复了多个安全漏洞,并引入了新的功能特性。该版本对服务器和客户端均有改进,建议用户及时升级。

AI 深度解读

背景

OpenSSH 是使用最广泛的 SSH 协议实现,提供安全的远程登录、文件传输等功能,广泛应用于服务器管理、自动化运维和云基础设施。2026 年 7 月 6 日,OpenSSH 发布了 10.4 版本(对应 OpenSSH 10.4 及 OpenSSH 10.4p1),这是继 10.3 之后的一次重要更新,重点修复了多个安全漏洞,并引入了实验性后量子签名支持。

核心内容

OpenSSH 10.4 是一次融合安全修复、新功能与多项 bug 修复的常规版本。以下是本次发布的主要变更:

潜在不兼容变更

  • sshd(8) 配置转储模式变化sshd -G 现在输出的配置指令采用混合大小写(如 PubkeyAuthentication),此前仅输出小写名称。
  • Linux seccomp 沙箱行为变更:在启用 seccomp 沙箱的 Linux 系统上,若无法启用 SECCOMPNO_NEW_PRIVS,sshd 将直接终止进程(此前仅记录错误并继续运行)。缺乏这些特性的系统应在编译时禁用沙箱。
  • 传输协议严格化:在认证后的密钥重交换期间,如果对端发送非密钥交换消息,ssh(1) 和 sshd(8) 会立即断开连接。此前恶意对端可无惩罚地持续发送非密钥交换消息,导致缓冲区内存浪费直至连接终止或达到内存限制。该问题由 Marko Jevtic 报告。

安全修复

本次修复了多个安全漏洞,涵盖 sftp、scp、sshd 和 ssh:

  1. sftp(1) 命令行下载路径劫持:使用 sftp host:/path . 下载文件时,恶意服务器可将文件下载到非预期位置(由 Swival Security Scanner 发现)。
  2. scp(1) 远程到远程复制目录穿越:在两个远程目的地之间复制文件时,不允许恶意服务器将文件写入目标目录的父目录(同样由 Swival Security Scanner 发现)。
  3. sshd(8) internal-sftp 命令行截断:当使用 internal-sftp SFTP 服务器实现(非默认)时,长命令行的第 10 个及之后的参数会被静默丢弃,可能导致安全相关选项失效(Steve Caffrey 报告)。
  4. GSSAPIStrictAcceptorCheck 文档补充:明确说明当服务器加入 Windows Active Directory 时,该选项无效(Safebreach 的 Yarin Aharoni 报告)。
  5. DisableForwarding 与 PermitTunnel 冲突DisableForwarding=yes 未能覆盖 PermitTunnel=yes(后者默认关闭)。由 Redhat 的 Huzaifa Sidhpurwala 和 Marko Jevtic 独立报告。
  6. GSSAPIAuthentication 预认证 DoS:当启用 GSSAPIAuthentication(默认关闭)时,存在潜在的预认证拒绝服务漏洞,不受 MaxAuthTries 限制,但会被 PerSourcePenalties 惩罚(奥地利国防部 milCERT AT 的 Manfred Kaiser 报告)。
  7. 最小认证延迟未强制:修复多个未正确执行最小认证延迟的情况(Orange Cyberdefense 漏洞团队报告)。
  8. 客户端 use-after-free:若服务器在密钥重交换期间更换主机密钥,可能导致客户端 use-after-free(Depthfirst 的 Zhenpeng (Leo) Lin 报告)。

新特性

  • 实验性后量子签名方案:所有组件新增对组合后量子签名方案 ML-DSA 44 + Ed25519 的实验性支持(依据 draft-miller-sshm-mldsa44-ed25519-composite-sigs)。该方案默认不启用,需手动添加到 HostKeyAlgorithmsPubkeyAcceptedAlgorithms 等配置中。密钥可通过 ssh-keygen -t mldsa44-ed25519 生成。
  • 通配符模式匹配器替换:ssh(1) 和 sshd(8) 将原有的通配符模式匹配器替换为基于 NFA(非确定有限自动机)的实现,避免旧实现中的指数级最坏情况性能问题。

Bug 修复

本版本修复了大量 bug,涵盖 ssh-agent、sshd、ssh-keygen、sftp、scp 等组件,包括但不限于:

  • ssh-agent:修复对 SSH_AGENTC_EXTENSION 查询请求的错误回复(bz3967)。
  • sshd:在 GSSAPIAuthentication(默认关闭)中避免对有效/无效用户发送可观测的不同消息。
  • ssh/sshd:修复将批量流量误判为交互式流量的多个 bug(bz3972、bz3958)。
  • ssh-keygen/ssh-add:从 FIDO token 下载常驻密钥时跳过不支持的密钥类型(此前遇到即中止)(GHPR657)。
  • ssh:修复 cipher_init() 失败时的潜在 use-after-free。
  • sshd:对权限分离子进程间传递的传输状态进行更严格的编码和验证,加强服务器安全性。
  • ssh-agent:对密钥使用约束中的用户名长度施加限制,避免运行时 DoS。
  • sftp:修复 SSH2_FXP_REALPATH 和批处理命令处理中的两个单字节越界读取。
  • sftp-server:禁止使用 copy-data 扩展同时读写同一 inode。
  • ssh/sshd:修复在 x11-req 消息发送前创建 X11 通道导致的 strlen(NULL) 崩溃(GHPR679)。
  • sftp/scp:修复 sftp_download() 在服务器反复返回零长度时陷入循环的问题。
  • ssh:避免将 DNS0x20 大小写随机化的名称泄露到通过 CanonicalizePermittedCNAMEs 规范化的名称中(bz3966)。
  • sftp-server:修复在 PATH_MAX 不是实际最大值的系统上,处理 SSH_FXP_REALPATH 时路径名截断问题(GHPR688)。
  • ssh/sshd:修正某些 socket 类型通道的 poll(2) 事件掩码设置(GHPR660)。
  • sshd:对 sshd_config 解析和管理代码进行重大重构,以便在权限分离边界上进行更精确的序列化/反序列化。
  • ssh-add:在 getopt() 处理完成后才打开与 agent 的连接,使 -v 等选项能显示调试信息。
  • 加密代码:修复长度超过 size_t 可容纳范围的签名消息的边界检查(OpenSSH 中消息大小受 SSHBUF_SIZE_MAX 限制,实际不可达)。
  • 加密代码:为 ed25519 验证增加签名可变性和公钥有效性检查(SSH 不依赖这些属性,但作为防御性加固)。
  • 加密代码:修复 cofactor != 1 曲线的 ECDSA 顺序检查(所有支持的 EC 曲线 cofactor 均为 1,因此不可达)。
  • sshd:在日志中区分子系统启动失败的原因是执行失败还是子系统未找到(GHPR637)。
  • 所有组件:使用更安全的 timegm(3)mktime(3) 错误检测惯用法。
  • ssh/sshd:避免接受配置文件或命令行参数中的无效密码或 MAC 列表(可能导致运行时失败)。
  • ssh:修复使用 PEM 风格私钥且没有对应 .pub 密钥文件时的 NULL 解引用崩溃。
  • sshd:使用 PKCS#11 密钥时不打印加载主机私钥的错误消息(这些密钥不需要文件系统上的私钥部分)(GHPR664)。
  • 所有组件:不再使用已废弃的 ERR_load_crypto_strings()(GHPR650)。
  • ssh:正确报告配置默认设置期间的错误(GHPR649)。
  • ssh:在错误消息中使用正确的指令名(Match 而非 Host)(bz3968)。
  • sftp:修复 ls -ln 命令(原文此处被截断,推测是修复该命令的显示问题)。

关键要点

  • 安全修复密集:本次修复了 8 个安全漏洞,涉及 sftp 下载路径劫
查看原文 →openssh.org