
Analisi approfondita di una vulnerabilità IDOR in Concrete CMS, che copre l'endpoint message_detail, la causa principale dell'autorizzazione mancante, gli scenari di attacco, l'impatto e la correzione.
CVE-2026-8237 è una vulnerabilità Insecure Direct Object Reference (IDOR) causata da controlli di autorizzazione mancanti in Concrete CMS 9.5.0 e versioni precedenti. Il difetto è presente nell'endpoint /ccm/frontend/conversations/message_detail, che restituisce l'intero contenuto dei messaggi di conversazione basandosi esclusivamente su un identificatore di messaggio fornito dall'utente. Poiché l'applicazione non verifica se il richiedente è autorizzato ad accedere al messaggio specificato, un attaccante non autenticato può enumerare gli ID dei messaggi e recuperare contenuti di conversazione che dovrebbero rimanere privati. Possono essere divulgati anche gli URL di download degli allegati associati a tali messaggi. Il problema è risolto in Concrete CMS 9.5.1.
| Proprietà | Valore |
|---|---|
| Prodotto | Concrete CMS |
| Versioni interessate | 9.5.0 e versioni precedenti |
| Versione corretta | 9.5.1 |
| Endpoint interessato | /ccm/frontend/conversations/message_detail |
L'endpoint recupera un messaggio di conversazione utilizzando un ID messaggio controllato dal client senza verificare se l'utente corrente ha il permesso di accedere a quel messaggio specifico.
Il flusso vulnerabile è concettualmente:
L'utente fornisce messageId
↓
Il server recupera il messaggio
↓
Nessun controllo di autorizzazione
↓
Restituisce l'intero contenuto del messaggio
Poiché la proprietà o i permessi di accesso non vengono mai verificati, gli attaccanti possono modificare il valore di messageId per accedere ai messaggi di conversazione di altri utenti.
Supponiamo che una richiesta legittima recuperi il messaggio 150:
GET /ccm/frontend/conversations/message_detail?messageId=150
Un attaccante modifica semplicemente l'identificatore:
GET /ccm/frontend/conversations/message_detail?messageId=151
Se il server risponde con il contenuto del messaggio 151 invece di negare l'accesso, l'attaccante può continuare a incrementare gli ID per enumerare conversazioni private e i relativi allegati.
Lo sfruttamento riuscito può consentire a un attaccante di:
La vulnerabilità ha un impatto principalmente sulla riservatezza, poiché informazioni sensibili possono essere divulgate senza autorizzazione.
| Metrica | Punteggio |
|---|---|
| CVSS v3.1 (NVD) | 5.3 (Medio) |
| CVSS v4.0 (Concrete CMS) |
Nota: Il fornitore non ha pubblicato il codice sorgente vulnerabile effettivo. Il seguente esempio illustra solo il modello di vulnerabilità.
$messageId = $_GET['messageId'];
$message = $conversationRepository->find($messageId);
// Missing authorization check
return response()->json([
'message' => $message->getContent(),
'attachments' => $message->getAttachments()
]);
L'applicazione si fida del messageId controllato dall'utente e restituisce il messaggio richiesto senza confermare che il richiedente sia autorizzato ad accedervi.
$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()
]);
L'implementazione corretta esegue un controllo di autorizzazione lato server prima di restituire qualsiasi dato di conversazione. Anche se un attaccante modifica il messageId, la richiesta viene negata a meno che l'utente non abbia il permesso di accedere a quel messaggio specifico. Ciò impedisce la divulgazione non autorizzata dei contenuti delle conversazioni e degli allegati.
| 6.3 (Medio) |