---
id: CVE-2026-39923
title: >-
  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
summary: >-
  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
  SavePasswordC…
severity: high
cvss: 8.1
cvssVector: 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H'
cwe:
  - CWE-324
published: '2026-08-05'
updated: '2026-09-09'
sourceUpdated: '2026-09-09T20:35:08.537'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-39923'
references:
  - url: >-
      https://github.com/flarum/framework/commit/2803058d0f9dc38252326070b46d4484fe5a857d
    label: disclosure@vulncheck.com
  - url: 'https://github.com/flarum/framework/pull/4545'
    label: disclosure@vulncheck.com
  - url: 'https://github.com/flarum/framework/releases/tag/v1.8.16'
    label: disclosure@vulncheck.com
  - url: >-
      https://www.vulncheck.com/advisories/flarum-password-reset-token-expiry-bypass-via-post-reset
    label: disclosure@vulncheck.com
tags:
  - nvd
epss: 0.00428
epssPercentile: 0.34424
ingestedAt: '2026-09-09T21:22:45.523Z'
---

## Overview

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.

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
