研究员Zhenpeng (Leo) Lin提交了一个诡异的漏洞:ssh客户端在与服务器会话过程中,如果服务器中途更换主机密钥,客户端会触发use-after-free,随时可能崩溃。接到这份报告后,OpenSSH团队火速在10.4版中封堵了这个缺口,并一口气塞进一大波安全加固和后量子实验特性。7月6号新鲜出炉的包已经上架官方镜像站。
这次更新看起来是常规补丁合集,但实际有几个改动直接动了运维的命根子——自动化脚本、沙箱策略、配置解析,踩到哪个都可能炸锅。以下把最值得留意的几个变化掰开看。
第一,sftp和scp的路径欺骗漏洞被上了硬锁。命令行里敲“sftp host:/path .”原本想下载到当前目录,恶意服务器可以通过精心构造的响应把文件甩到完全不相干的路径,相当于远程帮你搬家。新版本强制限制了目标写入范围。scp远程到远程拷贝也有类似问题,之前服务器可以偷偷把文件写出目标目录外,现在彻底堵死。运维不用再担心一把下载命令就把.ssh目录给污染了。
第二,sshd的“internal-sftp”参数静默截断算得上是个隐蔽的坑。当你在sshd_config里给internal-sftp塞超过9个参数时,第10个及以后的参数会被直接丢弃,其中可能包含关键的安全限制选项。Orange Cyberdefense漏洞团队发现这个问题后,新版本做了显式拦截,再也不会让你的限制悄悄失效。同时,最小认证延迟原本有几个绕过路径,这次一并补上,攻击者没法再利用时间差玩暴力了。
第三,seccomp沙箱失败现在直接要命。在Linux上,原先沙箱加载失败只是记一行日志,进程继续裸奔。10.4起直接致命退出,强制你用上沙箱保护。那些跑着旧内核、不支持seccomp的环境,要么重新编译sshd时显式关掉沙箱,要么就别想启动。这个改动对容器和嵌入式场景冲击不小,运维调试时突然发现sshd起不来别慌,先检查内核功能和编译参数。
第四,sshd -G输出格式一夜变脸。为了配置可读性,指令输出从不区分大小写改成了混合大小写,比如原来输出“permitrootlogin”现在变成“PermitRootLogin”。看似化妆,可大批自动化脚本依赖固定输出做配置比较,这一改直接让解析逻辑全废。建议第一时间扫描所有用到“sshd -G”的自动化管道,该用“-T”的赶紧换,不然等上线必炸。
第五,密钥重交换期间的流氓消息会直接掐断连接。原先在认证完成后密钥重协商时,对端可以不停塞非密钥交换(non-KEX)消息,恶意节点能借此把内存吃到撑。新版传输协议选择一刀切:只要发现这类越界消息,直接断开连接。虽然会增加一部分合规主机的断连风险,但彻底根除了利用内存耗尽发起拒绝服务攻击的可能性。团队建议监控重连频次,必要时刻意降低密钥重协商频率。
第六,预认证阶段GSSAPI认证相关的DoS终于修了。结合Zhenpeng Lin报告的use-after-free以及FIDO令牌下载等好几处小毛病,这一波几乎把客户端与服务端在认证前的各种异常路径都扫了一遍,把潜在的远程触发崩溃点堵得严严实实。即便不开后量子特性,仅安全补丁就足够每一个互联网暴露的sshd马上更新。
第七,后量子签名实验上车,但默认不开。最抓眼球的新特性是复合后量子签名方案“mldsa44-ed25519”,基于draft-miller-sshm-mldsa44-ed25519-composite-sigs草案,把格密码ML-DSA 44和经典Ed25519拧在一起。要用必须先通过“ssh-keygen -t mldsa44-ed25519”生成密钥,并在ssh和sshd里显式配置。官方明确这只是实验性支持,警告不要用在生产环境。为凑齐抗量子能力,关联的相关签名边界检查也同步做了强化。
第八,通配符匹配终于不指数爆炸。ssh和sshd内部本来使用老旧的通配符匹配算法,遇到恶意构造的Pattern性能会呈指数级滑坡。新版替换为基于NFA的匹配器,直接消除最坏情况的性能黑洞。这个改动没有配置开关,悄悄生效,但对每天处理海量用户匹配的大网关来说,CPU负载会有肉眼可见的下降。
最后是数不清的琐碎修复:sshd_config解析逻辑彻底大修,权限分离序列化更干净;sftp里的越界读错误被抹平;fmt_scaled.c和getrrsetbyname.c跟OpenBSD上游对齐,顺带修了一堆错误路径上的内存泄漏。源码包openssh-10.4.tar.gz和openssh-10.4p1.tar.gz都已放出,SHA1和base64编码的SHA256校验和可以验完整性,签名密钥全部分发在官方镜像站。
总结:10.4不是一次温和小补,它不仅收紧了一大把安全螺丝,还理直气壮地打破了一些历史兼容。所有线上sshd实例、管理脚本、沙箱依赖都需要重新审视。趁漏洞细节还没大面积扩散,赶紧动手升级,晚一天就是多一天的裸窗口。
热门跟贴