
Ausführlicher IDOR-Bericht für Concrete CMS, der den message_detail-Endpunkt, die fehlende Autorisierung als Grundursache, Angriffsszenarien, Auswirkungen und die Behebung abdeckt.
CVE-2026-8237 ist eine Insecure Direct Object Reference (IDOR)-Schwachstelle, die durch fehlende Autorisierungsprüfungen in Concrete CMS 9.5.0 und früher verursacht wird. Der Fehler befindet sich im Endpunkt /ccm/frontend/conversations/message_detail, der den vollständigen Inhalt von Konversationsnachrichten ausschließlich auf Grundlage einer vom Benutzer bereitgestellten Nachrichten-ID zurückgibt. Da die Anwendung nicht überprüft, ob der Anfragende autorisiert ist, auf die angegebene Nachricht zuzugreifen, kann ein nicht authentifizierter Angreifer Nachrichten-IDs enumerieren und Konversationsinhalte abrufen, die privat bleiben sollten. Download-URLs für Dateianhänge, die mit diesen Nachrichten verknüpft sind, können ebenfalls offengelegt werden. Das Problem ist in Concrete CMS 9.5.1 behoben.
| Eigenschaft | Wert |
|---|---|
| Produkt | Concrete CMS |
| Betroffene Versionen | 9.5.0 und früher |
| Behobene Version | 9.5.1 |
| Betroffener Endpunkt | /ccm/frontend/conversations/message_detail |
Der Endpunkt ruft eine Konversationsnachricht mithilfe einer clientgesteuerten Nachrichten-ID ab, ohne zu validieren, ob der aktuelle Benutzer die Berechtigung hat, auf diese bestimmte Nachricht zuzugreifen.
Der anfällige Ablauf ist konzeptionell:
Benutzer liefert messageId
↓
Server ruft Nachricht ab
↓
Keine Autorisierungsprüfung
↓
Gibt vollständigen Nachrichteninhalt zurück
Da Besitz- oder Zugriffsberechtigungen nie überprüft werden, können Angreifer den Wert von messageId ändern, um auf Konversationsnachrichten anderer Benutzer zuzugreifen.
Angenommen, eine legitime Anfrage ruft Nachricht 150 ab:
GET /ccm/frontend/conversations/message_detail?messageId=150
Ein Angreifer ändert einfach die Kennung:
GET /ccm/frontend/conversations/message_detail?messageId=151
Wenn der Server mit den Inhalten von Nachricht 151 antwortet, anstatt den Zugriff zu verweigern, kann der Angreifer die IDs weiter erhöhen, um private Konversationen und die zugehörigen Anhänge zu enumerieren.
Eine erfolgreiche Ausnutzung kann es einem Angreifer ermöglichen:
Die Schwachstelle beeinträchtigt hauptsächlich die Vertraulichkeit, da vertrauliche Informationen ohne Autorisierung offengelegt werden können.
| Metrik | Bewertung |
|---|---|
| CVSS v3.1 (NVD) | 5.3 (Mittel) |
| CVSS v4.0 (Concrete CMS) |
Hinweis: Der Hersteller hat den tatsächlichen anfälligen Quellcode nicht veröffentlicht. Das folgende Beispiel veranschaulicht lediglich das Schwachstellenmuster.
$messageId = $_GET['messageId'];
$message = $conversationRepository->find($messageId);
// Missing authorization check
return response()->json([
'message' => $message->getContent(),
'attachments' => $message->getAttachments()
]);
Die Anwendung vertraut der benutzergesteuerten messageId und gibt die angeforderte Nachricht zurück, ohne zu bestätigen, dass der Anfragende autorisiert ist, darauf zuzugreifen.
$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()
]);
Die korrigierte Implementierung führt eine serverseitige Autorisierungsprüfung durch, bevor Konversationsdaten zurückgegeben werden. Selbst wenn ein Angreifer die messageId ändert, wird die Anfrage verweigert, sofern der Benutzer nicht die Berechtigung hat, auf diese bestimmte Nachricht zuzugreifen. Dies verhindert die unbefugte Offenlegung von Konversationsinhalten und Anhängen.
| 6.3 (Mittel) |