Low severityNVD Advisory· Published Apr 26, 2024· Updated Aug 1, 2024
CVE-2024-4195
CVE-2024-4195
Description
Mattermost versions 9.6.0, 9.5.x before 9.5.3, and 8.1.x before 8.1.12 fail to fully validate role changes, which allows an attacker authenticated as a team admin to promote guests to team admins via crafted HTTP requests.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
github.com/mattermost/mattermost-serverGo | >= 9.5.0, < 9.5.3 | 9.5.3 |
github.com/mattermost/mattermost-serverGo | >= 8.1.0, < 8.1.12 | 8.1.12 |
Affected products
1- Range: 9.6.0
Patches
2f0872dd4e4baMM-56536 Do not update team members scheme roles if user is guest (#25957) (#26448)
3 files changed · +24 −4
server/channels/api4/team_test.go+4 −0 modified@@ -3003,6 +3003,10 @@ func TestUpdateTeamMemberSchemeRoles(t *testing.T) { require.Error(t, err) CheckNotFoundStatus(t, resp) + resp, err = SystemAdminClient.UpdateTeamMemberSchemeRoles(context.Background(), th.BasicTeam.Id, th.BasicUser.Id, s4) + require.Error(t, err) // user is a guest, cannot be set as member or admin + CheckBadRequestStatus(t, resp) + resp, err = SystemAdminClient.UpdateTeamMemberSchemeRoles(context.Background(), "ASDF", th.BasicUser.Id, s4) require.Error(t, err) CheckBadRequestStatus(t, resp)
server/channels/app/team.go+12 −4 modified@@ -510,14 +510,22 @@ func (a *App) UpdateTeamMemberSchemeRoles(c request.CTX, teamID string, userID s return nil, err } - member.SchemeAdmin = isSchemeAdmin - member.SchemeUser = isSchemeUser - member.SchemeGuest = isSchemeGuest + if member.SchemeGuest { + return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest.app_error", nil, "", http.StatusBadRequest) + } - if member.SchemeUser && member.SchemeGuest { + if isSchemeUser && isSchemeGuest { return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest_and_user.app_error", nil, "", http.StatusBadRequest) } + if isSchemeAdmin && isSchemeGuest { + return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest_and_admin.app_error", nil, "", http.StatusBadRequest) + } + + member.SchemeAdmin = isSchemeAdmin + member.SchemeUser = isSchemeUser + member.SchemeGuest = isSchemeGuest + // If the migration is not completed, we also need to check the default team_admin/team_user roles are not present in the roles field. if err = a.IsPhase2MigrationCompleted(); err != nil { member.ExplicitRoles = RemoveRoles([]string{model.TeamGuestRoleId, model.TeamUserRoleId, model.TeamAdminRoleId}, member.ExplicitRoles)
server/i18n/en.json+8 −0 modified@@ -3122,6 +3122,14 @@ "id": "api.team.update_restricted_domains.mismatch.app_error", "translation": "Restricting team to {{ .Domain }} is not allowed by the system config. Please contact your system administrator." }, + { + "id": "api.team.update_team_member_roles.guest.app_error", + "translation": "Invalid team member update: A guest cannot be made team member or team admin, please promote as a user first." + }, + { + "id": "api.team.update_team_member_roles.guest_and_admin.app_error", + "translation": "Invalid team member update: A user must cannot be set as a guest and admin at the same time." + }, { "id": "api.team.update_team_member_roles.guest_and_user.app_error", "translation": "Invalid team member update: A user must be a guest or a user but not both."
1e3497e0595bMM-56536 Do not update team members scheme roles if user is guest (#25957) (#26447)
3 files changed · +24 −4
server/channels/api4/team_test.go+4 −0 modified@@ -3007,6 +3007,10 @@ func TestUpdateTeamMemberSchemeRoles(t *testing.T) { require.Error(t, err) CheckNotFoundStatus(t, resp) + resp, err = SystemAdminClient.UpdateTeamMemberSchemeRoles(context.Background(), th.BasicTeam.Id, th.BasicUser.Id, s4) + require.Error(t, err) // user is a guest, cannot be set as member or admin + CheckBadRequestStatus(t, resp) + resp, err = SystemAdminClient.UpdateTeamMemberSchemeRoles(context.Background(), "ASDF", th.BasicUser.Id, s4) require.Error(t, err) CheckBadRequestStatus(t, resp)
server/channels/app/team.go+12 −4 modified@@ -511,14 +511,22 @@ func (a *App) UpdateTeamMemberSchemeRoles(teamID string, userID string, isScheme return nil, err } - member.SchemeAdmin = isSchemeAdmin - member.SchemeUser = isSchemeUser - member.SchemeGuest = isSchemeGuest + if member.SchemeGuest { + return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest.app_error", nil, "", http.StatusBadRequest) + } - if member.SchemeUser && member.SchemeGuest { + if isSchemeUser && isSchemeGuest { return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest_and_user.app_error", nil, "", http.StatusBadRequest) } + if isSchemeAdmin && isSchemeGuest { + return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest_and_admin.app_error", nil, "", http.StatusBadRequest) + } + + member.SchemeAdmin = isSchemeAdmin + member.SchemeUser = isSchemeUser + member.SchemeGuest = isSchemeGuest + // If the migration is not completed, we also need to check the default team_admin/team_user roles are not present in the roles field. if err = a.IsPhase2MigrationCompleted(); err != nil { member.ExplicitRoles = RemoveRoles([]string{model.TeamGuestRoleId, model.TeamUserRoleId, model.TeamAdminRoleId}, member.ExplicitRoles)
server/i18n/en.json+8 −0 modified@@ -3027,6 +3027,14 @@ "id": "api.team.update_restricted_domains.mismatch.app_error", "translation": "Restricting team to {{ .Domain }} is not allowed by the system config. Please contact your system administrator." }, + { + "id": "api.team.update_team_member_roles.guest.app_error", + "translation": "Invalid team member update: A guest cannot be made team member or team admin, please promote as a user first." + }, + { + "id": "api.team.update_team_member_roles.guest_and_admin.app_error", + "translation": "Invalid team member update: A user must cannot be set as a guest and admin at the same time." + }, { "id": "api.team.update_team_member_roles.guest_and_user.app_error", "translation": "Invalid team member update: A user must be a guest or a user but not both."
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/advisories/GHSA-5fh7-7mw7-mmx5ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2024-4195ghsaADVISORY
- github.com/mattermost/mattermost/commit/1e3497e0595bb4f9908c94dd9d4685d48556b7e8ghsaWEB
- github.com/mattermost/mattermost/commit/f0872dd4e4ba34f061aa6982a71c7c29532aac2eghsaWEB
- mattermost.com/security-updatesghsaWEB
News mentions
0No linked articles in our index yet.