
Analisi di sicurezza per un IDOR in Concrete CMS che espone le valutazioni delle conversazioni tramite un'autorizzazione mancante sull'endpoint get_rating, con causa principale, scenario di attacco e correzione.
CVE-2026-8239 è una vulnerabilità Insecure Direct Object Reference (IDOR) che colpisce Concrete CMS 9.5.0 e versioni precedenti. La vulnerabilità è presente nell'endpoint /ccm/frontend/conversations/get_rating, che consente a un attaccante di determinare se un messaggio di conversazione esiste e di recuperare il suo punteggio di valutazione fornendo un ID messaggio arbitrario. L'endpoint non esegue controlli di autorizzazione adeguati prima di restituire le informazioni richieste.
Prodotto: Concrete CMS Versioni interessate: 9.5.0 e precedenti Versione corretta: 9.5.1 Endpoint: /ccm/frontend/conversations/get_rating Tipo di vulnerabilità Categoria: Insecure Direct Object Reference (IDOR) CWE-862: Autorizzazione mancante
L'endpoint accetta un ID messaggio dal client e restituisce informazioni su quel messaggio senza verificare se l'utente richiedente è autorizzato ad accedervi.
Invece di validare proprietà o permessi, l'applicazione si fida dell'identificatore fornito dall'utente.
Concettualmente:
User supplies messageId ↓ Server locates message ↓ No authorization check ↓ Returns message rating
Poiché il controllo di autorizzazione è assente, un attaccante può enumerare gli ID dei messaggi e ottenere informazioni su conversazioni a cui non dovrebbe poter accedere.
Supponiamo che l'applicazione memorizzi i messaggi di conversazione con ID numerici.
Una richiesta legittima può fare riferimento a:
GET /ccm/frontend/conversations/get_rating?messageId=125
Un attaccante può semplicemente modificare l'identificatore:
GET /ccm/frontend/conversations/get_rating?messageId=126
Se l'applicazione risponde con il punteggio di valutazione invece di restituire 403 Forbidden o 404 Not Found, l'attaccante può confermare che il messaggio esiste e recuperare le sue informazioni di valutazione.
Questo è un classico IDOR perché cambia solo l'identificatore dell'oggetto: non sono richiesti payload dannosi o comandi iniettati.
Un attaccante può:
La vulnerabilità impatta principalmente la riservatezza, poiché utenti non autorizzati possono accedere a informazioni che dovrebbero essere protette.
Metrica Punteggio CVSS v3.1 (NVD) 5.3 – Media CVSS v4.0 (Concrete CMS CNA) 6.3 – Media
Il fornitore non ha pubblicato il codice sorgente vulnerabile effettivo. Il seguente esempio illustra solo il pattern della vulnerabilità.
$messageId = $_GET['messageId'];
$message = $conversationRepository->findMessage($messageId);
// No authorization check return response()->json([ 'rating' => $message->getRating() ]);
L'applicazione recupera il messaggio basandosi esclusivamente sull'ID fornito dall'utente e ne restituisce immediatamente la valutazione. Non controlla mai se l'utente corrente è autorizzato ad accedere a quel messaggio.
$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'implementazione corretta verifica che l'utente autenticato abbia il permesso di visualizzare il messaggio richiesto prima di restituirne la valutazione. Anche se un attaccante modifica il messageId, il server applica l'autorizzazione e rifiuta le richieste non autorizzate con una risposta HTTP 403 Forbidden. Questo previene l'IDOR assicurando che gli utenti possano accedere solo alle risorse che sono autorizzati a visualizzare.