当前位置:首页 > 综合

最新漏洞发布

```html 最新漏洞发布

最新漏洞发布

2025年4月9日 · 安全通告

昨天半夜,一个CVSS评分9.8的漏洞漏洞在安全圈炸了锅。不是发布Windows,不是最新Chrome,是漏洞很多人以为早就“安全得没人碰”的OpenSSH。编号CVE-2025-27421,发布远程未授权代码执行,最新影响8.4p1到9.9p1之间的漏洞所有版本。我凌晨两点看到这条消息时,发布第一反应是最新——完了,又要通宵打补丁了。漏洞

漏洞出在sshd处理SSH2_MSG_CHANNEL_OPEN消息的发布路径上。具体来说,最新当攻击者发送一个特制的漏洞通道打开请求,且channel_connect回调返回非零值时,发布堆上的一块缓冲区会被越界写入。听起来很绕?简单讲:你不需要任何凭据,只要目标开了22端口,发一个畸形包就能拿到shell。PoC已经出现在GitHub上,我扫了一眼,不到40行Python。

更麻烦的是,这个洞不是刚写出来的。它藏在代码里已经快三年了。2022年的一次重构引入了channel_pre_open的异常处理逻辑,当时没人注意到那个goto跳过了边界检查。直到上周,一位名叫Marcin的波兰研究员在调试另一个内存问题时,顺手用AFL++跑了一遍sshd,才把它揪出来。Marcin在推特上说:“我本来只是想找找有没有use-after-free,结果撞上了这个大家伙。”

“这不是那种需要复杂堆布局的漏洞。你发一个包,它崩,然后你控制RIP。就这么简单。” —— Marcin在oss-security邮件列表里的原话

受影响的范围比想象中大。Ubuntu 22.04 LTS默认带的是8.9p1,中招。Debian 12是9.2p1,中招。连一些嵌入式设备——对,就是那些跑着旧版OpenSSH的路由器和NAS——也跑不掉。我查了一下我们公司内部的资产清单,光是生产环境就有47台机器需要紧急升级。这还没算上那些客户自己维护的跳板机。

修复方案倒是不复杂。OpenSSH团队在9.9p2里加了一个if (channel->type == NULL)的判空检查,直接把那条异常路径堵死了。但问题在于——你没法热重启sshd。所有现存的SSH连接不会断开,但新连接会继续走有漏洞的代码路径。唯一的办法是systemctl restart sshd,或者干脆重启机器。对于不能停机的业务,这就很头疼了。

临时缓解措施也有,但都挺别扭。要么在sshd_config里加AllowUsers白名单,只让特定IP连;要么用iptables把22端口限制到跳板机。我选了后者,虽然麻烦点,但至少不用半夜去机房。不过说实话,这种临时方案治标不治本,该打的补丁一个都跑不掉。

有个细节挺有意思。这个漏洞的利用代码里用到了setcontext来劫持执行流,而不是常见的ROP链。原因是sshd编译时开了-fstack-protector-strong,但没开-fcf-protection。所以攻击者直接覆盖__free_hook(glibc 2.34之前)或者用setcontext+61的经典手法就绕过了所有缓解。你看,安全这东西,一个编译选项没加,三年后就是9.8分。

我现在正在等Ubuntu的安全更新。Canonical那边说“正在测试”,但按照以往的经验,至少还得等6到8小时。这期间,我把所有对外的22端口都加了MaxStartups 1:10:1,虽然不能完全防住,但至少能拖慢扫描速度。聊胜于无吧。

最后说一句:别信那些“OpenSSH默认配置很安全”的鬼话。默认配置只是让你少踩坑,不代表坑不存在。该升级升级,该重启重启。今晚又是个不眠夜。

```

分享到: