
CVE-2026-67598 — Emlog Pro: convalida del certificato TLS disabilitata nell'assistente AI (MITM → furto di chiavi API). CWE-295, CVSS 9.1. Segnalato da @IlhomjonR.
| CVE ID | CVE-2026-67598 |
| Prodotto | emlog/emlog — Emlog Pro |
| Versioni interessate | Emlog Pro fino alla 2.6.23 |
| Debolezza | CWE-295: Validazione impropria del certificato |
| CVSS v4.0 | 9.1 — Critical |
| CVSS v3.1 | 7.4 — High |
| Vettore | Rete adiacente · Nessun privilegio · MITM |
| CNA | VulnCheck · GHSA-hf85-99vj-m4c5 |
| Riservata / Pubblicata | 2026-07-29 / 2026-08-03 |
| Ricercatore | Ilhomjon Rustamov (@IlhomjonR) |
Emlog Pro include un assistente AI destinato all'amministrazione (admin/ai.php + include/service/ai.php)
che effettua chiamate HTTPS in uscita verso un provider LLM configurato — chat, streaming, generazione
di immagini — oltre a un helper di scraping Bing per il comando @em-help.
Ogni helper di richiesta in uscita disabilita incondizionatamente la validazione del certificato TLS:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
La verifica è disattivata indipendentemente dall'URL del provider configurato o dal percorso di rete,
quindi qualsiasi attaccante in rete adiacente / man-in-the-middle posizionato tra il server Emlog e
api_url può intercettare trasparentemente la sessione TLS con un certificato contraffatto e:
Authorization: Bearer <apiKey> — la chiave API a pagamento del provider LLM del sito.query_database e update_config.Si tratta di un puro difetto di sicurezza del trasporto — non è protetto dalla UI di conferma delle chiamate agli strumenti AI.
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 — le chiamate CURLOPT_SSL_VERIFYPEER / CURLOPT_SSL_VERIFYHOST in:
| Funzione | Scopo |
|---|---|
send() | Richiesta chat LLM |
sendStream() | Risposta chat in streaming |
sendImageRequest() | Generazione di immagini AI |
fetchSearchHtml() | Scraping Bing per @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.
Gli screenshot dell'istanza Emlog Pro 2.6.23 sottoposta ad audit si trovano in
screenshots/ — home page e login di amministrazione.
Abilita la verifica TLS per tutte le chiamate in uscita in 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);
Gli endpoint self-hosted / compatibili OpenAI con una CA privata dovrebbero essere supportati tramite un bundle CA personalizzato (
CURLOPT_CAINFO) — mai disabilitando la verifica a livello globale.
Durante l'audit della stessa funzionalità AI, è emerso che Ai::queryDatabase() blocca specificamente
le scritture SQL dirette sulla tabella blog ma non sulla tabella user (che contiene role / password).
Combinato con il percorso di iniezione indiretta di prompt tramite @em-help (risultati Bing live + FAQ
sottoposte a scraping inserite in un modello con accesso agli strumenti query_database / update_config),
vale la pena rafforzare la sicurezza instradando le scritture su user / options attraverso strumenti
con ambito ristretto — come write_article gestisce già i post del blog. Dettagli completi in
REPORT.md (tracciati separatamente dalla CVE di cui sopra).
| Data | Evento |
|---|---|
| 2026-07-24 | Vulnerabilità identificata durante l'audit di Emlog Pro 2.6.23 (commit ff5637e) |
| 2026-07-29 | CVE riservata tramite VulnCheck |
| 2026-08-03 | CVE-2026-67598 pubblicata |
Pubblicato a scopo educativo e di sicurezza difensiva nell'ambito di una divulgazione coordinata.
Scoperto e segnalato da Ilhomjon Rustamov (@IlhomjonR) · CNA: VulnCheck