
Углублённый разбор IDOR-уязвимости в Concrete CMS, охватывающий endpoint message_detail, корневую причину отсутствия авторизации, сценарии атак, воздействие и исправление.
CVE-2026-8237 — это уязвимость типа Insecure Direct Object Reference (IDOR), вызванная отсутствием проверок авторизации в Concrete CMS 9.5.0 и более ранних версиях. Проблема присутствует в эндпоинте /ccm/frontend/conversations/message_detail, который возвращает полное содержимое сообщений бесед на основе только идентификатора сообщения, переданного пользователем. Поскольку приложение не проверяет, авторизован ли запрашивающий пользователь для доступа к указанному сообщению, неаутентифицированный злоумышленник может перебирать идентификаторы сообщений и получать содержимое бесед, которое должно оставаться приватным. Также могут быть раскрыты URL-адреса загрузки файлов-вложений, связанных с этими сообщениями. Проблема исправлена в Concrete CMS 9.5.1.
| Свойство | Значение |
|---|---|
| Продукт | Concrete CMS |
| Затронутые версии | 9.5.0 и более ранние |
| Исправленная версия | 9.5.1 |
| Затронутый эндпоинт | /ccm/frontend/conversations/message_detail |
Эндпоинт получает сообщение беседы с помощью управляемого клиентом идентификатора сообщения, не проверяя, имеет ли текущий пользователь разрешение на доступ к этому конкретному сообщению.
Уязвимый рабочий процесс концептуально выглядит так:
Пользователь передаёт messageId
↓
Сервер получает сообщение
↓
Проверка авторизации отсутствует
↓
Возвращается полное содержимое сообщения
Поскольку владение или права доступа никогда не проверяются, злоумышленники могут изменять значение messageId для доступа к сообщениям бесед других пользователей.
Предположим, легитимный запрос получает сообщение 150:
GET /ccm/frontend/conversations/message_detail?messageId=150
Злоумышленник просто меняет идентификатор:
GET /ccm/frontend/conversations/message_detail?messageId=151
Если сервер отвечает содержимым сообщения 151 вместо отказа в доступе, злоумышленник может продолжать увеличивать идентификаторы, чтобы перечислять приватные беседы и связанные с ними вложения.
Успешная эксплуатация может позволить злоумышленнику:
Уязвимость в первую очередь влияет на конфиденциальность, поскольку чувствительная информация может быть раскрыта без авторизации.
| Метрика | Оценка |
|---|---|
| CVSS v3.1 (NVD) | 5.3 (Средний) |
| CVSS v4.0 (Concrete CMS) |
Примечание: Вендор не публиковал фактический уязвимый исходный код. Следующий пример лишь иллюстрирует паттерн уязвимости.
$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, запрос будет отклонён, если у пользователя нет разрешения на доступ к этому конкретному сообщению. Это предотвращает несанкционированное раскрытие содержимого бесед и вложений.
| 6.3 (Средний) |