sibersan/web-server-audit_CVE-2026-42945
GitHub: sibersan/web-server-audit_CVE-2026-42945
一个单文件 Python 工具,通过同时检查版本号和配置中的触发条件来审计 nginx 和 Apache 的已知 CVE,将漏洞分为活跃、潜在和未验证三类,避免仅靠版本匹配带来的大量误报。
Stars: 0 | Forks: 0
# 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 行代码
## 快速开始
```
git clone https://github.com/YOUR_USERNAME/web-server-audit.git
cd web-server-audit
sudo python3 web_server_audit.py
```
## 支持的 CVE (nginx)
| CVE | 严重程度 | 触发模式 |
|---|---|---|
| CVE-2026-42945 (Rift) | HIGH | `rewrite` + 未命名捕获 (`$1`,`$2`) + 替换内容中的 `?` |
| CVE-2026-42946 | MEDIUM | 使用了 `scgi_pass` 或 `uwsgi_pass` |
| CVE-2026-40701 | MEDIUM | 同时启用了 `ssl_stapling on` 和 `resolver` |
| CVE-2026-42934 | LOW | `charset`/`charset_types`/`source_charset` 指令 |
Apache 的 CVE 列表目前为空,但相关结构已准备就绪 —— 请参阅下文的[扩展](#extending)。
## 附加检查
除了 CVE 之外,该工具还会报告:
- **ASLR 状态** (`/proc/sys/kernel/randomize_va_space`) —— 完整的 ASLR 实质上降低了内存错误被用于 RCE 利用的可能性
- **操作系统版本及 EOL 状态** —— 标记已结束生命周期或仅限 ESM 的发行版
- **Ubuntu Pro (ESM) 订阅** 状态,针对 `esm-infra` 和 `esm-apps`
- **服务状态** —— nginx/Apache 是否真正在运行,以及正在监听哪些端口
- **软件包来源** —— 区分 ESM、PPA 和标准仓库安装(在 Ubuntu 上)
- **Worker 崩溃** —— 统计过去 30 天内的 SIGSEGV 事件,作为活跃利用的指标
## 系统要求
- Python 3.5+(适用于 Ubuntu 18.04 上自带的 Python 3.6)
- 无第三方软件包 —— 仅使用标准库
- 在可用时会使用 `nginx`、`apache2`、`systemctl`、`ss`、`journalctl`;否则会优雅地跳过检查
## 使用方法
```
# 精简报告 (默认 — 隐藏 OK 行)
sudo python3 web_server_audit.py
# 包括 OK 行的所有发现
sudo python3 web_server_audit.py --verbose
# 无 ANSI 颜色 (适用于 pipes, logs, CI output)
sudo python3 web_server_audit.py --no-color
# Machine-readable JSON
sudo python3 web_server_audit.py --json
```
### 退出代码
| 代码 | 含义 |
|---|---|
| 0 | 无问题 |
| 1 | 仅有警告或非 CVE 的严重发现 |
| 2 | 至少有一个 CVE **当前可被利用** |
退出代码 `2` 是一个自然的 CI/CD 失败信号。
## 示例输出
```
========================================================================
Web Server Audit - 2026-05-16T01:24:55
Host: web-prod-01
web_server_audit.py v1.0.0 - SiberSAN - MIT License
========================================================================
[system]
------------------------------------------------------------------------
[OK] OK ASLR fully enabled (randomize_va_space=2)
[i] INFO OS: Ubuntu 18.04.6 LTS
[!] WARN Ubuntu 18.04 is in ESM-only support
[nginx] version 1.18.0 (active)
------------------------------------------------------------------------
[i] INFO nginx listening on: 0.0.0.0:80, 0.0.0.0:443
[i] INFO CVE-2026-42945 (HIGH): version vulnerable but NOT triggered
Trigger: rewrite + unnamed capture ($1,$2) + '?' in replacement
Evidence: No rewrite directives in configuration
[i] INFO CVE-2026-42946 (MEDIUM): version vulnerable but NOT triggered
[!] WARN nginx installed from PPA (1.18.0-3ubuntu1+bionic1)
========================================================================
Real-risk summary
------------------------------------------------------------------------
ACTIVE EXPLOITATION RISK: none detected.
LATENT RISK - vulnerable version, no trigger in config (3):
- [nginx] CVE-2026-42945 (HIGH)
- [nginx] CVE-2026-42946 (MEDIUM)
- [nginx] CVE-2026-42934 (LOW)
These become exploitable if config changes introduce the trigger.
Mitigation: config-change discipline + plan upgrade.
========================================================================
Findings: 0 critical, 2 warnings
========================================================================
```
## 扩展
添加一个新的 CVE 只需两个步骤。
**1.** 编写一个触发函数,接收完整的配置文本(`nginx -T` 的输出)并返回 `(triggered: bool, evidence: str)`:
```
def _trigger_my_cve(conf):
hits = [l for l in conf.splitlines() if re.search(r'risky_directive', l)]
if hits:
return True, "Found: " + hits[0]
return False, "Pattern not present"
```
**2.** 将该条目添加到 `NGINX_CVES`(或 `APACHE_CVES`):
```
{
"id": "CVE-XXXX-NNNNN",
"name": "Descriptive name",
"severity": "HIGH",
"affected": ("1.10.0", "1.25.0"),
"fixed_in": ["1.25.1"],
"trigger_desc": "Human-readable trigger description",
"trigger_fn": _trigger_my_cve,
},
```
就是这样。该框架会自动处理分类、输出格式化、JSON 生成、退出代码以及执行摘要。
## 限制
- **不进行活跃利用测试。** 不会发送任何 PoC 请求。这是一个纯粹的配置加版本分析工具。
- CVE 数据库是**内嵌并由人工维护**的;没有在线同步功能。保持列表更新是用户的责任。
- 触发检测器是**启发式**的。具有深度嵌套 include 或不常见引用的复杂配置可能会产生误报或漏报。如有疑问,请使用 `--verbose` 检查详细信息。
- 已在 Ubuntu 18.04、20.04、22.04 和 24.04 上测试。该工具可能可以在其他 Linux 发行版上运行,但**软件包来源检测(ESM/PPA)是针对 Ubuntu 特有的**。
## 许可证
基于 [MIT License](LICENSE) 发布。
版权所有 (c) 2026 SiberSAN
标签:Apache, ASLR检测, CVE审计, ESM, IT运维, Nginx, Python, Socks5代理, Ubuntu Pro, Web服务器, 代码可达性, 单文件脚本, 反取证, 安全评估, 插件系统, 无后门, 无线安全, 漏洞分类, 网络安全, 触发感知, 配置检查, 隐私保护, 零依赖