CVE-2026-39924
MediumCVSS 6.8Summary
Flarum before 1.8.16 contains an improper session invalidation vulnerability that allows attackers who hold a valid session token to retain full account access after a victim changes their password, because the access_tokens table is never cleared on password change events. The TokensClearer::clearPasswordTokens() function only removes rows from the password_tokens table while leaving all active session cookies and API bearer tokens intact, including long-lived RememberAccessToken entries, and administrator-forced password resets via the user update endpoint are equally ineffective at revoking attacker-held sessions.
Risk Assessment
An attacker who obtains a session token can retain access to the account even after the victim changes their password, potentially leading to prolonged unauthorized access and data compromise.
Recommendation
Update Flarum to version 1.8.16 or later, which includes the fix.
Other vulnerabilities in Flarum
See all- CVE-2026-39923High
Flarum before 1.8.16 contains a password reset token expiry bypass vulnerability that allows unauthenticated attackers to reuse expired password reset tokens by submitting them directly to the reset processing endpoint. The SavePasswordController::handle() method calls PasswordToken::findOrFail() without performing any expiry validation, allowing attackers to bypass the 24-hour token lifetime enforced only during form rendering and change any account's password to gain an authenticated session.
- CVE-2023-40033High
Flarum, an open source forum software, is vulnerable to a Blind Server-Side Request Forgery (SSRF) attack and file disclosure on the server, even with a basic user account. By exploiting the vulnerability, an attacker can manipulate the application to execute unintended actions.
Original NVD description (English source)
Flarum before 1.8.16 contains an improper session invalidation vulnerability that allows attackers who hold a valid session token to retain full account access after a victim changes their password, because the access_tokens table is never cleared on password change events. The TokensClearer::clearPasswordTokens() function only removes rows from the password_tokens table while leaving all active session cookies and API bearer tokens intact, including long-lived RememberAccessToken entries, and administrator-forced password resets via the user update endpoint are equally ineffective at revoking attacker-held sessions.

