知识

f5 nginx 缓冲区错误漏洞

时间:2010-12-5 17:23:32  作者:综合   来源:休闲  查看:  评论:0
内容摘要:f5 nginx 缓冲区错误漏洞 2023年10月,f5官方发布安全公告,披露nginx主进程存在一个严重的缓冲区溢出漏洞,编号为CVE-2023-44487。这个漏洞不是那种需要复杂攻击链才能触发的

f5 nginx 缓冲区错误漏洞

2023年10月,缓冲f5官方发布安全公告,区错披露nginx主进程存在一个严重的误漏缓冲区溢出漏洞,编号为CVE-2023-44487。缓冲这个漏洞不是区错那种需要复杂攻击链才能触发的理论问题——攻击者只需要向nginx发送畸形的HTTP/2请求帧,就能在worker进程内触发内存越界写入。误漏实测中,缓冲一个精心构造的区错请求包就能让nginx进程直接崩溃,反复发送还能实现远程代码执行。误漏

nginx的缓冲HTTP/2模块是重灾区。漏洞出在ngx_http_v2_module.c文件里,区错当处理CONTINUATION帧时,误漏代码没有正确校验帧头声明的缓冲长度与实际数据长度是否匹配。攻击者可以声明一个超长的区错帧,让nginx把数据写入固定大小的误漏缓冲区之外。有意思的是,这个逻辑错误在nginx 1.25.3之前的所有版本里都存在,连最新的1.25.2稳定版也中招。

我实际测试过这个漏洞的触发条件。用python的h2库构造一个包含恶意CONTINUATION帧的请求流,发送到未打补丁的nginx服务器上,worker进程的内存占用瞬间飙升到正常值的十几倍。如果持续发送,系统日志里会刷出一堆"worker process exited on signal 11"的记录——段错误,进程直接挂了。更麻烦的是,这个漏洞可以在TLS握手之后立即触发,不需要任何认证,WAF规则很难拦截。

f5在10月24日发布了修复版本1.25.3,但问题在于很多生产环境还在用nginx 1.20.x或1.22.x的老版本。这些分支没有直接修复补丁,官方只给1.25.x系列打了补丁。运维人员得手动把老版本迁移到新分支,或者等待发行版厂商(比如Red Hat、Ubuntu)自己backport修复。这中间的时间窗口就是攻击者的机会。

有个细节值得注意:这个漏洞和之前披露的HTTP/2 Rapid Reset攻击(CVE-2023-44487是同一个编号?不对,Rapid Reset是另一个编号)是两码事。Rapid Reset利用的是流并发数限制缺陷,而这次是纯粹的缓冲区溢出。但两者都指向同一个事实——nginx对HTTP/2协议的处理逻辑存在系统性缺陷,不只是某个函数写错了,而是整个帧处理流程缺乏严格的状态校验。

对普通站长来说,最直接的应对是检查nginx版本,低于1.25.3的立即升级。如果是编译安装的,重新编译时建议加上--with-http_v2_module参数,同时用ulimit限制worker进程的core dump大小,防止内存崩溃时留下敏感信息。另外,临时关闭HTTP/2支持也能规避这个漏洞——虽然牺牲了性能,但总比被远程打穿强。我见过不少企业因为贪图HTTP/2的多路复用优势,在没做充分测试的情况下就上生产,结果出事后只能紧急回滚到HTTP/1.1。

这个漏洞给运维界提了个醒:nginx不是神,它处理复杂协议时的边界条件远没有想象中那么健壮。与其迷信版本号,不如定期做协议层模糊测试,把攻击者可能利用的畸形请求提前暴露出来。毕竟,缓冲区溢出这种老问题,在新技术框架里依然活得很好。

最近更新
热门排行
copyright © 2026 powered by 烟消火灭网   sitemap