
Auditoria de CVE em servidores web sensível a gatilhos para nginx e Apache. Vai além da correspondência de versões ao verificar se o caminho de código vulnerável é realmente alcançável na sua configuração. Classifica as descobertas como Ativo / Latente / Não verificado. Arquivo único em Python 3.5+, sem dependências.
Não pergunte se você é vulnerável. Pergunte se você é explorável.
Uma ferramenta Python de arquivo único que audita nginx e Apache contra CVEs conhecidas verificando tanto a versão instalada quanto se o caminho de código vulnerável é realmente alcançável através da sua configuração.
A maioria dos scanners de CVE para na correspondência de versão: "nginx 1.18.0 — CVE-2026-42945, severidade ALTA, você está vulnerável." Mas muitas CVEs exigem um padrão de configuração específico para serem exploráveis. Um scanner que ignora a configuração inunda você com alertas vermelhos que não refletem o risco real — e pior, pode esconder os riscos latentes que se tornariam reais se a sua configuração mudasse amanhã.
web_server_audit responde a duas perguntas distintas por CVE:
Combinando essas respostas, obtêm-se três classificações honestas:
| Classificação | Significado |
|---|---|
| 🔴 Risco de exploração ativa | Versão vulnerável e gatilho presente. Explorável hoje. |
| 🟡 Risco latente | Versão vulnerável, sem gatilho. Torna-se explorável se mudanças na configuração introduzirem o padrão. |
| ⚪ Não verificado | Configuração ilegível; status desconhecido. |
git clone https://github.com/YOUR_USERNAME/web-server-audit.git
cd web-server-audit
sudo python3 web_server_audit.py
| CVE | Severidade | Padrão de gatilho |
|---|---|---|
| CVE-2026-42945 (Rift) | ALTA | rewrite + captura sem nome ($1,$2) + ? na substituição |
| CVE-2026-42946 | MÉDIA | scgi_pass ou uwsgi_pass em uso |
| CVE-2026-40701 | MÉDIA | ssl_stapling on + resolver juntos |
| CVE-2026-42934 | BAIXA | diretivas charset/charset_types/source_charset |
A lista de CVEs do Apache está atualmente vazia, mas a estrutura está pronta — veja Estendendo abaixo.
Além das CVEs, a ferramenta também relata:
/proc/sys/kernel/randomize_va_space) — ASLR completo reduz materialmente a explorabilidade de RCE em bugs de memóriaesm-infra e esm-appsnginx, apache2, systemctl, ss, journalctl quando disponíveis; caso contrário, ignora as verificações sem erros.# Compact report (default — hides OK lines)
sudo python3 web_server_audit.py
# All findings including OK lines
sudo python3 web_server_audit.py --verbose
# No ANSI colors (good for pipes, logs, CI output)
sudo python3 web_server_audit.py --no-color
# Machine-readable JSON
sudo python3 web_server_audit.py --json
| Código | Significado |
|---|---|
| 0 | Nenhum problema |
| 1 | Apenas avisos ou descobertas críticas não relacionadas a CVE |
| 2 | Pelo menos uma CVE é ativamente explorável |
O código de saída 2 é um sinal natural de falha em 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
========================================================================
Adicionar uma nova CVE exige dois passos.
1. Escreva uma função de gatilho que recebe o texto completo da configuração (saída de nginx -T) e retorna (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. Adicione a entrada a NGINX_CVES (ou 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,
},
Só isso. O framework cuida automaticamente da classificação, formatação da saída, JSON, códigos de saída e do resumo executivo.
--verbose para inspecionar detalhes em caso de dúvida.Pull requests, issues, novos detectores de CVE e suporte para servidores web adicionais (lighttpd, Caddy, HAProxy, etc.) são todos bem-vindos.
Ao propor um novo detector de CVE, inclua:
Publicado sob a Licença MIT.
Copyright (c) 2026 SiberSAN