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 accesstokens table is never cleared on password change events. The TokensClearer::clearPasswordTokens() function only removes rows from the passwordtokens 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.
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.
Flarum is open-source forum software. Prior to versions 1.8.16 and 2.0.0-rc.1, Flarum's patch for CVE-2023-27577 restricted the @import and data-uri() LESS features in the customless setting, but the same restriction was never applied to other settings registered as LESS config variables (for example themeprimarycolor and themesecondarycolor, as well as any key registered via Extend\Settings::registerLessConfigVar()). Those values are interpolated verbatim into the LESS source at compile time, allowing an authenticated administrator to craft a theme-color value that injects an arbitrary @import directive into the compiled forum.css. Because the underlying LESS parser honours @import (inline) '<path>', an attacker can read arbitrary files reachable by the PHP process (local file inclusion) or trigger outbound HTTP(S) requests (server-side request forgery). This issue has been patched in versions 1.8.16 and 2.0.0-rc.1.
Summary A session hijacking vulnerability exists when an attacker-controlled authoritative subdomain under a parent domain (e.g., subdomain.host.com) sets cookies scoped to the parent domain (.host.com). This allows session token replacement for applications hosted on sibling subdomains (e.g., community.host.com) if session tokens aren't rotated post-authentication.
Key Constraints: - Attacker must control any subdomain under the parent domain (e.g., evil.host.com or x.y.host.com). - Parent domain must not be on the Public Suffix List.
Due to non-existent session token rotation after authenticating we can theoretically reproduce the vulnerability by using browser dev tools, but due to the browser's security measures this does not seem to be exploitable as described.
---
Proof of Concept (Deno) ts Deno.serve({ port: 8000, // default hostname: 'localhost', onListen: (o) => console.log(Server started at http://${o.hostname}:${o.port}, o), }, async (req) => (console.log(req), new Response( You've been served! You came from ${req.headers.get('referer')}, { //status: 302, // would redirect user to page they came from status: 200, headers: { 'set-cookie': 'sessioncookie=mytoken; Domain=.deno.dev; Secure; HttpOnly', 'location': req.headers.get('referer') } } )) );
Attack Flow 1. Attacker Setup: Hosts server at evil.host.com. 2. Harvest Session Token: Attacker visits community.host.com to get a session token for himself to replace the victim's token with his own. 3. Victim Interaction: User clicks link to https://evil.host.com. 4. Cookie Override: Server sets cookie with Domain=.host.com and the harvested token from step 2. 5. Session Hijacking: Victim's future requests to community.host.com use attacker's token.
---
Why Reverse DNS Subdomains Fail Browsers block cookie setting for parent domains unless: 1. Authoritative Subdomain: Server must belong to a direct child domain (e.g., a.host.com, not x.y.host.com). 2. Public Suffix Exclusion: If host.com is on the Public Suffix List (e.g., like github.io), browsers block cross-subdomain cookies.
Example: - ❌ 123.cust.dynamic.host.com → Cannot set Domain=.host.com. - ✅ evil.host.com → Can set Domain=.host.com (if not on PSL).
---
Browser Security Behavior 1. Cookie Domain Validation Per RFC 6265 §5.3: Cookies can only be set for domains the server is authoritative for.
2. Public Suffix List (PSL) Domains like host.com on the PSL trigger browser protections: Subdomains of PSL-listed domains cannot set cookies for parent domains.
Verification: - Check PSL status: https://publicsuffix.org/list/
---
Impact - Account Takeover: Attacker gains authenticated session access. - Data Exposure: Email, private messages, and other personal data exposed. - Exploitable Only If: - Parent domain is not PSL-listed. - Attacker controls direct child subdomain (e.g., evil.host.com).
---
Remediation 1. Session Token Rotation: ts // After authentication: invalidateOldSession(); const newToken = generateToken(); 2. Cookie Scoping (already in place): ts // Restrict cookies to explicit subdomain: "Set-Cookie": "session=token; Domain=community.host.com; Secure; HttpOnly; SameSite=Lax"; 3. Public Suffix Registration: Add host.com to the Public Suffix List via PSL Submission.
---
Revised Vulnerability Criteria Prerequisites: - Attacker controls authoritative subdomain (e.g., evil.host.com). - Parent domain (host.com) is not PSL-listed. - Session tokens persist post-authentication.
---
References - RFC 6265: HTTP Cookie Handling - Public Suffix List
Impact The Flarum /logout route includes a redirect parameter that allows any third party to redirect users from a (trusted) domain of the Flarum installation to redirect to any link. Sample: example.com/logout?return=https://google.com. For logged-in users, the logout must be confirmed. Guests are immediately redirected. This could be used by spammers to redirect to a web address using a trusted domain of a running Flarum installation.
Some ecosystem extensions modifying the logout route have already been affected. Sample: https://discuss.flarum.org/d/22229-premium-wordpress-integration/526
Patches The vulnerability has been fixed and published as flarum/core v1.8.5. All communities running Flarum should upgrade as soon as possible to v1.8.5 using:
composer update --prefer-dist --no-dev -a -W
You can then confirm you run the latest version using:
composer show flarum/core
Workarounds Some extensions modifying the logout route can remedy this issue if their implementation is safe. In any case we recommend updating to 1.8.5.
References For any questions or comments on this vulnerability, please visit https://discuss.flarum.org/
For support questions, create a discussion at https://discuss.flarum.org/t/support.
A reminder that if you ever become aware of a security issue in Flarum, please report it to us privately by emailing security@flarum.org, and we will address it promptly.
flarum is a forum software package for building communities. In versions prior to 1.7.0 an admin account which has already been compromised by an attacker may use a vulnerability in the LESS parser which can be exploited to read sensitive files on the server through the use of path traversal techniques. An attacker can achieve this by providing an absolute path to a sensitive file in the custom LESS setting, which the LESS parser will then read. For example, an attacker could use the following code to read the contents of the /etc/passwd file on a linux machine. The scope of what files are vulnerable will depend on the permissions given to the running flarum process. The vulnerability has been addressed in version 1.7. Users should upgrade to this version to mitigate the vulnerability. Users unable to upgrade may mitigate the vulnerability by ensuring that their admin accounts are secured with strong passwords and follow other best practices for account security. Additionally, users can limit the exposure of sensitive files on the server by implementing appropriate file permissions and access controls at the operating system level.
Flarum is an open source discussion platform. Flarum's page title system allowed for page titles to be converted into HTML DOM nodes when pages were rendered. The change was made after v1.5 and was not noticed. This allowed an attacker to inject malicious HTML markup using a discussion title input, either by creating a new discussion or renaming one. The XSS attack occurs after a visitor opens the relevant discussion page. All communities running Flarum from v1.5.0 to v1.6.1 are impacted. The vulnerability has been fixed and published as flarum/core v1.6.2. All communities running Flarum from v1.5.0 to v1.6.1 have to upgrade as soon as possible to v1.6.2. There are no known workarounds for this issue.