VYPR
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.

PackageAffected versionsPatched versions
github.com/mattermost/mattermost-serverGo
>= 9.5.0, < 9.5.39.5.3
github.com/mattermost/mattermost-serverGo
>= 8.1.0, < 8.1.128.1.12

Affected products

1

Patches

2
f0872dd4e4ba

MM-56536 Do not update team members scheme roles if user is guest (#25957) (#26448)

https://github.com/mattermost/mattermostMattermost BuildMar 12, 2024via ghsa
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."
    
1e3497e0595b

MM-56536 Do not update team members scheme roles if user is guest (#25957) (#26447)

https://github.com/mattermost/mattermostMattermost BuildMar 12, 2024via ghsa
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

News mentions

0

No linked articles in our index yet.