2026-04-14  |  工具安全  |  阅读约 12 分钟

OpenSSH 10.3 发布:5个安全修复,证书权限绕过漏洞被堵

2026年4月2日,OpenSSH 10.3 正式发布,距上次版本(10.2)正好6个月。这是又一个以安全修复为主线的版本,包含了从命令注入到证书权限绕过的5个安全漏洞修复,同时带来了代理跳转注入防护、ssh-agent 查询扩展、多路复用状态查看等多项运维友好的新功能。

5
安全修复
3
不兼容变更
13+
新增功能
30+
Bug 修复
OpenSSH SSH 安全 服务器运维 证书认证

一、安全修复(重点)

这是每个管理员最需要关注的部分。10.3 一口气修复了 5 个安全问题,其中两个涉及认证绕过的严重风险,建议尽快升级。

🔥 CVE-待定 | ssh 命令行注入(通过 %-token)

高危 命令注入

影响组件:ssh(1)

描述:攻击者如果能够控制传递给 ssh 命令的用户名参数,并且 ssh_config 中使用了 %u token(例如在 Match exec 块中),则可能借此注入任意 shell 命令。这是继 10.0 版本修复 %r 扩展注入之后,%u token 暴露出的同类漏洞。

发现者:Florian Kohnhauser

⚠ 处置建议:如果您的 ssh_config 中使用了 %u 或其他 %-token,请立即升级 OpenSSH。同时强烈建议不要将 ssh 命令行直接暴露给不可信输入。

🔑 CVE-待定 | 证书空主体权限绕过

严重 权限绕过 证书认证

影响组件:sshd(8)

描述:此版本修复了一个历史久远的"设计遗憾"。在此之前,如果证书的 principals 字段为空(principals=""),则通过 authorized_keys principals="" 使用时,会被当作"通配符"——即该证书可以以任何 principal 身份认证。这意味着如果 CA 不慎签发了一张空 principals 证书,持有者理论上可以伪装成任意用户。

此次修复还统一了通配符在证书 principals 中的行为:主机证书支持通配符,用户证书不再支持

⚠ 注意:此漏洞仅影响通过 authorized_keysprincipals="" 配置信任的 CA。sshd_config 中的 TrustedUserCAKeys 路径不受影响。

🔒 CVE-待定 | authorized_keys principals 算法错误

中危 认证漏洞 证书认证

影响组件:sshd(8)

描述:在匹配 authorized_keys principals="" 选项与证书中的 principals 列表时,使用了错误的比较算法。当证书 principal 名称中包含逗号字符时,可能产生不当匹配。例如,若 authorized_keys 期望 alice,bob 两个独立 principal,攻击者可能通过构造包含逗号的恶意 principal 名称绕过检查。

不过实际利用条件较为苛刻:需要 CA 为包含逗号的多个期望 principal 签发证书,大多数标准 CA 都会严格限制签发内容。

发现者:Vladimir Tokarev

📂 CVE-待定 | scp 下载保留 setuid/setgid 位

高危 本地提权 scp

影响组件:scp(1)

描述:以 root 身份使用 legacy 模式(-O)下载文件时,如果没有加 -p(保留权限)参数,scp 不会清除文件上的 setuid/setgid 权限位。这意味着下载的恶意文件可能保留特殊权限,构成本地提权风险。

更令人意外的是,这个 bug 居然可以追溯到原始的 Berkeley rcp 程序——这是一个跨越数十年的历史遗留问题。

发现者:Christos Papakonstantinou (Cantina & Spearbit)

🔐 CVE-待定 | ECDSA 算法限制被绕过

中危 算法限制绕过

影响组件:sshd(8)

描述:PubkeyAcceptedAlgorithmsHostbasedAcceptedAlgorithms 配置指令在处理 ECDSA 密钥时存在逻辑错误:只要配置中出现了任意一个 ECDSA 算法名称(比如写了 ecdsa-sha2-nistp384),则系统会接受所有其他 ECDSA 算法,而无论它们是否在配置中被明确列出或排除。这等于使 ECDSA 的算法白名单/黑名单机制完全失效。

发现者:Christos Papakonstantinou (Cantina & Spearbit)

二、不兼容变更(Breaking Changes)

升级前请务必检查以下变更,它们可能影响现有系统行为。

1. 移除不支持 rekeying 的旧实现兼容性

Breaking

OpenSSH 现在会主动断开那些不支持密钥重协商(rekeying)的 SSH 实现。如果您的环境中存在非常老的 SSH 客户端或设备,升级后可能无法正常连接。这是对 SSH 协议安全性的收紧,建议排查并替换老旧客户端。

2. 证书空主体 principal 不再作为通配符匹配

Breaking

即上述安全修复的直接影响。如果您此前依赖 principals="" 作为通配符配置,请重新设计授权策略。

3. ProxyJump / -J 参数现在验证命令行输入

安全加固

ssh -J user@hostssh -o ProxyJump="..." 从命令行传入时,现在会对用户名和主机名进行合法性验证,防止命令行注入攻击。注意:配置文件中的 ProxyJump 不受此限制(配置本身被视为可信来源)。

三、新功能一览

~I 逃逸符:查看当前连接信息

新功能

连接过程中按 ~I(tilde + 大写I),即可在终端显示当前 SSH 连接的状态信息,无需退出连接。这是一个呼声很高的运维功能。

# 连接过程中按 ~I,输出示例:
# Connection Information:
#   Remote: example.com:22
#   Local:  192.168.1.100:54321
#   Key:    ED25519 SHA256:xxxxx
#   Cipher: chacha20-poly1305@openssh.com
#   MAC:    implicit

ssh -O conninfo:多路复用连接状态查看

新功能

通过 ControlMaster 多路复用连接时,新增 ssh -O conninfo user@host 命令,可以在不新建连接的情况下查看现有 mux 连接的信息,类似于 ~I 的效果。

ssh -O channels:查看已打开的通道

新功能

新增 ssh -O channels user@host,查看当前 mux 进程中已打开的所有 SSH 通道(channel),便于排查连接复用问题。

ssh-agent 支持 query 扩展 + ssh-add -Q 查询

新功能

ssh-agent 新增对 draft-ietf-sshm-ssh-agent "query" 扩展的支持,ssh-add 新增 -Q flag,可以查询代理支持的协议扩展。

# 查询 ssh-agent 支持的扩展
ssh-add -Q

RevokedHostKeys / RevokedKeys 支持多文件

新功能

ssh_config 的 RevokedHostKeys 和 sshd_config 的 RevokedKeys 指令现在都支持指定多个文件,方便大规模密钥吊销管理。

# sshd_config 示例
RevokedKeys /etc/ssh/authenticated_keys_revoked
RevokedKeys /etc/ssh/contractor_keys_revoked

invaliduser 惩罚机制

新功能

sshd 新增 invaliduser 惩罚类型,应用于 PerSourcePenalties。当有人尝试使用系统中不存在的用户名登录时,触发延迟惩罚(默认 5 秒),可有效减缓暴力猜解攻击。

ED25519 密钥支持 PKCS#8 格式

新功能

ssh-keygen 现支持将 ED25519 私钥写入 PKCS#8 格式,增强了与某些 PKI 系统的兼容性。

四、Bug 修复摘要

组件描述
sshd修复 MaxStartups 单参数值低于10时的潜在崩溃
sshd修复 /etc/moduli 缺失时的 DH 密钥交换挂起问题
sftp/scp上传目录时,不再错误覆盖已存在目录的权限(除非使用了 -p)
sftp修复上传/下载超过 2GB/s 时的进度条显示错误
sftpTab 补全路径末尾为多字节字符时不崩溃
All修复 OpenSSL 3.x 下 PKCS#11 PIN 输入问题
ssh修复 UTF-8 字符在 challenge-response 认证提示中显示乱码
ssh不再尝试将 agent 中的证书与私钥重复匹配(避免密钥使用受限 agent 时出错)
ssh-agent修复带空格的 $HOME 路径下 ssh-agent 启动问题
sshd连接关闭时不再泄漏 PAM handle

五、升级建议

⚠ 特别提醒:OpenSSH 通常以系统级包管理,需要 root/sudo 权限操作。生产环境升级前请务必在测试环境验证,并准备好回滚方案。

Ubuntu / Debian

sudo apt update && sudo apt install openssh-server openssh-client
ssh -V  # 验证版本

CentOS / RHEL / Fedora

sudo dnf update openssh-server openssh-clients
ssh -V  # 验证版本

手动编译(Portable 版本)

wget https://cdn.openbsd.org/pub/OpenSSH/portable/openssh-10.3p1.tar.gz
tar -xzf openssh-10.3p1.tar.gz
cd openssh-10.3p1
./configure --prefix=/usr/local --sysconfdir=/etc/ssh
make -j$(nproc)
sudo make install
✅ 升级后必做:升级完成后检查 sshd -t(配置语法测试)和 systemctl restart sshd(Debian/Ubuntu)或 sudo systemctl restart sshd(RHEL/Fedora),确认服务正常重启。

六、总结

OpenSSH 10.3 是一个"安全优先"的版本。5 个安全修复覆盖了从用户输入验证、证书权限模型到文件传输安全的多个层面,特别是证书空主体绕过和命令行 %-token 注入漏洞需要高度重视。

与此同时,新增的 ~I 逃逸符、-O conninfo/channels 等功能实实在在地改善了日常运维体验,多文件 RevokedKeys 支持也迎合了大规模密钥管理的需求。建议所有 SSH 服务器管理员将此次升级纳入近期工作计划。