aj2108/CVE-2026-8237

GitHub: aj2108/CVE-2026-8237

该仓库记录并分析了 Concrete CMS 中由缺失授权检查导致的 IDOR 漏洞(CVE-2026-8237),提供了漏洞原理说明与概念性利用代码。

Stars: 0 | Forks: 0

# CVE-2026-8237 CVE-2026-8237 是一个不安全的直接对象引用(IDOR)漏洞,由 Concrete CMS 9.5.0 及更早版本中缺失授权检查所引起。该缺陷存在于 `/ccm/frontend/conversations/message_detail` endpoint 中,该 endpoint 仅根据用户提供的消息标识符返回对话消息的完整内容。由于应用程序未验证请求者是否有权访问指定消息,未经身份验证的攻击者可以枚举消息 ID 并检索应保持私密的对话内容。与这些消息关联的文件附件下载 URL 也可能被泄露。此问题已在 Concrete CMS 9.5.1 中得到修复。 # 受影响的软件
属性
产品 Concrete CMS
受影响版本 9.5.0 及更早版本
修复版本 9.5.1
受影响的 Endpoint /ccm/frontend/conversations/message_detail
# 漏洞类型
  • 类别: 不安全的直接对象引用 (IDOR)

  • CWE-862: 缺失授权

# 根本原因 该 endpoint 使用客户端控制的 messageId 检索对话消息,而未验证当前用户是否有权访问该特定消息。 易受攻击的工作流程在概念上如下: 用户提供 messageId ↓ 服务器获取消息 ↓ 无授权检查 ↓ 返回完整消息内容 由于从未验证所有权或访问权限,攻击者可以更改 messageId 的值来访问其他用户的对话消息。 # 攻击场景 假设一个合法请求检索消息 150: GET /ccm/frontend/conversations/message_detail?messageId=150 攻击者只需更改标识符: GET /ccm/frontend/conversations/message_detail?messageId=151 如果服务器返回消息 151 的内容而不是拒绝访问,攻击者就可以继续递增 ID,以枚举私密对话及其相关附件。 # 影响 成功利用此漏洞可能会允许攻击者: 阅读私密对话消息。 访问来自受限或仅限成员页面的讨论。 查看审核队列消息。 获取文件附件下载 URL。 枚举有效的对话消息 ID。 该漏洞主要影响机密性,因为未经授权即可泄露敏感信息。 # 严重程度 指标 分数 CVSS v3.1 (NVD) 5.3 (中危) CVSS v4.0 (Concrete CMS) 6.3 (中危) # 概念性漏洞代码 注意:供应商尚未发布实际的漏洞源代码。以下示例仅用于说明漏洞模式。 $messageId = $_GET['messageId']; $message = $conversationRepository->find($messageId); // 缺失授权检查 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,除非用户有权访问该特定消息,否则请求将被拒绝。这可以防止未经授权泄露对话内容和附件。
标签:CISA项目, Concrete CMS, CVE, IDOR, Web安全, 数字签名, 权限绕过, 蓝队分析