Listen to this Post
Mattermost fails to validate user permissions when accessing group data via API endpoints. The vulnerability occurs due to improper permission checks in the `getGroup` and `listGroups` API functions, allowing unauthorized users to retrieve sensitive group metadata. Attackers can craft HTTP requests to `/api/v4/groups` or `/api/v4/groups/{group_id}` without proper role validation, exposing group names, member counts, and visibility settings. The flaw stems from missing `requireUserPermissions()` middleware in affected versions (10.5.0–10.5.2, 9.11.0–9.11.11). Exploitation requires a valid low-privilege session but no group-admin rights.
DailyCVE Form:
Platform: Mattermost
Version: 10.5.0–10.5.2
Vulnerability: Group permission bypass
Severity: Moderate
Date: 2025-05-15
What Undercode Say:
Exploit:
curl -X GET "http://target.com/api/v4/groups" -H "Authorization: Bearer LOW_PRIV_TOKEN"
Detection:
grep -r "requireUserPermissions" /path/to/mattermost/server/api4/group.go
Mitigation:
1. Upgrade to patched versions (10.5.3/9.11.12).
2. Apply runtime patch:
// Add to group.go
func requireGroupAdmin(c Context) {
if !c.App.SessionHasPermissionToGroup(c.AppContext.Session(), c.Params.GroupId, model.PermissionManageGroup) {
c.SetPermissionError(model.PermissionManageGroup)
}
}
Log Analysis:
SELECT FROM audit_logs WHERE endpoint LIKE '%/api/v4/groups%' AND status_code = 200;
WAF Rule:
location ~ /api/v4/groups {
if ($http_authorization !~ "admin|system_admin") {
return 403;
}
}
Impact Assessment:
Check group exposure
import requests
headers = {"Authorization": "Bearer USER_TOKEN"}
r = requests.get("http://mattermost/api/v4/groups", headers=headers)
assert "groups" not in r.json(), "Vulnerable"
Sources:
Reported By: github.com
Extra Source Hub:
Undercode

