
Analyse de sécurité d'un IDOR dans Concrete CMS exposant les évaluations de conversations par absence d'autorisation sur l'endpoint get_rating, avec cause racine, scénario d'attaque et correctif.
CVE-2026-8239 est une vulnérabilité de référence directe à un objet de manière insecure (IDOR) affectant Concrete CMS 9.5.0 et versions antérieures. La vulnérabilité se situe dans le point d'accès /ccm/frontend/conversations/get_rating, qui permet à un attaquant de déterminer si un message de conversation existe et d'en récupérer le score d'évaluation en fournissant un identifiant de message arbitraire. Le point d'accès n'effectue pas de vérifications d'autorisation appropriées avant de renvoyer les informations demandées.
Produit : Concrete CMS Versions affectées : 9.5.0 et antérieures Version corrigée : 9.5.1 Point d'accès : /ccm/frontend/conversations/get_rating Type de vulnérabilité Catégorie : Référence directe à un objet de manière insecure (IDOR) CWE-862 : Autorisation manquante
Le point d'accès accepte un identifiant de message provenant du client et renvoie des informations sur ce message sans vérifier si l'utilisateur demandeur est autorisé à y accéder.
Au lieu de valider la propriété ou les permissions, l'application se fie à l'identifiant fourni par l'utilisateur.
Conceptuellement :
L'utilisateur fournit messageId ↓ Le serveur localise le message ↓ Aucune vérification d'autorisation ↓ Renvoie l'évaluation du message
Parce que la vérification d'autorisation est absente, un attaquant peut énumérer les identifiants de messages et obtenir des informations sur des conversations auxquelles il ne devrait pas avoir accès.
Supposons que l'application stocke les messages de conversation avec des identifiants numériques.
Une requête légitime peut référencer :
GET /ccm/frontend/conversations/get_rating?messageId=125
Un attaquant peut simplement modifier l'identifiant :
GET /ccm/frontend/conversations/get_rating?messageId=126
Si l'application répond avec le score d'évaluation au lieu de renvoyer une erreur 403 Forbidden ou 404 Not Found, l'attaquant peut confirmer que le message existe et récupérer ses informations d'évaluation.
Il s'agit d'un IDOR classique car seul l'identifiant de l'objet change — aucune charge utile malveillante ni commande injectée n'est nécessaire.
Un attaquant peut :
Énumérer les identifiants valides des messages de conversation. Confirmer si des messages spécifiques existent. Récupérer les scores d'évaluation de messages auxquels il n'est pas autorisé à accéder. Obtenir des informations limitées sur des conversations privées.
La vulnérabilité affecte principalement la confidentialité, car des utilisateurs non autorisés peuvent accéder à des informations qui devraient être protégées.
Métrique Score CVSS v3.1 (NVD) 5.3 – Moyen CVSS v4.0 (Concrete CMS CNA) 6.3 – Moyen
L'éditeur n'a pas publié le code source vulnérable réel. L'exemple suivant illustre uniquement le modèle de vulnérabilité.
$messageId = $_GET['messageId'];
$message = $conversationRepository->findMessage($messageId);
// Aucune vérification d'autorisation return response()->json([ 'rating' => $message->getRating() ]);
L'application récupère le message uniquement sur la base de l'identifiant fourni par l'utilisateur et renvoie immédiatement son évaluation. Elle ne vérifie jamais si l'utilisateur actuel est autorisé à accéder à ce message.
$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() ]);
L'implémentation corrigée valide que l'utilisateur authentifié a la permission de voir le message demandé avant de renvoyer son évaluation. Même si un attaquant modifie le messageId, le serveur applique l'autorisation et rejette les requêtes non autorisées avec une réponse HTTP 403 Forbidden. Cela empêche l'IDOR en garantissant que les utilisateurs ne peuvent accéder qu'aux ressources qu'ils sont autorisés à voir.