
CVE-2026-67598 — Emlog Pro: disabled TLS certificate validation in AI assistant (MITM → API-key theft). CWE-295, CVSS 9.1. Reported by @IlhomjonR.
MITM adyacente a la red → robo de clave de API del proveedor de LLM e inyección de respuestas de IA
Resumen · Flujo del ataque · Código afectado · Prueba · Mitigación · Cronología · Referencias
Emlog Pro incluye un asistente de IA orientado al administrador (admin/ai.php + include/service/ai.php)
que realiza llamadas HTTPS salientes a un proveedor de LLM configurado — chat, streaming, generación
de imágenes — además de un ayudante de scraping de Bing para el comando @em-help.
Todos los ayudantes de solicitudes salientes deshabilitan incondicionalmente la validación del certificado TLS:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
La verificación está desactivada independientemente de la URL del proveedor configurada o de la ruta de red, por lo que cualquier
atacante adyacente a la red / intermediario (MITM) situado entre el servidor Emlog y la
api_url puede interceptar de forma transparente la sesión TLS con un certificado falsificado y:
Authorization: Bearer <apiKey> — la clave de API de pago del proveedor de LLM del sitio.query_database y update_config.Se trata de un defecto puramente de seguridad del transporte: no está condicionado por la interfaz de confirmación de llamadas a herramientas de 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 — las llamadas a CURLOPT_SSL_VERIFYPEER / CURLOPT_SSL_VERIFYHOST en:
| Función | Propósito |
|---|---|
send() | Solicitud de chat LLM |
# 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.
Las capturas de pantalla de la instancia auditada de Emlog Pro 2.6.23 están en
screenshots/ — página de inicio y acceso de administrador.
Habilita la verificación TLS en todas las llamadas salientes de 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);
Los endpoints autoalojados o compatibles con OpenAI que utilicen una CA privada deberían admitirse mediante un paquete de CA personalizado (
CURLOPT_CAINFO) — nunca deshabilitando la verificación de forma global.
Al auditar la misma función de IA, se descubrió que Ai::queryDatabase() bloquea específicamente las escrituras SQL directas
en la tabla blog, pero no en la tabla user (que contiene role / password).
Combinado con la vía de inyección indirecta de prompts a través de @em-help (resultados en vivo de Bing + preguntas frecuentes
extraídas que se alimentan a un modelo con acceso a las herramientas query_database / update_config), esto merece un endurecimiento
consistente en enrutar las escrituras de user / options a través de herramientas de alcance limitado, tal como write_article
ya gestiona las publicaciones del blog. Todos los detalles en REPORT.md (se trata por separado del CVE anterior).
| Fecha | Evento |
|---|---|
| 2026-07-24 | Vulnerabilidad identificada durante la auditoría de Emlog Pro 2.6.23 (commit ff5637e) |
| 2026-07-29 |
Publicado con fines educativos y de seguridad defensiva como parte de una divulgación coordinada.
Descubierto y reportado por Ilhomjon Rustamov (@IlhomjonR) · CNA: VulnCheck
| CVE ID | CVE-2026-67598 |
| Producto | emlog/emlog — Emlog Pro |
| Afecta | Emlog Pro hasta 2.6.23 |
| Debilidad | CWE-295: Validación incorrecta de certificados |
| CVSS v4.0 | 9.1 — Crítico |
| CVSS v3.1 | 7.4 — Alta |
| Vector | Adyacente a la red · Sin privilegios · MITM |
| CNA | VulnCheck · GHSA-hf85-99vj-m4c5 |
| Reservado / Publicado | 2026-07-29 / 2026-08-03 |
| Investigador | Ilhomjon Rustamov (@IlhomjonR) |
sendStream() | Respuesta de chat en streaming |
sendImageRequest() | Generación de imágenes con IA |
fetchSearchHtml() | Scraping de Bing para @em-help |
| CVE reservado a través de VulnCheck |
| 2026-08-03 | CVE-2026-67598 publicado |