Low severityNVD Advisory· Published Jan 2, 2024· Updated Jun 17, 2025
Lack of restriction to manage group names for freshly demoted guests
CVE-2023-50333
Description
Mattermost fails to update the permissions of the current session for a user who was just demoted to guest, allowing freshly demoted guests to change group names.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
github.com/mattermost/mattermost/server/v8Go | < 8.1.7 | 8.1.7 |
Affected products
1- Range: 0
Patches
161dd452fb2fcMM-54774 - update session roles when promote/demote guests (#25156) (#25505)
3 files changed · +66 −4
server/channels/app/platform/session.go+7 −2 modified@@ -223,8 +223,13 @@ func (ps *PlatformService) ExtendSessionExpiry(session *model.Session, newExpiry return nil } -func (ps *PlatformService) UpdateSessionsIsGuest(userID string, isGuest bool) error { - sessions, err := ps.GetSessions(userID) +func (ps *PlatformService) UpdateSessionsIsGuest(user *model.User, isGuest bool) error { + sessions, err := ps.GetSessions(user.Id) + if err != nil { + return err + } + + _, err = ps.Store.Session().UpdateRoles(user.Id, user.GetRawRoles()) if err != nil { return err }
server/channels/app/platform/session_test.go+57 −0 modified@@ -4,6 +4,7 @@ package platform import ( + "context" "testing" "time" @@ -132,3 +133,59 @@ func TestOAuthRevokeAccessToken(t *testing.T) { err = th.Service.RevokeAccessToken(accessData.Token) require.NoError(t, err) } + +func TestUpdateSessionsIsGuest(t *testing.T) { + th := Setup(t) + defer th.TearDown() + + t.Run("Test session is demoted", func(t *testing.T) { + user := th.CreateUserOrGuest(false) + + session := &model.Session{} + session.CreateAt = model.GetMillis() + session.UserId = user.Id + session.Token = model.NewId() + session.Roles = "fake_role" + th.Service.SetSessionExpireInHours(session, 24) + + session, _ = th.Service.CreateSession(session) + + demotedUser, err := th.Service.Store.User().DemoteUserToGuest(user.Id) + require.NoError(t, err) + require.Equal(t, model.SystemGuestRoleId, demotedUser.Roles) + + err = th.Service.UpdateSessionsIsGuest(demotedUser, true) + require.NoError(t, err) + + session, err = th.Service.GetSession(session.Id) + require.NoError(t, err) + require.Equal(t, model.SystemGuestRoleId, session.Roles) + require.Equal(t, "true", session.Props[model.SessionPropIsGuest]) + }) + + t.Run("Test session is promoted", func(t *testing.T) { + user := th.CreateUserOrGuest(true) + + session := &model.Session{} + session.CreateAt = model.GetMillis() + session.UserId = user.Id + session.Token = model.NewId() + session.Roles = "fake_role" + th.Service.SetSessionExpireInHours(session, 24) + + session, _ = th.Service.CreateSession(session) + + err := th.Service.Store.User().PromoteGuestToUser(user.Id) + require.NoError(t, err) + + promotedUser, err := th.Service.Store.User().Get(context.Background(), user.Id) + require.NoError(t, err) + err = th.Service.UpdateSessionsIsGuest(promotedUser, false) + require.NoError(t, err) + + session, err = th.Service.GetSession(session.Id) + require.NoError(t, err) + require.Equal(t, model.SystemUserRoleId, session.Roles) + require.Equal(t, "false", session.Props[model.SessionPropIsGuest]) + }) +}
server/channels/app/user.go+2 −2 modified@@ -2299,7 +2299,7 @@ func (a *App) PromoteGuestToUser(c *request.Context, user *model.User, requestor c.Logger().Warn("Failed to get user on promote guest to user", mlog.Err(err)) } else { a.sendUpdatedUserEvent(*promotedUser) - if uErr := a.ch.srv.platform.UpdateSessionsIsGuest(promotedUser.Id, promotedUser.IsGuest()); uErr != nil { + if uErr := a.ch.srv.platform.UpdateSessionsIsGuest(promotedUser, promotedUser.IsGuest()); uErr != nil { c.Logger().Warn("Unable to update user sessions", mlog.String("user_id", promotedUser.Id), mlog.Err(uErr)) } } @@ -2344,7 +2344,7 @@ func (a *App) DemoteUserToGuest(c request.CTX, user *model.User) *model.AppError } a.sendUpdatedUserEvent(*demotedUser) - if uErr := a.ch.srv.platform.UpdateSessionsIsGuest(demotedUser.Id, demotedUser.IsGuest()); uErr != nil { + if uErr := a.ch.srv.platform.UpdateSessionsIsGuest(demotedUser, demotedUser.IsGuest()); uErr != nil { c.Logger().Warn("Unable to update user sessions", mlog.String("user_id", demotedUser.Id), mlog.Err(uErr)) }
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
4News mentions
0No linked articles in our index yet.