CVE-2026-8237 是一个不安全的直接对象引用(IDOR)漏洞,由 Concrete CMS 9.5.0 及更早版本中缺失授权检查所致。该缺陷存在于 /ccm/frontend/conversations/message_detail 端点,该端点仅根据用户提供的消息标识符返回对话消息的完整内容。由于应用程序未验证请求者是否有权访问指定消息,未认证的攻击者可以枚举消息 ID 并检索本应保持私密的对话内容。与这些消息相关的文件附件下载 URL 也可能被披露。该问题已在 Concrete CMS 9.5.1 中修复。
| 属性 | 值 |
|---|---|
| 产品 | Concrete CMS |
| 受影响版本 | 9.5.0 及更早版本 |
| 修复版本 | 9.5.1 |
| 受影响端点 | /ccm/frontend/conversations/message_detail |
该端点使用客户端控制的消息 ID 检索对话消息,而未验证当前用户是否有权访问该特定消息。
漏洞工作流程概念上如下:
用户提供 messageId
↓
服务器获取消息
↓
无授权检查
↓
返回完整消息内容
由于从未验证所有权或访问权限,攻击者可以更改 messageId 值以访问其他用户的对话消息。
假设一个合法请求检索消息 150:
GET /ccm/frontend/conversations/message_detail?messageId=150
攻击者只需更改标识符:
GET /ccm/frontend/conversations/message_detail?messageId=151
如果服务器返回消息 151 的内容而不是拒绝访问,攻击者可以继续递增 ID 来枚举私密对话及其相关附件。
成功利用可能允许攻击者:
该漏洞主要影响机密性,因为敏感信息可能在未经授权的情况下被披露。
| 指标 | 评分 |
|---|---|
| CVSS v3.1 (NVD) | 5.3(中危) |
| CVSS v4.0 (Concrete CMS) | 6.3(中危) |
注意:供应商尚未发布实际的漏洞源代码。以下示例仅用于说明漏洞模式。
$messageId = $_GET['messageId'];
$message = $conversationRepository->find($messageId);
// Missing authorization check
return response()->json([
'message' => $message->getContent(),
'attachments' => $message->getAttachments()
]);
应用程序信任用户控制的 messageId,并在未确认请求者有权访问的情况下返回所请求的消息。
$messageId = $_GET['messageId'];
$message = $conversationRepository->find($messageId);
if (!$authorizationService->canView($currentUser, $message)) {
return response()->json([
'error' => 'Access denied'
], 403);
}
return response()->json([
'message' => $message->getContent(),
'attachments' => $message->getAttachments()
]);
修复后的实现会在返回任何对话数据之前执行服务器端授权检查。即使攻击者修改了 messageId,除非用户有权访问该特定消息,否则请求将被拒绝。这可以防止对话内容和附件被未经授权地披露。