CVE-2026-24072 是 Apache HTTP Server 2.4.66 及更早版本中的一个中等级别的本地权限提升漏洞。它允许本地
.htaccess作者利用mod_rewrite、mod_setenvif和mod_proxy_fcgi中的ap_expr表达式求值,以httpd用户的权限读取文件系统上的任意文件。
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-24072 |
| 严重性 | 中等(本地权限提升 / 信息泄露) |
| 受影响版本 | Apache HTTP Server <= 2.4.66 |
| 修复版本 | Apache HTTP Server 2.4.67 |
| 攻击向量 | 本地(需要 .htaccess 写入权限) |
CVE-2026-24072-analysis.mdmod_rewrite.diff、mod_setenvif.diff、mod_proxy_fcgi.diffexamples/Apache 的表达式求值引擎(ap_expr)提供了文件系统内省函数:
file(path) — 读取文件内容filesize(path) — 返回文件大小-d path、-e path、-f path、-s path、-L path、-h path、-x path — 文件系统测试在 2.4.66 及更早版本中,诸如 mod_rewrite(通过 RewriteCond expr=...)、mod_setenvif(通过 SetEnvIfExpr)和 mod_proxy_fcgi(通过 ProxyFCGIBackendType 条件表达式)等模块在 .htaccess 上下文中解析和求值 ap_expr 表达式时,没有传递 AP_EXPR_FLAG_RESTRICTED 标志。这意味着任何能够写入 .htaccess 文件的本地用户都可以利用这些表达式函数,以 httpd 进程的完整权限探测或读取文件系统。
修复方案在概念上很简单:在 .htaccess 上下文中解析 ap_expr 表达式时,传递 AP_EXPR_FLAG_RESTRICTED 标志。
所有三个已修补的模块都使用相同的惯用方法来检测 .htaccess 解析上下文:
int in_htaccess = cmd->pool == cmd->temp_pool;
当 Apache 解析 .htaccess 文件时,每目录配置池(cmd->pool)与临时池(cmd->temp_pool)相同。这是 Apache 内部用于检测 .htaccess(每目录)上下文与主服务器/虚拟主机上下文的众所周知约定。
| 文件 | 描述 |
|---|---|
CVE-2026-24072-analysis.md | 完整的技术分析和影响评估 |
mod_rewrite.diff | modules/mappers/mod_rewrite.c 的补丁 |
mod_setenvif.diff | modules/metadata/mod_setenvif.c 的补丁 |
mod_proxy_fcgi.diff | modules/proxy/mod_proxy_fcgi.c 的补丁 |
httpd-2.4.66/ | 存在漏洞的 Apache 版本源码树 |
httpd-2.4.67/ | 已修复的 Apache 版本源码树 |
examples/ | 概念验证 .htaccess 文件 |
本仓库包含一个 Docker 化测试实验室,可让您在存在漏洞和已修补的 mod_rewrite 模块之间切换,以验证修复是否有效:
# 构建并启动实验室
make build
make up
# 运行完整的自动化测试矩阵(两种变体)
make test
该实验室使用一个哨兵文件(/opt/sentinel/secret.txt),该文件仅对 daemon 用户(httpd 运行所用的用户)可读。在存在漏洞的构建版本中,.htaccess 表达式可以读取并匹配哨兵文件的内容。在已修复的构建版本中,解析会失败并提示 not available in restricted context。
完整指南请参阅 docs/TESTING.md。
| 文件 | 描述 |
|---|---|
CVE-2026-24072-analysis.md | 完整的技术分析和影响评估 |
mod_rewrite.diff | modules/mappers/mod_rewrite.c 的补丁 |
mod_setenvif.diff | modules/metadata/mod_setenvif.c 的补丁 |
mod_proxy_fcgi.diff | modules/proxy/mod_proxy_fcgi.c 的补丁 |
httpd-2.4.66/ | 存在漏洞的 Apache 版本源码树 |
httpd-2.4.67/ | 已修复的 Apache 版本源码树 |
examples/ | 概念验证 .htaccess 文件 |
docker/ | 测试实验室的 Docker 构建文件 |
scripts/ | 切换和测试脚本 |
tests/ | 测试夹具和矩阵 |
docs/TESTING.md | 完整测试指南 |
docs/session/ | 设计过程的会话导出 |
本仓库仅供教育和防御目的使用。概念验证示例旨在帮助安全专业人员理解和防御此漏洞。请勿在您不拥有或未经明确许可的系统上使用这些技术。