
Kit de ferramentas Python para auditar o Apache HTTP Server contra o CVE-2026-23918 (RCE por double-free em HTTP/2) e 4 CVEs relacionados. Scanner passivo com verificação ALPN + auditor local somente leitura. Sem exploits.
| CVE | Gravidade | Componente | Impacto | Afetados |
|---|
| CVE-2026-23918 | Alta (CVSS 8.8) | HTTP/2 | Double Free / RCE | apenas 2.4.66 |
| CVE-2026-24072 | Moderada | mod_rewrite (ap_expr) | Escalonamento de Privilégios | ≤ 2.4.66 |
| CVE-2026-28780 | Baixa | mod_proxy_ajp | Estouro de Buffer no Heap | ≤ 2.4.66 |
| CVE-2026-29168 | Baixa | mod_md (OCSP) | Exaustão de Recursos | 2.4.30 – 2.4.66 |
| CVE-2026-29169 | Baixa | mod_dav_lock | NULL Ptr Deref / DoS | ≤ 2.4.66 |
Todos os problemas são corrigidos no Apache HTTP Server 2.4.67.
Estas ferramentas destinam-se ao uso apenas contra sistemas que você possui ou para os quais possui autorização escrita explícita para testar. A varredura não autorizada pode ser ilegal em sua jurisdição.
O kit de ferramentas é defensivo por design:
Server: padrão e usa ALPN TLS padrão — o mesmo mecanismo que todo navegador moderno usa para negociar 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
python3 padrão do Ubuntu 18.04 e em todas as versões posteriores.git clone https://github.com/sibersan/cve-2026-23918.git
cd cve-2026-23918
chmod +x apache_passive_audit.py apache_local_audit.py
apache_passive_audit.pyLê o cabeçalho HTTP Server: para detectar a versão do Apache e a compara com a tabela de CVEs. Além disso, para alvos HTTPS, realiza uma negociação ALPN TLS padrão para determinar se o HTTP/2 está exposto — esta é a pré-condição fundamental para o CVE-2026-23918 ser explorável. Nenhum payload de exploit é enviado.
O script oferece h2 e http/1.1 na extensão ALPN do handshake TLS (RFC 7301). A escolha do servidor é a resposta padrão e inequívoca para "o HTTP/2 está habilitado?" — usada por todo navegador moderno e pelo curl. Isso não aciona a vulnerabilidade nem qualquer comportamento incomum.
O veredito de risco reflete isso:
# Single target
python3 apache_passive_audit.py -t https://web.example.com
# Multiple targets
python3 apache_passive_audit.py -t https://a.example.com -t https://b.example.com
# Targets file, parallel, CSV + JSON output
python3 apache_passive_audit.py -f targets.txt -w 20 -o report.csv --json report.json
# CI / log-friendly (no colors)
python3 apache_passive_audit.py -f targets.txt --no-color
Formato de targets.txt (um alvo por linha, # para comentários):
https://www.example.com
intranet.example.local:8443
# old staging box
http://10.0.5.12
| Flag | Descrição |
|---|---|
-t, --target | Alvo único (pode ser repetido) |
-f, --file | Arquivo de lista de alvos |
-o, --csv | Saída de relatório CSV |
--json | Saída de relatório JSON |
--timeout | Tempo limite de requisição em segundos (padrão 10) |
-w, --workers | Threads de trabalho paralelas (padrão 10) |
--no-color | Desativa saída colorida |
| Código | Significado |
|---|---|
| 0 | Todos os alvos seguros |
| 1 | Pelo menos um alvo UNKNOWN ou ERROR |
| 2 | Pelo menos um alvo VULNERABLE ou AT_RISK |
| Nível | Significado |
|---|---|
VULNERABLE | A versão corresponde a uma faixa de CVE do advisory E sua pré-condição é atendida (ex.: HTTP/2 habilitado) |
AT_RISK | Versão sem patch, mas a pré-condição de alta gravidade NÃO é atendida; outros CVEs ainda se aplicam |
SAFE | Versão ≥ 2.4.67 |
UNKNOWN | Banner oculto (ServerTokens Prod) ou mascarado por proxy reverso/WAF — confirme com o script de auditoria local |
NOT_APACHE | Não é Apache (nginx, IIS, etc.) |
ERROR | Erro de conexão |
ServerTokens Prod ou Minimal ocultam a versão — o script retorna honestamente UNKNOWN. Use a auditoria local para confirmar.apache_local_audit.pyExecuta no host alvo (ou via SSH) e inspeciona o binário do Apache, a versão, os módulos carregados e a configuração de HTTP/2. Também avalia pré-condições de explorabilidade: por exemplo, se a versão é 2.4.66, mas o HTTP/2 está desabilitado, o risco para o CVE-2026-23918 é reduzido de acordo.
sudo python3 apache_local_audit.py
# JSON report (for centralized inventory)
sudo python3 apache_local_audit.py --json /var/log/apache_audit_$(hostname).json
# Custom binary path
sudo python3 apache_local_audit.py --binary /opt/apache/bin/httpd
httpd -v / apache2 -v — versãohttpd -V — informações de build, HTTPD_ROOT, SERVER_CONFIG_FILEapache2ctl -M ou httpd -M — módulos carregadosdpkg-query / rpm -q — versão do pacoteInclude/IncludeOptional (incluindo os sites-enabled/, mods-enabled/ do Debian) → diretiva Protocols (h2 / h2c / http/1.1)| Flag | Descrição |
|---|---|
--binary | Caminho do binário do Apache (substitui a detecção automática) |
--json | Saída de relatório JSON |
--no-color | Desativa saída colorida |
| Código | Significado |
|---|---|
| 0 | SAFE |
| 1 | PATCH_NEEDED ou UNKNOWN |
| 2 | VULNERABLE ou AT_RISK |
| Nível | Significado |
|---|---|
VULNERABLE | Versão sem patch + pré-condições do CVE de alta gravidade atendidas (ex.: HTTP/2 habilitado) |
AT_RISK | Versão sem patch + pelo menos uma pré-condição de CVE atendida |
PATCH_NEEDED | Versão sem patch, mas nenhum módulo/protocolo relevante habilitado — aplique o patch mesmo assim |
SAFE | Versão ≥ 2.4.67 |
UNKNOWN | Não foi possível detectar a versão |
sudo/root é recomendado para leitura completa da configuração. Sem isso, alguns arquivos em sites-enabled/, mods-enabled/ ou /etc/httpd/conf.d/ podem ficar ilegíveis.
Para executar a auditoria local em vários hosts e coletar relatórios de forma centralizada, um exemplo de comando ad-hoc do Ansible:
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"
Os arquivos JSON coletados podem ser mesclados com jq ou um pequeno script Python.
Para o CVE-2026-23918 (até a correção):
h2 e h2c da diretiva Protocols na sua configuração, ou sudo a2dismod http2 no Debian/Ubuntu, e recarregue o serviço.mod_dav_lock se não estiver em uso (CVE-2026-29169)..htaccess (CVE-2026-24072).Advisory oficial: https://httpd.apache.org/security/vulnerabilities_24.html
Pull requests são bem-vindos. Ao adicionar um novo CVE, por favor:
CVE_TABLE com a faixa de versões afetadas e a lambda match.needs apropriado para as verificações de pré-condição (módulo carregado, protocolo habilitado, etc.).from __future__ import annotations, genéricos PEP 585 (list[int]), subprocess.run(capture_output=True) e @dataclass.MIT © 2026 SiberSAN
Este software é fornecido "como está", sem garantia de qualquer tipo. Valide em um ambiente de teste antes do uso em produção. O usuário assume toda a responsabilidade legal por qualquer uso contra sistemas não autorizados.