CVE-2026-8239 是一个不安全的直接对象引用(IDOR)漏洞,影响 Concrete CMS 9.5.0 及更早版本。该漏洞存在于 /ccm/frontend/conversations/get_rating 端点中,攻击者通过提供任意消息 ID,即可判断会话消息是否存在并获取其评分。该端点在返回所请求的信息之前未能执行适当的授权检查。
产品:Concrete CMS 受影响版本:9.5.0 及更早版本 修复版本:9.5.1 端点:/ccm/frontend/conversations/get_rating 漏洞类型 类别:不安全的直接对象引用(IDOR) CWE-862:缺少授权
该端点接受来自客户端的消息 ID,并在未验证请求用户是否有权访问该消息的情况下返回相关信息。
应用程序未验证所有权或权限,而是信任用户提供的标识符。
从概念上讲:
用户提供 messageId ↓ 服务器定位消息 ↓ 无授权检查 ↓ 返回消息评分
由于缺少授权检查,攻击者可以枚举消息 ID,并获取其本应无法访问的会话信息。
假设应用程序使用数字 ID 存储会话消息。
合法请求可能引用:
GET /ccm/frontend/conversations/get_rating?messageId=125
攻击者只需修改标识符:
GET /ccm/frontend/conversations/get_rating?messageId=126
如果应用程序返回评分而不是 403 Forbidden 或 404 Not Found,攻击者即可确认该消息存在并获取其评分信息。
这是一个典型的 IDOR 漏洞,因为只有对象标识符发生变化——无需恶意载荷或注入命令。
攻击者可以:
枚举有效的会话消息 ID。 确认特定消息是否存在。 检索其无权访问的消息的评分。 获取有关私人会话的有限信息。
该漏洞主要影响机密性,因为未经授权的用户可以访问本应受保护的信息。
指标 评分 CVSS v3.1 (NVD) 5.3 – 中危 CVSS v4.0 (Concrete CMS CNA) 6.3 – 中危
厂商尚未发布实际的漏洞源代码。以下示例仅用于说明漏洞模式。
$messageId = $_GET['messageId'];
$message = $conversationRepository->findMessage($messageId);
// No authorization check return response()->json([ 'rating' => $message->getRating() ]);
应用程序仅根据用户提供的 ID 检索消息并立即返回其评分,从不检查当前用户是否有权访问该消息。
$messageId = $_GET['messageId'];
$message = $conversationRepository->findMessage($messageId);
if (!$authorizationService->canViewMessage($currentUser, $message)) { return response()->json([ 'error' => 'Access denied.' ], 403); }
return response()->json([ 'rating' => $message->getRating() ]);
修复后的实现会在返回评分之前,先验证已认证用户是否有权限查看所请求的消息。即使攻击者更改了 messageId,服务器也会强制实施授权,并以 HTTP 403 Forbidden 响应拒绝未授权的请求。这通过确保用户只能访问其被允许查看的资源来防止 IDOR。