休闲

apache httpd漏洞

时间:2010-12-5 17:23:32  作者:知识   来源:时尚  查看:  评论:0
内容摘要:2017年6月,Apache基金会发布紧急安全公告,编号CVE-2017-7679的缓冲区溢出漏洞被标记为“高危”。攻击者只需发送一个精心构造的HTTP请求,就能让运行Apache httpd的服务器

2017年6月,Apache基金会发布紧急安全公告,编号CVE-2017-7679的缓冲区溢出漏洞被标记为“高危”。攻击者只需发送一个精心构造的HTTP请求,就能让运行Apache httpd的服务器崩溃,甚至执行任意代码。那一年,全球有超过40%的网站跑在Apache上,这个漏洞直接影响数百万台服务器。我当时在一家电商公司做运维,看到公告的当天晚上就爬起来打补丁——因为我们的订单系统用的就是Apache 2.4.25,恰好中招。

Apache httpd的漏洞历史几乎和它本身一样长。这个1995年诞生的Web服务器,从最初的1.0版本到现在的2.4.x,每个大版本都留下过几个“著名”的安全事件。最经典的当属CVE-2002-0392,一个在Apache 1.3.x里潜伏了整整三年的chunked编码漏洞。2002年6月,安全研究员Halvar Flake发现攻击者可以通过分块传输编码绕过服务器对请求长度的检查,导致堆溢出。当时互联网刚经历完.com泡沫,大量企业网站都在用Apache,这个漏洞直接让蠕虫病毒“Apache/mod_ssl Worm”在24小时内感染了数万台服务器。

漏洞的根源往往藏在最基础的功能模块里。比如mod_cgi模块,它在处理环境变量时如果遇到超长的请求头,就会触发栈溢出——CVE-2012-0053就是这么回事。攻击者把请求头里的Host字段填满几万个字符,服务器就懵了。更麻烦的是,这类漏洞常常跟其他模块联动。2019年曝出的CVE-2019-0211,问题出在root权限下的进程间通信机制上。Apache以root身份启动后,会创建多个子进程处理请求,子进程之间通过共享内存交换数据。攻击者如果能控制一个子进程,就能利用这个漏洞向其他进程注入代码,最终拿到root权限。这漏洞的利用代码在GitHub上公开后,安全圈里炸了锅——因为补丁需要重启所有Apache实例,而很多大型网站根本没法随便重启。

补丁发布的速度和漏洞利用的难度总是赛跑。Apache基金会通常会在漏洞公开后48小时内给出修复版本,但服务器管理员未必能及时更新。2021年的CVE-2021-41773就是个教训——这是一个路径遍历漏洞,攻击者在URL里加上“/cgi-bin/.%2e/%2e%2e/”就能读取服务器上任意文件。漏洞公开当天就有人写出了利用脚本,但很多中小型网站直到被入侵后才发现自己还在跑Apache 2.4.49。我认识的一个站长朋友,他的论坛被黑后检查日志,发现攻击者早在补丁发布前三天就扫描过他的服务器——那是漏洞被公开的前一天。

Apache的漏洞模式其实有迹可循。大部分问题出在输入验证不严格、内存管理失误和配置错误上。比如CVE-2020-9490是mod_http2模块的缓冲区溢出,CVE-2021-44228则是log4j日志库的远程代码执行,虽然严格说不是Apache httpd本身的漏洞,但Apache作为入口,成了最容易被攻击的跳板。有意思的是,Apache的默认配置相对安全,但很多人为了追求性能会开启各种模块,比如mod_proxy、mod_rewrite,这些模块的交互逻辑往往就是漏洞的温床。

现在Apache在Web服务器市场的份额被Nginx抢走了不少,但它的代码库依然庞大且复杂——超过50万行C代码,维护难度可想而知。每次漏洞曝光后,Apache社区的反应速度其实算快的,但架不住用户基数大、升级周期长。我的建议很简单:别用太老的版本,至少保持两年内更新的频率;关闭不需要的模块;定期检查官方安全公告。如果你还在用Apache 2.2.x,那真该认真考虑升级了——那个分支从2017年就不再维护,等于裸奔。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap