IPBUF安全漏洞报告
English
CVE-2026-40565 CVSS 6.1 中危

CVE-2026-40565 FreeScout 存储型XSS漏洞

披露日期: 2026-04-21

漏洞信息

漏洞编号
CVE-2026-40565
漏洞类型
跨站脚本攻击 (XSS)
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
FreeScout

相关标签

XSSFreeScoutHTML注入存储型漏洞CVE-2026-40565

漏洞概述

FreeScout是一款免费的自托管帮助台和共享邮箱软件。在1.8.213版本之前,该软件存在一个安全漏洞,源于其`linkify()`函数在处理邮件正文时的不当实现。该函数在将纯文本URL转换为HTML锚点标签时,未能正确转义URL中的双引号字符。由于前置的`HTMLPurifier`保留了文本节点中的字面量引号,导致攻击者可利用此特性在`href`属性中注入任意HTML属性,进而实施跨站脚本攻击(XSS)。

技术细节

该漏洞的核心在于FreeScout处理邮件正文时的逻辑缺陷,具体涉及`app/Misc/Helper.php`文件中的`linkify()`函数与`HTMLPurifier`组件的交互。在处理流程中,`HTMLPurifier`首先通过`getCleanBody()`函数清理邮件内容,虽然它能有效过滤大部分恶意HTML,但它会保留文本节点中的字面量双引号(")字符。随后,`linkify()`函数被调用于将纯文本URL转换为HTML超级链接(即`<a>`标签)。问题在于,`linkify()`在构建`href="..."`属性时,未对URL字符串中可能存在的双引号进行转义处理。因此,当攻击者发送包含精心构造的URL(如`http://evil.com" onmouseover="alert(1)`)的邮件时,双引号会提前闭合`href`属性,导致后续的字符被解析为标签的属性。这使得攻击者能够注入任意HTML属性或JavaScript事件处理器,从而在受害者(通常是管理员或客服人员)查看邮件时触发跨站脚本攻击。由于该邮件存储在数据库中,这属于存储型XSS,危害性较高,可能导致会话劫持或进一步的服务器渗透。

攻击链分析

STEP 1
步骤1
攻击者向FreeScout系统发送一封包含恶意URL的邮件,URL中经过特殊构造,包含双引号和JavaScript事件代码。
STEP 2
步骤2
FreeScout接收邮件,HTMLPurifier组件对邮件正文进行清理,保留了文本节点中的双引号字符。
STEP 3
步骤3
FreeScout的`linkify()`函数处理正文,尝试将URL转换为`<a>`标签,但未转义URL中的双引号,导致`href`属性被提前闭合。
STEP 4
步骤4
恶意代码被注入到生成的HTML标签属性中,随邮件内容一起存储在数据库中。
STEP 5
步骤5
管理员或用户登录FreeScout查看该邮件,浏览器解析恶意HTML,触发脚本执行,导致XSS攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC Concept for CVE-2026-40565 # This script demonstrates the payload generation. # Send an email containing this payload to a FreeScout instance. import requests target_url = "https://your-freescout-instance.com/api/emails" # Example endpoint # The malicious URL containing an unescaped double quote # This breaks out of the href attribute and injects an onmouseover event malicious_payload = 'https://example.com" onmouseover="alert(1)" ' email_data = { "subject": "Testing CVE-2026-40565", "body": f"Please check this link: {malicious_payload}", "from": "[email protected]" } # In a real scenario, the attacker would send this email via SMTP or API # When FreeScout processes this email, the linkify() function will generate: # <a href="https://example.com" onmouseover="alert(1)" ">...</a> print(f"Payload to be sent in email body: {malicious_payload}")

影响范围

FreeScout < 1.8.213

防御指南

临时缓解措施
建议用户立即升级到FreeScout 1.8.213版本以修复此漏洞。如果暂时无法升级,应限制外部邮件的来源,并对邮件内容进行额外的后处理,确保将URL中的双引号进行HTML实体编码(如转换为&quot;),防止属性逃逸。

参考链接

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