Impact
A user, or anyone in possession of a user's session token, can create additional sessions for that user through the session upgrade endpoint by presenting a session token that is already revocable. The endpoint is meant to convert legacy session tokens into revocable sessions, but it creates a new session for any valid session token without enforcing the create class-level permission of the _Session class. The created sessions get a new expiration date, can be bound to an installation ID chosen by the caller, and are not revoked when the original session is logged out. Only deployments that restrict the create class-level permission of the _Session class are affected.
Patches
The session upgrade endpoint now upgrades only legacy session tokens. For a session token that is already revocable, it returns the existing session instead of creating a new one.
Workarounds
Class-level permissions and Cloud Code triggers cannot prevent this. If clients do not need to upgrade legacy session tokens, block client requests to the session upgrade endpoint before they reach Parse Server, which are REST API POST requests to the /upgradeToRevocableSession path in any letter case and with or without a trailing slash, including as part of batch requests. Clients that call this endpoint with an already revocable session token, such as the JavaScript SDK when enabling revocable sessions, then receive an error.
References
Impact
A user, or anyone in possession of a user's session token, can create additional sessions for that user through the session upgrade endpoint by presenting a session token that is already revocable. The endpoint is meant to convert legacy session tokens into revocable sessions, but it creates a new session for any valid session token without enforcing the create class-level permission of the
_Sessionclass. The created sessions get a new expiration date, can be bound to an installation ID chosen by the caller, and are not revoked when the original session is logged out. Only deployments that restrict the create class-level permission of the_Sessionclass are affected.Patches
The session upgrade endpoint now upgrades only legacy session tokens. For a session token that is already revocable, it returns the existing session instead of creating a new one.
Workarounds
Class-level permissions and Cloud Code triggers cannot prevent this. If clients do not need to upgrade legacy session tokens, block client requests to the session upgrade endpoint before they reach Parse Server, which are REST API
POSTrequests to the/upgradeToRevocableSessionpath in any letter case and with or without a trailing slash, including as part of batch requests. Clients that call this endpoint with an already revocable session token, such as the JavaScript SDK when enabling revocable sessions, then receive an error.References