aj2108/CVE-2026-8239
GitHub: aj2108/CVE-2026-8239
针对 Concrete CMS 对话评分端点 IDOR 漏洞的分析与 PoC 项目,展示因缺少授权检查导致的未授权信息访问问题。
Stars: 0 | Forks: 0
# CVE-2026-8239
CVE-2026-8239 是一个影响 Concrete CMS 9.5.0 及更早版本的不安全直接对象引用 (IDOR) 漏洞。该漏洞存在于 /ccm/frontend/conversations/get_rating endpoint 中,允许攻击者通过提供任意消息 ID 来确定对话消息是否存在并获取其评分。该 endpoint 在返回请求的信息之前未能执行适当的授权检查。
# 受影响的软件
产品:Concrete CMS
受影响版本:9.5.0 及更早版本
修复版本:9.5.1
Endpoint:/ccm/frontend/conversations/get_rating
漏洞类型
类别:不安全直接对象引用 (IDOR)
CWE-862:缺少授权
# 根本原因
该 endpoint 接受来自客户端的消息 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,因为只有对象标识符发生了变化——不需要恶意的 payload 或注入命令。
# 影响
攻击者可以:
枚举有效的对话消息 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。
标签:CMS, IDOR, PoC, Web安全, 密码管理, 暴力破解, 权限绕过, 漏洞分析, 蓝队分析, 路径探测