
CVE-2026-67598 — Emlog Pro: validação de certificado TLS desativada no assistente de IA (MITM → roubo de chave de API). CWE-295, CVSS 9.1. Relatado por @IlhomjonR.
| ID do CVE | CVE-2026-67598 |
| Produto | emlog/emlog — Emlog Pro |
| Afetado | Emlog Pro até 2.6.23 |
| Fraqueza | CWE-295: Validação Incorreta de Certificado |
| CVSS v4.0 | 9.1 — Crítica |
| CVSS v3.1 | 7.4 — Alta |
| Vetor | Adjacente à rede · Sem privilégios · MITM |
| CNA | VulnCheck · GHSA-hf85-99vj-m4c5 |
| Reservado / Publicado | 2026-07-29 / 2026-08-03 |
| Pesquisador | Ilhomjon Rustamov (@IlhomjonR) |
O Emlog Pro inclui um assistente de IA voltado ao administrador (admin/ai.php + include/service/ai.php)
que faz chamadas HTTPS de saída para um provedor de LLM configurado — chat, streaming, geração
de imagens — além de um auxiliar de raspagem do Bing para o comando @em-help.
Todos os auxiliares de requisições de saída desativam incondicionalmente a validação de certificado TLS:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
A verificação está desativada independentemente da URL do provedor ou do caminho de rede
configurados, portanto, qualquer atacante adjacente à rede / man-in-the-middle posicionado
entre o servidor Emlog e a api_url pode interceptar de forma transparente a sessão TLS com
um certificado forjado e:
Authorization: Bearer <apiKey> — a chave de API paga do provedor de LLM do site.query_database e update_config.Este é um defeito puro de segurança de transporte — ele não é bloqueado pela interface de confirmação de chamada de ferramentas da IA.
flowchart LR
A["🖥️ Emlog server<br/>AI assistant"] -->|"HTTPS request<br/>Bearer <apiKey>"| M{"😈 MITM attacker<br/>(forged cert)"}
M -->|"TLS verify DISABLED<br/>→ accepted"| P["☁️ LLM provider"]
M -.->|"🔑 reads API key"| X["Key exfiltrated"]
M -.->|"💉 forged response"| A
A -->|"acts on injected<br/>AI output"| T["⚙️ query_database /<br/>update_config tools"]
classDef bad fill:#7f1d1d,stroke:#ef4444,color:#fff;
classDef ok fill:#1e3a8a,stroke:#3b82f6,color:#fff;
class M,X bad;
class A,P,T ok;include/service/ai.php — as chamadas CURLOPT_SSL_VERIFYPEER / CURLOPT_SSL_VERIFYHOST em:
| Função | Finalidade |
|---|---|
send() | Requisição de chat do LLM |
sendStream() | Resposta de chat em streaming |
sendImageRequest() | Geração de imagens por IA |
fetchSearchHtml() | Raspagem do Bing para @em-help |
# 1. Configure the AI assistant with any OpenAI-compatible provider URL + API key.
# 2. Put a MITM proxy with an UNTRUSTED CA between Emlog and the provider:
mitmproxy --mode reverse:https://api.provider.example -p 8443
# 3. Trigger any AI chat / image-gen / @em-help request from the admin panel.
# 4. Result: request succeeds despite the untrusted cert, and the
# "Authorization: Bearer ..." header is readable in the proxy log
# → certificate validation is confirmed disabled.
As capturas de tela da instância auditada do Emlog Pro 2.6.23 estão em
screenshots/ — página inicial e login do administrador.
Ative a verificação TLS para todas as chamadas de saída em include/service/ai.php:
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
Endpoints auto-hospedados / compatíveis com OpenAI com uma CA privada devem ser suportados por meio de um pacote de CA personalizado (
CURLOPT_CAINFO) — nunca desativando a verificação globalmente.
Ao auditar o mesmo recurso de IA, descobriu-se que Ai::queryDatabase() bloqueia especificamente
gravações SQL diretas na tabela blog, mas não na tabela user (que contém role / password).
Combinado com o caminho de injeção indireta de prompt via @em-help (resultados ao vivo do Bing +
FAQ raspado alimentando um modelo com acesso às ferramentas query_database / update_config),
isso merece endurecimento roteando gravações em user / options por ferramentas de escopo
restrito — da mesma forma que write_article já trata os posts do blog. Detalhes completos em
REPORT.md (rastreados separadamente do CVE acima).
| Data | Evento |
|---|---|
| 2026-07-24 | Vulnerabilidade identificada durante auditoria do Emlog Pro 2.6.23 (commit ff5637e) |
| 2026-07-29 | CVE reservado via VulnCheck |
| 2026-08-03 | CVE-2026-67598 publicado |
Publicado para fins educacionais e de segurança defensiva como parte da divulgação coordenada.
Descoberto e relatado por Ilhomjon Rustamov (@IlhomjonR) · CNA: VulnCheck