The vulnerability, CVE-2026-7887, allowed inactive users in Concrete CMS to obtain valid OAuth 2.0 API tokens because the system did not properly check the account status during authentication. This issue affected both the Authorization Code and Password grant types.
-
Authorization Code Grant: When a user authenticates to authorize a client application, the Concrete\Controller\SinglePage\Login::do_login method is called. The original implementation failed to check if the user's account was active (uIsActive=0) after verifying their password. The patch rectifies this by adding a check with the $user->isActive() method. If the user is inactive, they are immediately logged out, preventing them from authorizing the client and stopping the issuance of an authorization code.
-
Password Grant: For clients using the direct password grant, the Concrete\Core\Api\OAuth\Authorizer::validateUser method is responsible for validating credentials. The original code only checked the username and password. The patch introduces a check to ensure the user is registered and active before an access token is issued.
By patching both do_login and validateUser, the vulnerability is addressed comprehensively, ensuring that inactive users can no longer authenticate or obtain API tokens through either of the primary OAuth 2.0 flows.