混淆攻击:利用Apache HTTP Server中隐藏的语义歧义
摘要
本研究聚焦Apache HTTP Server(Httpd)架构中的混淆攻击面,揭示其内部模块间因语义歧义导致的安全风险。通过分析r->filename
、DocumentRoot
和r->handler
等关键字段在不同模块中的不一致解读,研究人员发现了三种混淆攻击类型,共涉及9个新漏洞(CVE-2024-38472至CVE-2024-38477等)、20种利用技术和30余个案例分析。
攻击类型详解
1. 文件名混淆(Filename Confusion)
- 截断利用:mod_rewrite模块将重写结果强制视为URL,导致路径在问号处被截断。例如,通过
%3F
可绕过RewriteRule
中的文件扩展名限制,使非PHP文件被PHP处理器执行。 - ACL绕过:mod_proxy将
r->filename
作为URL处理,而认证模块将其视为文件路径,导致基于Files
指令的单文件保护(如admin.php
)可被?
字符绕过。
2. 文档根目录混淆(DocumentRoot Confusion)
- 源码泄露:不安全的
RewriteRule
(如^/html/(.*)$ /$1.html
)允许访问Web根目录外的文件。结合路径截断,可泄露CGI或PHP源码(如通过http://server/html/usr/lib/cgi-bin/script.cgi%3F
)。 - 本地组件操纵:在Debian/Ubuntu默认配置下,通过
/usr/share
目录内的符号链接或调试脚本(如magpie_debug.php
)实现信息泄露、XSS、LFI、SSRF乃至RCE。 - 目录突破:利用符号链接(如Redmine中的
/usr/share/redmine/instances/
指向/var/lib/redmine/
)结合重写规则,可访问系统敏感文件(如数据库配置)。
3. 处理程序混淆(Handler Confusion)
- 处理器覆盖:因历史代码(1996年)中
r->content_type
可覆盖r->handler
,模块错误(如ModSecurity未处理AP_FILTER_ERROR
)可能导致PHP源码泄露。 - 任意处理器调用:通过CGI的本地重定向响应,控制
Content-Type
头部可调用任意处理器(如server-status
、mod_proxy
),实现SSRF、本地Unix域套接字访问或RCE(如利用PEAR的pearcmd.php
)。
其他漏洞
- CVE-2024-38472:Windows环境下通过UNC路径触发NTLM认证劫持(需
AllowEncodedSlashes On
配置或Type-Map处理器)。 - CVE-2024-39573:完全控制
RewriteRule
前缀时,可调用mod_proxy实现SSRF。
影响与修复
- 漏洞影响Apache HTTP Server 2.4.60之前版本,已通过官方更新修复。
- 部分补丁可能导致向后兼容性问题,需管理员谨慎评估。
未来工作
混淆攻击面仍具潜力,其他Httpd发行版(如RHEL、BSD)或应用特定配置可能存在更多可利用的规则和组件。
结论
Httpd的模块化架构在长期迭代中积累了大量技术债务,模块间语义歧义已成为新的攻击面。维护者需在兼容性与安全性间取得平衡,而研究人员应持续探索真实环境中的潜在风险。