
Write-up de segurança sobre um IDOR no Concrete CMS que expõe avaliações de conversas devido à falta de autorização no endpoint get_rating, com causa raiz, cenário de ataque e correção.
A CVE-2026-8239 é uma vulnerabilidade de Referência Direta Insegura a Objetos (IDOR) que afeta o Concrete CMS 9.5.0 e versões anteriores. A vulnerabilidade existe no endpoint /ccm/frontend/conversations/get_rating, que permite a um atacante determinar se uma mensagem de conversa existe e obter sua pontuação de avaliação fornecendo um ID de mensagem arbitrário. O endpoint não realiza verificações de autorização adequadas antes de retornar as informações solicitadas.
Produto: Concrete CMS Versões afetadas: 9.5.0 e anteriores Versão corrigida: 9.5.1 Endpoint: /ccm/frontend/conversations/get_rating Tipo de Vulnerabilidade Categoria: Referência Direta Insegura a Objetos (IDOR) CWE-862: Autorização Ausente
O endpoint aceita um ID de mensagem do cliente e retorna informações sobre essa mensagem sem verificar se o usuário solicitante está autorizado a acessá-la.
Em vez de validar a propriedade ou as permissões, a aplicação confia no identificador fornecido pelo usuário.
Conceitualmente:
O usuário fornece o messageId ↓ O servidor localiza a mensagem ↓ Nenhuma verificação de autorização ↓ Retorna a avaliação da mensagem
Como a verificação de autorização está ausente, um atacante pode enumerar IDs de mensagens e obter informações sobre conversas às quais não deveria ter acesso.
Suponha que a aplicação armazene mensagens de conversa com IDs numéricos.
Uma solicitação legítima pode referenciar:
GET /ccm/frontend/conversations/get_rating?messageId=125
Um atacante pode simplesmente modificar o identificador:
GET /ccm/frontend/conversations/get_rating?messageId=126
Se a aplicação responder com a pontuação de avaliação em vez de retornar 403 Forbidden ou 404 Not Found, o atacante pode confirmar que a mensagem existe e obter suas informações de avaliação.
Este é um IDOR clássico, pois apenas o identificador do objeto muda — nenhum payload malicioso ou comandos injetados são necessários.
Um atacante pode:
A vulnerabilidade afeta principalmente a confidencialidade, pois usuários não autorizados podem acessar informações que deveriam estar protegidas.
Métrica Pontuação CVSS v3.1 (NVD) 5.3 – Média CVSS v4.0 (Concrete CMS CNA) 6.3 – Média
O fornecedor não publicou o código-fonte vulnerável real. O exemplo a seguir ilustra apenas o padrão da vulnerabilidade.
$messageId = $_GET['messageId'];
$message = $conversationRepository->findMessage($messageId);
// No authorization check
return response()->json([
'rating' => $message->getRating()
]);
A aplicação recupera a mensagem com base apenas no ID fornecido pelo usuário e imediatamente retorna sua avaliação. Ela nunca verifica se o usuário atual tem permissão para acessar essa mensagem.
$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()
]);
A implementação corrigida valida se o usuário autenticado tem permissão para visualizar a mensagem solicitada antes de retornar sua avaliação. Mesmo que um atacante altere o messageId, o servidor aplica a autorização e rejeita solicitações não autorizadas com uma resposta HTTP 403 Forbidden. Isso evita o IDOR garantindo que os usuários possam acessar apenas os recursos que têm permissão para visualizar.