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

PackageAffected versionsPatched versions
github.com/mattermost/mattermost/server/v8Go
< 8.1.78.1.7

Affected products

1

Patches

1
61dd452fb2fc

MM-54774 - update session roles when promote/demote guests (#25156) (#25505)

https://github.com/mattermost/mattermostScott BishelNov 21, 2023via ghsa
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

4

News mentions

0

No linked articles in our index yet.