混淆攻击:利用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的模块化架构在长期迭代中积累了大量技术债务,模块间语义歧义已成为新的攻击面。维护者需在兼容性与安全性间取得平衡,而研究人员应持续探索真实环境中的潜在风险。