sibersan/apache_audit_cve-2026-23918

GitHub: sibersan/apache_audit_cve-2026-23918

针对 Apache HTTP Server CVE-2026-23918 等 5 个 CVE 的纯防御性审计工具包,提供远程被动扫描和本地只读审计两种模式。

Stars: 0 | Forks: 0

# cve-2026-23918 针对 **CVE-2026-23918**(Apache HTTPD HTTP/2 双重释放 RCE)以及 2026 年 5 月 4 日 Apache 软件基金会安全公告中披露的四个相关 CVE 的防御性审计工具。 | CVE | 严重程度 | 组件 | 影响 | 受影响版本 | | --- | --- | --- | --- | --- | | **CVE-2026-23918** | 高危 (CVSS 8.8) | HTTP/2 | 双重释放 (Double Free) / RCE | 仅 2.4.66 | | CVE-2026-24072 | 中危 | `mod_rewrite` (`ap_expr`) | 权限提升 | ≤ 2.4.66 | | CVE-2026-28780 | 低危 | `mod_proxy_ajp` | 堆缓冲区溢出 | ≤ 2.4.66 | | CVE-2026-29168 | 低危 | `mod_md` (OCSP) | 资源耗尽 | 2.4.30 – 2.4.66 | | CVE-2026-29169 | 低危 | `mod_dav_lock` | NULL 指针解引用 / DoS | ≤ 2.4.66 | 所有问题已在 **Apache HTTP Server 2.4.67** 中修复。 ## ⚠️ 授权与范围 这些工具仅适用于**您拥有或已获得明确书面授权进行测试的系统**。未经授权的扫描在您所在的司法管辖区可能是违法的。 该工具包在设计上是**防御性**的: - 没有漏洞 payload,没有漏洞利用尝试,没有侵入式探测。 - 被动扫描器仅读取标准的 `Server:` HTTP 头,并使用标准的 TLS ALPN —— 这与每个现代浏览器用于协商 HTTP/2 的机制相同。 - 本地审计器是只读的;不会修改任何文件或配置。 ## 目录 ``` . ├── apache_passive_audit.py # External asset audit (banner-grab + ALPN) ├── apache_local_audit.py # On-host / SSH local audit ├── LICENSE # MIT ├── .gitignore └── README.md ``` ## 环境要求 - **Python 3.6+** — 支持 Ubuntu 18.04 的默认 `python3` 及所有后续版本。 - 仅需标准库 — **无外部依赖**。 ## 安装 ``` git clone https://github.com/sibersan/cve-2026-23918.git cd cve-2026-23918 chmod +x apache_passive_audit.py apache_local_audit.py ``` ## 1. 被动审计 — `apache_passive_audit.py` 读取 HTTP `Server:` 头以检测 Apache 版本,并将其与 CVE 表进行匹配。此外,对于 HTTPS 目标,执行标准的 TLS ALPN 协商以确定是否暴露了 HTTP/2 —— 这是 CVE-2026-23918 可被利用的关键前提。不会发送任何漏洞利用 payload。 ### HTTP/2 验证 (ALPN) 该脚本在 TLS 握手的 ALPN 扩展 (RFC 7301) 中提供 `h2` 和 `http/1.1`。服务器的选择是对“是否启用了 HTTP/2?”的标准、明确的回答 —— 每个现代浏览器和 curl 都在使用此机制。它不会触发漏洞或任何异常行为。 风险判定反映了这一点: - 版本 2.4.66 **+ 经 ALPN 确认启用 HTTP/2** → **VULNERABLE**(RCE 攻击向量开放) - 版本 2.4.66 **+ 未协商 HTTP/2** → **AT_RISK**(仍未打补丁;其他低/中危 CVE 仍然适用,但高危 RCE 攻击向量已关闭) - 无法执行 ALPN 测试 → 保守评估;假定已暴露 - 版本 ≥ 2.4.67 → **SAFE** ### 使用方法 ``` # 单一 target python3 apache_passive_audit.py -t https://web.example.com # 多个 target python3 apache_passive_audit.py -t https://a.example.com -t https://b.example.com # Target 文件、parallel、CSV + JSON output python3 apache_passive_audit.py -f targets.txt -w 20 -o report.csv --json report.json # CI / log-friendly (无颜色) python3 apache_passive_audit.py -f targets.txt --no-color ``` `targets.txt` 格式(每行一个目标,`#` 为注释): ``` https://www.example.com intranet.example.local:8443 # 旧 staging box http://10.0.5.12 ``` ### 选项 | 标志 | 描述 | | --- | --- | | `-t, --target` | 单个目标(可重复使用) | | `-f, --file` | 目标列表文件 | | `-o, --csv` | CSV 报告输出 | | `--json` | JSON 报告输出 | | `--timeout` | 请求超时时间(以秒为单位,默认为 10) | | `-w, --workers` | 并行工作线程数(默认为 10) | | `--no-color` | 禁用彩色输出 | ### 退出代码(适配 CI/CD) | 代码 | 含义 | | --- | --- | | 0 | 所有目标安全 | | 1 | 至少一个目标状态为 `UNKNOWN` 或 `ERROR` | | 2 | 至少一个目标状态为 `VULNERABLE` 或 `AT_RISK` | ### 风险等级 | 等级 | 含义 | | --- | --- | | `VULNERABLE` | 版本符合安全公告的 CVE 范围,且满足前提条件(例如启用了 HTTP/2) | | `AT_RISK` | 版本未打补丁,但不满足高危前提条件;其他 CVE 仍然适用 | | `SAFE` | 版本 ≥ 2.4.67 | | `UNKNOWN` | 横幅被隐藏(`ServerTokens Prod`)或被反向代理/WAF 掩盖 —— 请使用本地审计脚本进行验证 | | `NOT_APACHE` | 非 Apache(nginx、IIS 等) | | `ERROR` | 连接错误 | ### 局限性 - 使用 `ServerTokens Prod` 或 `Minimal` 的服务器会隐藏版本 —— 脚本会如实返回 `UNKNOWN`。请使用本地审计进行确认。 - 位于反向代理(Cloudflare、F5、nginx 等)后面的 Apache 实例可能不会在边缘节点暴露其版本。 - ALPN HTTP/2 检测仅对 HTTPS 目标有意义。实际环境中极少使用 HTTP/2 明文 (h2c),因此未作测试。 ## 2. 本地审计 — `apache_local_audit.py` 在目标主机上(或通过 SSH)运行,检查 Apache 二进制文件、版本、已加载模块和 HTTP/2 配置。它还会评估**漏洞利用前提条件**:例如,如果版本是 2.4.66 但禁用了 HTTP/2,则 CVE-2026-23918 的风险会相应降低。 ### 使用方法 ``` sudo python3 apache_local_audit.py # JSON report (用于集中式 inventory) sudo python3 apache_local_audit.py --json /var/log/apache_audit_$(hostname).json # 自定义 binary 路径 sudo python3 apache_local_audit.py --binary /opt/apache/bin/httpd ``` ### 检测能力 - `httpd -v` / `apache2 -v` — 版本 - `httpd -V` — 构建信息,`HTTPD_ROOT`,`SERVER_CONFIG_FILE` - `apache2ctl -M` 或 `httpd -M` — 已加载模块 - `dpkg-query` / `rpm -q` — 软件包版本 - 主配置文件以及通过 `Include`/`IncludeOptional` 引入的所有文件(包括 Debian 的 `sites-enabled/`、`mods-enabled/`)→ `Protocols` 指令(h2 / h2c / http/1.1) ### 选项 | 标志 | 描述 | | --- | --- | | `--binary` | Apache 二进制文件路径(覆盖自动检测) | | `--json` | JSON 报告输出 | | `--no-color` | 禁用彩色输出 | ### 退出代码 | 代码 | 含义 | | --- | --- | | 0 | `SAFE` | | 1 | `PATCH_NEEDED` 或 `UNKNOWN` | | 2 | `VULNERABLE` 或 `AT_RISK` | ### 风险等级 | 等级 | 含义 | | --- | --- | | `VULNERABLE` | 未打补丁的版本 + 满足高危 CVE 前提条件(例如启用了 HTTP/2) | | `AT_RISK` | 未打补丁的版本 + 满足至少一个 CVE 前提条件 | | `PATCH_NEEDED` | 未打补丁的版本,但未启用相关模块/协议 —— 仍需修补 | | `SAFE` | 版本 ≥ 2.4.67 | | `UNKNOWN` | 无法检测到版本 | ### 权限 建议使用 `sudo`/`root` 以完整读取配置。否则,`sites-enabled/`、`mods-enabled/` 或 `/etc/httpd/conf.d/` 中的某些文件可能无法读取。 ## 跨资产清单运行 要在多台主机上运行本地审计并集中收集报告,这里提供一个 Ansible ad-hoc 示例: ``` ansible all -i inventory.ini -b -m script \ -a "apache_local_audit.py --json /tmp/apache_audit.json --no-color" ansible all -i inventory.ini -b -m fetch \ -a "src=/tmp/apache_audit.json dest=./reports/ flat=no" ``` 收集到的 JSON 文件可以使用 `jq` 或小型 Python 脚本进行合并。 ## 推荐缓解措施 针对 CVE-2026-23918(在修补之前): 1. **将 Apache HTTP Server 升级到 2.4.67 或更高版本** —— 唯一的永久性修复方案。 2. 作为临时措施,**禁用 HTTP/2**:从配置的 `Protocols` 指令中移除 `h2` 和 `h2c`,或者在 Debian/Ubuntu 上执行 `sudo a2dismod http2`,然后重新加载服务。 3. 如果未使用,卸载 `mod_dav_lock` (CVE-2026-29169)。 4. 审计拥有 `.htaccess` 写入权限的用户/虚拟主机 (CVE-2026-24072)。 官方公告: ## 维护者 [**SiberSAN**](https://github.com/sibersan) ## 许可证 [MIT](LICENSE) © 2026 SiberSAN ## 免责声明 本软件按“原样”提供,不提供任何形式的保证。在生产环境使用前,请在测试环境中进行验证。用户对针对未授权系统进行的任何使用承担所有法律责任。
标签:AES-256, ALPN验证, Apache HTTP Server, CVE-2026-23918, CVE-2026-24072, CVE-2026-28780, CVE-2026-29168, CVE-2026-29169, GraphQL安全矩阵, HTTP/2, mod_dav_lock, mod_md, mod_proxy_ajp, mod_rewrite, Python, RCE检测, ServerBanner, Snort++, TLS ALPN, Zero-dependency, 双重释放, 安全基线检查, 安全扫描器, 插件系统, 无后门, 无线安全, 本地审计, 漏洞审计, 漏洞评估, 版本检测, 网络安全, 网络安全审计, 被动扫描, 防御性工具, 隐私保护