
CVE-2026-8347 — Updated!
CVE-2026-8347 — это уязвимость, связанная с небезопасной прямой ссылкой на объект (IDOR) в сочетании с неверным уровнем авторизации в Concrete CMS версии 9.5.0 и более ранних. Дефект присутствует в диалоговом окне Reorder для связей Express, позволяя пользователю, имеющему только права на просмотр записи Express, изменять порядок связей для другой сущности.
CVE-2026-8347 – Небезопасная прямая ссылка на объект (IDOR) в Concrete CMS
Обзор
CVE-2026-8347 — это уязвимость типа Insecure Direct Object Reference (IDOR), затрагивающая Concrete CMS версии 9.5.0 и более ранние. Проблема существует в функциональности Express Association Reorder из-за недостаточных проверок авторизации.
Когда пользователь изменяет порядок ассоциаций, приложение проверяет, что пользователь имеет разрешение на просмотр записи Express, но не подтверждает, авторизован ли пользователь на её изменение. В результате аутентифицированный пользователь с ограниченными привилегиями может манипулировать идентификатором другой сущности Express и изменять порядок её ассоциаций, даже не имея разрешений на редактирование.
В отличие от уязвимостей SQL-инъекций или удалённого выполнения кода, этот недостаток не связан с внедрением вредоносных команд или кода. Вместо этого он эксплуатирует нарушенный контроль доступа путём изменения управляемого пользователем идентификатора объекта (например, ID сущности) для ссылки на ресурс другого пользователя. Поскольку сервер не проверяет должным образом авторизацию для запрашиваемого объекта, он выполняет действие над данными, которые атакующий не должен иметь возможности изменять.
Концептуальная уязвимая логика:
// Пользователь запрашивает изменение порядка ассоциаций $entityId = $_POST['entityId'];
$entity = $entityRepository->find($entityId);
// Проверяется только доступ пользователя к сущности if ($permissionChecker->canView($entity)) {
// Изменение порядка ассоциаций без проверки разрешения на редактирование
$associationService->reorder($entity, $_POST['order']);
return response()->json([
'status' => 'success'
]);
}
Почему это уязвимо
Приложение проверяет только разрешение на просмотр перед выполнением операции, изменяющей состояние.
Атакующий может изменить параметр entityId в запросе, чтобы сослаться на сущность другого пользователя. Поскольку проверка авторизации для самого изменения не выполняется, операция изменения порядка успешно выполняется над неавторизованным ресурсом.
Воздействие
Успешная атака может позволить аутентифицированному пользователю:
- Изменить порядок ассоциаций, принадлежащих другой сущности Express.
- Выполнять несанкционированные изменения данных приложения.
- Нарушить целостность хранящейся информации.
Уязвимость в первую очередь влияет на целостность данных и сама по себе не позволяет выполнять SQL-инъекции, удалённое выполнение кода или обход аутентификации.
Исправленный код (концептуальный)
Приложение должно проверять, что аутентифицированный пользователь имеет разрешение на изменение конкретной сущности, прежде чем обрабатывать запрос на изменение порядка.
$entityId = $_POST['entityId'];
$entity = $entityRepository->find($entityId);
// Проверка разрешения на изменение if (!$permissionChecker->canEdit($entity)) {
return response()->json([
'error' => 'Access denied.'
], 403);
}
// Пользователь авторизован $associationService->reorder($entity, $_POST['order']);
return response()->json([ 'status' => 'success' ]);
Затронутое программное обеспечение
- Продукт: Concrete CMS
- Затронутые версии: 9.5.0 и более ранние
- Исправленная версия: 9.5.1
Меры по устранению
Обновитесь до Concrete CMS 9.5.1 или более поздней версии. Разработчикам следует внедрять надлежащие проверки авторизации на стороне сервера для каждого запроса, изменяющего состояние, и гарантировать, что пользователи могут изменять только те ресурсы, которые им явно разрешено редактировать.