Apache HTTP Server混淆攻击:利用隐藏语义歧义
故事是如何开始的?
今年年初,作者开始寻找下一个研究目标,最终决定深入研究Apache HTTP Server。尽管去年曾短暂浏览过其源代码,但当时已从编码风格中"闻"到异常味道。今年决定将这种"怪味"具体化,深入探究Apache HTTP Server的安全问题。
为什么Apache HTTP Server闻起来臭臭的?
Apache HTTP Server采用模块化设计,由数百个小模块协同处理HTTP请求。所有模块都依赖巨大的request_rec结构进行数据同步和交换,这个结构会在模块间传递,每个模块都可以随意修改其中的任意值。当规模扩大到数百个模块时,缺乏良好开发标准会导致模块间存在可利用的安全缝隙。
新型攻击面:混淆攻击(Confusion Attacks)
基于模块间对结构字段理解的不一致,研究团队发展出三种混淆攻击:
1. 文件名混淆(Filename Confusion)
1-1 截断攻击
- 路径截断:通过问号%3F截断RewriteRule后面的路径
- 误导RewriteFlag分配:利用截断行为将处理程序设置到非预期请求
1-2 ACL绕过
利用mod_proxy与其他模块对r->filename理解不一致,绕过基于文件的访问控制和认证
2. 文档根目录混淆(DocumentRoot Confusion)
2-1 服务器端源代码泄露
- 泄露CGI源代码
- 泄露PHP源代码
2-2 本地小工具操纵
- 信息泄露
- XSS攻击
- 本地文件包含(LFI)
- 服务器端请求伪造(SSRF)
- 远程代码执行(RCE)
2-3 从本地小工具越狱
利用符号链接跳出受限目录
3. 处理程序混淆(Handler Confusion)
3-1 覆盖处理程序
- 覆盖处理程序泄露PHP源代码
- 其他高级利用(暂未完全披露)
3-2 调用任意处理程序
- 信息泄露
- 脚本误解释
- 完整SSRF
- 访问本地Unix域套接字
- RCE
其他重要漏洞
CVE-2024-38472
基于Windows UNC的SSRF攻击,可通过HTTP请求解析器或Type-Map触发
CVE-2024-39573
基于RewriteRule前缀完全可控的SSRF
技术影响
研究发现9个新漏洞,涉及20种利用手法和30多个案例分析。这些漏洞已通过官方安全渠道报告,并在Apache HTTP Server 2.4.60版本中修复。
实际风险
由于Apache HTTP Server的广泛使用,这些漏洞影响范围极大。特别是:
- 使用Files语法保护的单文件认证可被直接绕过
- 不安全的RewriteRule配置可能导致整个文件系统被访问
- 历史遗留代码可能将XSS转化为RCE
防护建议
管理员应及时更新到2.4.60或更高版本,审慎检查RewriteRule配置,避免使用不安全的重写规则,并对关键文件实施多层防护措施。