
CVE-2026-8237 は、Concrete CMS 9.5.0 以前における認可チェックの欠如に起因する、安全でない直接オブジェクト参照 (IDOR) の脆弱性です。この欠陥は /ccm/frontend/conversations/message_detail エンドポイントに存在し、ユーザーが指定したメッセージ識別子のみに基づいて会話メッセージの全内容を返します。アプリケーションは要求者が指定されたメッセージにアクセスする権限を有するかどうかを検証しないため、認証されていない攻撃者がメッセージ ID を列挙し、非公開に保たれるべき会話コンテンツを取得できます。それらのメッセージに関連するファイル添付のダウンロード URL も開示される可能性があります。この問題は Concrete CMS 9.5.1 で修正されています。
| プロパティ | 値 |
|---|---|
| 製品 | Concrete CMS |
| 影響を受けるバージョン | 9.5.0 以前 |
| 修正版 | 9.5.1 |
| 影響を受けるエンドポイント | /ccm/frontend/conversations/message_detail |
このエンドポイントは、現在のユーザーがその特定のメッセージにアクセスする権限を持っているかどうかを検証せずに、クライアントが制御するメッセージ ID を使用して会話メッセージを取得します。
脆弱なワークフローは概念的には次のとおりです:
ユーザーが messageId を指定
↓
サーバーがメッセージを取得
↓
認可チェックなし
↓
メッセージの全内容を返す
所有権やアクセス権限が一切検証されないため、攻撃者は messageId の値を変更して他のユーザーの会話メッセージにアクセスできます。
正規のリクエストがメッセージ 150 を取得するとします:
GET /ccm/frontend/conversations/message_detail?messageId=150
攻撃者は単純に識別子を変更します:
GET /ccm/frontend/conversations/message_detail?messageId=151
サーバーがアクセスを拒否せずにメッセージ 151 の内容を返した場合、攻撃者は ID をインクリメントし続けて、非公開の会話とそれに関連する添付ファイルを列挙できます。
この脆弱性が悪用されると、攻撃者は以下を行う可能性があります:
この脆弱性は主に機密性に影響を及ぼします。機密情報が認可なしに開示される可能性があるためです。
| メトリクス | スコア |
|---|---|
| CVSS v3.1 (NVD) | 5.3 (中) |
| CVSS v4.0 (Concrete CMS) | 6.3 (中) |
注記: ベンダーは実際の脆弱なソースコードを公開していません。次の例は脆弱性のパターンを説明するためのものだけです。
$messageId = $_GET['messageId'];
$message = $conversationRepository->find($messageId);
// Missing authorization check
return response()->json([
'message' => $message->getContent(),
'attachments' => $message->getAttachments()
]);
アプリケーションはユーザーが制御する messageId を信頼し、要求者がそのメッセージにアクセスする権限を有することを確認せずに、要求されたメッセージを返します。
$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()
]);
修正後の実装は、会話データを返す前にサーバー側で認可チェックを実行します。攻撃者が messageId を変更しても、ユーザーがその特定のメッセージにアクセスする権限を持っていない限り、リクエストは拒否されます。これにより、会話コンテンツと添付ファイルの不正な開示を防ぐことができます。