周二发布的 OpenSSH 10.6 使压缩效果降低,并拒绝了一些此前可用的用户名,维护者知道这两项变更在发布时都会导致兼容性问题。
其中一项变更禁用了用于 SSH 压缩的 LZ77 字典编码器,此前研究人员发现,在多个通道之间共享压缩状态可能泄露明文。另一项变更阻止命令行用户名中的 $ 和 \ 字符,以防止它们通过 ProxyCommand 和 Match exec 等指令被 shell 解释。
此次发布之际,OpenSSH 正看到越来越多使用 AI 模型进行的安全研究,而这些模型在发现可利用漏洞方面也变得越来越强。其他研究人员随后独立发现了其中一些漏洞。OpenSSH 警告称,不报告所发现漏洞的对手“很可能也能发现这些漏洞”,目前该项目计划更频繁地发布修复,而不是等待其通常的发布周期。
OpenSSH 警告称,不报告所发现漏洞的对手“很可能也能发现这些漏洞”,目前该项目计划更频繁地发布修复,而不是等待其通常的发布周期。
SSH 可以在一个加密连接上承载多种内容,包括交互式 shell、端口转发或动态 SOCKS 代理。当启用压缩时,这些通道共享相同的压缩状态,不过 OpenSSH 默认关闭压缩,因此该攻击仅在有人开启压缩时才会生效。
波鸿鲁尔大学安全研究人员 Fabian Bäumer 和 Marcus Brinkmann 在论文《Crossing the Streams: SSH Plaintext Recovery via a Common Compression Context in Multiplexed Channels》中演示了该问题。能够向一个通道注入选定明文并观察由此产生的加密流量的攻击者,可以利用压缩来恢复同一会话中另一通道传输的机密信息。
能够向一个通道注入选定明文并观察由此产生的加密流量的攻击者,可以利用压缩来恢复同一会话中另一通道传输的机密信息。
该泄露源于 LZ77 的记忆机制。它不会再次编码相同的字节序列,而是可以指回已经见过的匹配序列。OpenSSH 在通道之间共享该历史记录,因此攻击者控制的数据可以改变会话中其他地方机密信息的压缩方式。当猜测匹配到该机密信息的一部分时,产生的流量可能会略微变短,从而给攻击者提供另一条信息。
这使该攻击与针对 HTTP over TLS 的 CRIME 和 BREACH 属于同一类,不过在此处实现它需要相当特定的设置。攻击者控制的流量和机密信息必须共享同一个多路复用 SSH 会话。在他们噪声最低的测试中,Bäumer 和 Brinkmann 在 100 次试验中以中位数 276 次猜测从 26 个字符的字母表中恢复了一个 8 字符的机密信息。在他们噪声更大的基于浏览器的场景中,这一数字跃升至约 27,600 次。
这两位研究人员使用 Claude Code 为所有三种攻击场景构建了概念验证实现,而且他们并不是唯一使用 AI 工具针对 OpenSSH 的人,因为 10.6 版本还致谢了 Chris Rohlf,他与 Claude 和 Anthropic Research 合作,发现了该版本中修复的另外两个漏洞。
OpenSSH 采用了直接的修复方式,完全移除了共享字典。Deflate 使用 LZ77 查找之前出现过的重复数据块,然后使用 Huffman 编码用更少的比特表示频繁出现的值。OpenSSH 10.6 在 ssh 和 sshd 中都禁用了 LZ77 部分,同时保留了 Huffman 编码。
压缩仍然有效,只是效果不如从前。OpenSSH 警告称 Compression 选项的效果将会降低,并建议在应用层处理压缩,称这样通常性能更好,且不会受到此攻击的影响。
大多数交互式 SSH 会话可能不会注意到差异,但在受限连接上传输大量可压缩数据的自动化任务可能会受到影响。这些工作负载在升级后可能需要将压缩从 SSH 移到应用程序中。
大多数交互式 SSH 会话可能不会注意到差异,但在受限连接上传输大量可压缩数据的自动化任务可能会受到影响。
用户名的变更针对的是由外部输入构建的命令。内部工具、CI 任务或智能体可能会运行类似 ssh "$INPUT_USER@host" 的命令,而该用户名随后可能出现在 ProxyCommand、Match exec 或传递给 shell 的其他命令中,此时 $ 和 \ 等字符可能突然变成 shell 语法,而不再只是用户名的一部分。
这并非该项目第一次收紧这条路径。10.3 版本修复了一个相关缺陷,即命令行用户名检查 shell 元字符的时机过晚,在检查之前它们已经可以通过 ssh_config 被展开。
在 10.6 中,通过命令行传递的用户名中的 $ 和 \ 会被拒绝,但当用户名通过 SSH 配置文件中的 User 指令设置时,该限制不适用。包含这两个字符的合法账户仍可通过这种方式使用,不过直接传递这些用户名的脚本和智能体工具将需要修改。
OpenSSH 10.6 中还有其他一些变更可能会影响自动化工作流。混合后量子 ssh-mldsa44-ed25519 签名算法去掉了实验性的 @openssh.com 后缀,这意味着使用早期实现创建的密钥需要重新生成或删除。该版本还开始逐步淘汰用于远程到远程复制的 scp -R;它在 10.6 中仍然有效,但现在会产生警告,最终将被忽略。
转载声明:本文为转载整理,原文版权归原作者及原站点所有。
原文来源:The New Stack
原创地址:https://thenewstack.io/openssh-breaks-compression-usernames/
原文作者:Amanda Caswell;如有侵权,请联系管理员删除。