## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SIBERSAN-WEB-SERVER-AUDIT_CVE-2026-42945
# web_server_audit
> **不要问你是否易受攻击。问你是否可被利用。**
一个单文件 Python 工具,通过检查已安装版本 _以及_ 通过你的配置是否实际可达脆弱代码路径,来审计 nginx 和 Apache 已知 CVE。
## 为什么?
大多数 CVE 扫描器只停留在版本匹配上: _"nginx 1.18.0 — CVE-2026-42945,高危,你易受攻击。"_ 但许多 CVE 需要特定的配置模式才能被利用。忽略配置的扫描器会向你发出大量与真实风险不符的红色警报——更糟的是,它会掩盖那些 _如果_ 你明天改变了配置就会变成真实风险的潜在风险。
`web_server_audit` 针对每个 CVE 回答两个不同的问题:
1. **安装的版本是否在受影响范围内?**
2. **触发模式是否存在于当前配置中?**
将两者结合,得出三种诚实的分类:
分类| 含义
---|---
🔴 **活跃利用风险**| 版本受影响 _且_ 触发模式存在。今天即可被利用。
🟡 **潜在风险**| 版本受影响,但无触发模式。如果配置变更引入该模式,则可能被利用。
⚪ **未验证**| 配置不可读;状态未知。
## 功能
* 🎯 针对每个 CVE 的触发检测(不仅仅是版本匹配)
* 🟢 执行摘要中区分活跃与潜在风险
* 🐧 Ubuntu Pro / ESM 感知——标记来自 ESM 覆盖范围之外的软件包
* 🔬 ASLR 检查、服务状态、监听端口、近期 SIGSEGV 计数
* 🎨 彩色终端输出,JSON 用于自动化
* 📦 单文件,Python 3.5+,无第三方依赖
* 🔌 极易扩展——添加一个新 CVE 只需约 10 行
## 快速开始
root@kitploit:~
git clone https://github.com/YOUR_USERNAME/web-server-audit.git
cd web-server-audit
sudo python3 web_server_audit.py
## 支持的 CVE(nginx)
Apache CVE 列表当前为空,但框架已就位——参见下面的扩展。
## 其他检查
除了 CVE 之外,该工具还报告:
* **ASLR 状态** (`/proc/sys/kernel/randomize_va_space`)——完整的 ASLR 可显著降低内存错误的 RCE 可利用性
* **操作系统版本和 EOL 状态** ——标记已终止支持或仅 ESM 支持的发行版
* **Ubuntu Pro (ESM) 订阅状态** (针对 `esm-infra` 和 `esm-apps`)
* **服务状态** ——nginx/Apache 是否实际运行,以及监听端口
* **软件包来源** ——区分 ESM、PPA 和标准仓库安装(Ubuntu)
* **工作进程崩溃** ——统计过去 30 天内的 SIGSEGV 事件,作为活跃利用的指标
## 需求
* Python 3.5+(适用于 Ubuntu 18.04 自带的 Python 3.6)
* 无需第三方包——仅标准库
* 当可用时使用 `nginx`、`apache2`、`systemctl`、`ss`、`journalctl`;否则优雅跳过检查
## 用法
root@kitploit:~
# 紧凑报告(默认——隐藏 OK 行)
sudo python3 web_server_audit.py
# 包括 OK 行的所有发现
sudo python3 web_server_audit.py --verbose
# 无 ANSI 颜色(适用于管道、日志、CI 输出)
sudo python3 web_server_audit.py --no-color
# 机器可读 JSON
sudo python3 web_server_audit.py --json
### 退出码
代码| 含义
---|---
0| 无问题
1| 仅警告或非 CVE 关键发现
2| 至少一个 CVE **可被主动利用**
退出码 `2` 是自然的 CI/CD 失败信号。
## 示例输出
root@kitploit:~
========================================================================
Web Server Audit - 2026-05-16T01:24:55
主机: web-prod-01
web_server_audit.py v1.0.0 - SiberSAN - MIT 许可证
========================================================================
[系统]
------------------------------------------------------------------------
[OK] OK ASLR 完全启用(randomize_va_space=2)
[i] INFO 操作系统: Ubuntu 18.04.6 LTS
[!] WARN Ubuntu 18.04 仅受 ESM 支持
[nginx] 版本 1.18.0(活跃中)
------------------------------------------------------------------------
[i] INFO nginx 监听于: 0.0.0.0:80, 0.0.0.0:443
[i] INFO CVE-2026-42945 (高): 版本受影响但未触发
触发条件: rewrite + 未命名捕获($1,$2) + 替换中含 '?'
证据: 配置中无 rewrite 指令
[i] INFO CVE-2026-42946 (中): 版本受影响但未触发
[!] WARN nginx 通过 PPA 安装 (1.18.0-3ubuntu1+bionic1)
========================================================================
真实风险总结
------------------------------------------------------------------------
活跃利用风险: 未检测到。
潜在风险 - 版本受影响,但配置中无触发模式 (3):
- [nginx] CVE-2026-42945 (高)
- [nginx] CVE-2026-42946 (中)
- [nginx] CVE-2026-42934 (低)
如果配置变更引入触发模式,这些将成为可利用风险。
缓解措施: 配置变更纪律 + 计划升级。
========================================================================
发现: 0 个严重,2 个警告
========================================================================
## 扩展
添加一个新 CVE 需要两步。
**1.** 编写一个触发函数,接受完整配置文本(`nginx -T` 输出)并返回 `(触发了: bool, 证据: str)`:
root@kitploit:~
def _trigger_my_cve(conf):
hits = [l for l in conf.splitlines() if re.search(r'risky_directive', l)]
if hits:
return True, "发现: " + hits[0]
return False, "模式不存在"
**2.** 将条目添加到 `NGINX_CVES`(或 `APACHE_CVES`):
root@kitploit:~
{
"id": "CVE-XXXX-NNNNN",
"name": "描述性名称",
"severity": "高",
"affected": ("1.10.0", "1.25.0"),
"fixed_in": ["1.25.1"],
"trigger_desc": "人类可读的触发描述",
"trigger_fn": _trigger_my_cve,
},
就这样。框架会自动处理分类、输出格式、JSON、退出码和执行摘要。
## 限制
* **无主动利用测试。** 不发送任何概念验证请求。这是一个纯粹的配置和版本分析工具。
* CVE 数据库是**内嵌且手动整理的** ;无在线同步。保持列表最新是用户的责任。
* 触发检测器是**启发式的** 。复杂的配置(深层嵌套的 include 或异常引号)可能产生误报或漏报。如有疑问,使用 `--verbose` 查看详细信息。
* 已在 Ubuntu 18.04、20.04、22.04 和 24.04 上测试。该工具很可能在其他 Linux 发行版上运行,但**软件包来源检测(ESM/PPA)是 Ubuntu 特有的** 。
## 贡献
欢迎提交 Pull Request、Issue、新的 CVE 检测器以及对其他 Web 服务器(lighttpd、Caddy、HAProxy 等)的支持。
在提议新的 CVE 检测器时,请包含:
* CVE 记录的链接(NVD、供应商公告或上游变更日志)
* 能够触发检测器的最小配置片段
* 一个 _不应_ 触发它的反例
## 许可证
根据 MIT 许可证 发布。
版权所有 © 2026 SiberSAN