Sep 25, 2026·6 min read·33 visits
Unauthenticated remote account takeover via unverified identity provider email trust violation (CVE-2026-92161).
A critical logical vulnerability in the FriendsOfFlarum OAuth (fof/oauth) extension allows unauthenticated remote attackers to perform complete account takeover, including administrative profiles. This vulnerability is caused by a failure to verify the email verification status returned by third-party identity providers such as Discord before asserting that the email is trusted and matching it to existing local accounts.
The FriendsOfFlarum OAuth (fof/oauth) extension enables third-party identity provider authentication for Flarum forums. Under typical integration settings, the extension manages user login and registration flows via standard OAuth 2.0 protocols. When a user authenticates via an external provider such as Discord, GitLab, Google, or LinkedIn, the extension resolves the user's registered email address and returns it to the Flarum core application.
The core vulnerability, tracked as CVE-2026-92161, represents an identity provider trust violation under CWE-345. Prior to the patched versions, the extension's Discord integration and several other provider classes blindly trusted the returned email address without validating whether the identity provider had actually verified the user's ownership of that address. Consequently, an attacker can exploit this lack of verification to perform unauthorized account takeover of any local account on a target forum that matches the victim's email address.
This trust boundary breakdown bypasses standard registration verification procedures, converting what should be a suggested email address registration flow into an active session authorization. The flaw operates at the application logic layer and does not require complex cryptographic attacks or network-level interceptions.
The root cause lies in the architectural trust assumptions made when interacting with upstream Identity Providers (IdPs). Within Flarum Core, two methods exist for passing resolved emails from an authentication extension: provideTrustedEmail($email) and suggestEmail($email). Calling provideTrustedEmail($email) asserts that the identity provider has authenticated the user and validated the email address, prompting Flarum Core to auto-link the incoming session to any matching local account.
Conversely, calling suggestEmail($email) only auto-populates the registration form and requires the user to perform standard verification steps before the account is active or linked. Prior to the implementation of the patch, fof/oauth invoked provideTrustedEmail($email) unconditionally for multiple providers, including Discord, GitLab, Google, and LinkedIn.
In the case of Discord, the service permits users to register accounts with arbitrary email addresses and bypass email verification completely if they verify a mobile phone number instead. In such instances, Discord's API response for /users/@me returns the unverified email address alongside a boolean parameter 'verified' set to false. Because the vulnerable versions of fof/oauth failed to inspect this 'verified' flag, they passed the unverified email to Flarum Core via provideTrustedEmail($email), leading to unauthorized session association.
The vulnerability is resolved by implementing conditional validation based on the verification attributes returned in the identity provider payload. Below is a comparative analysis of the changes introduced in the patch for the primary affected providers.
In src/Providers/Discord.php, the previous implementation immediately trusted any retrieved email address. The patched code extracts the payload and verifies the value of the 'verified' key.
// Before Patch: Unconditional trust
$registration
->provideTrustedEmail($email)
->suggestUsername($user->getUsername() ?: '')
->setPayload($user->toArray());
// After Patch: Verification check
$payload = $user->toArray();
if ($payload['verified'] ?? false) {
$registration->provideTrustedEmail($email);
} else {
$registration->suggestEmail($email);
}
$registration
->suggestUsername($user->getUsername() ?: '')
->setPayload($payload);Similar modifications were implemented across other providers. For GitLab (src/Providers/GitLab.php), the code now checks for the presence of the 'confirmed_at' field in the payload. If the field is not empty, the email is marked as trusted; otherwise, the email is treated as suggested. For Google (src/Providers/Google.php), the isEmailTrustworthy() helper method on the user resource owner object is evaluated. For LinkedIn (src/Providers/LinkedIn.php), the 'email_verified' attribute is verified prior to calling provideTrustedEmail().
To execute an exploit against an affected Flarum instance, an attacker must first determine the email address associated with the target victim's account. This reconnaissance step may utilize publicly available information on the forum or forum metadata. Additionally, the target forum must have the fof/oauth extension enabled with Discord or another affected provider configured as an active authentication method.
The attacker then registers a new Discord account using the victim's exact email address. When prompted for verification, the attacker bypasses email validation by linking a mobile phone number to the Discord account. This satisfies Discord's verification requirements for active accounts while leaving the registered email address in an unverified status.
Finally, the attacker visits the target Flarum forum and initiates the "Login with Discord" flow. When redirected to Discord, the attacker authorizes the application. Discord issues an OAuth token and transmits the payload containing the unverified email and verified: false to the Flarum site. The vulnerable extension processes the payload, fails to validate the verified flag, and passes the email to Flarum Core as a trusted address, completing the passwordless login and account takeover.
Successful exploitation of CVE-2026-92161 results in complete, unauthenticated account takeover. An attacker can compromise administrative profiles, gaining full access to sensitive user data, system configuration panels, and restricted forum sections. Because the exploit occurs at the authentication layer, it bypasses any local password requirements, multi-factor authentication (MFA) mechanisms configured on the Flarum instance, and rate-limiting protections.
The vulnerability receives a CVSS v3.1 base score of 9.8, reflecting its critical severity. The attack complexity is low, requiring no specialized privileges or user interaction from the victim. The impact on confidentiality, integrity, and availability is rated high, as the attacker gains full control over the compromised account and can modify system state or lock legitimate users out.
No active exploitation in the wild or weaponized proof-of-concept scripts have been reported. However, the simplicity of the exploitation steps and the widespread use of Discord integration on community forums make rapid patch adoption essential.
Remediation of CVE-2026-92161 requires updating the fof/oauth Composer package to the designated secure versions. For environments running on Flarum 1.x, administrators must upgrade the package to version 1.7.4. For environments utilizing the Flarum 2.x beta branch, the package must be upgraded to version 2.0.0-beta.4.
If immediate package updates are not feasible due to deployment freezes or compatibility testing constraints, administrators must disable the affected OAuth providers (Discord, GitLab, Google, and LinkedIn) in the extension configuration panel. This action removes the vulnerable authentication pathways and forces users to authenticate via secure, verified mechanisms.
System administrators should also audit login logs for occurrences of new OAuth linkages that map to high-privilege administrative accounts. Security teams must ensure that any custom OAuth providers developed internally follow the same validation patterns implemented in the patched files, verifying the email authenticity before delegating trust.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H| Attribute | Detail |
|---|---|
| CWE ID | CWE-345 |
| Attack Vector | Network (AV:N) |
| CVSS Score | 9.8 |
| EPSS Score | 0.00 |
| Impact | Critical (Confidentiality, Integrity, Availability) |
| Exploit Status | None (PoC concepts documented) |
| CISA KEV Status | Not Listed |
The product does not verify, or incorrectly verifies, the authenticity of data, allowing attackers to introduce untrusted data that is treated as trusted.
CVE-2026-63470 (GHSA-h667-4jj2-cgv4) is a code injection vulnerability (CWE-94) in fastapi-code-generator prior to version 0.8.1. The tool generates FastAPI route handlers by directly interpolating the OpenAPI Operation.summary field into triple-double-quoted Python docstrings without escaping embedded triple quotes or backslashes. An attacker who supplies or modifies an OpenAPI specification can break out of the docstring literal and inject arbitrary Python expressions into the generated route handler body, resulting in remote code execution when the affected HTTP endpoint is called.
CVE-2026-16454 is an object-level authorization bypass vulnerability (CWE-284, CWE-862) in Eclipse hawkBit versions 1.0.3 and prior. The flaw exists within the Direct Device Integration (DDI) REST controller (hawkbit-ddi-resource), where endpoints responsible for enumerating software module metadata and serving firmware binaries fail to verify whether the requested software module is assigned to the authenticated device. Consequently, any device with valid credentials (such as a TargetToken or GatewayToken) can enumerate software module identifiers and download arbitrary firmware artifacts across the entire tenant namespace.
CVE-2026-62284 (GHSA-5w5g-j6hw-6p8f) is a code injection and server-side request forgery vulnerability in the console-proxy component of the OSAC Operator. The RemoteConfigResolver parses Kubernetes Secrets containing kubeconfig files via clientcmd.RESTConfigFromKubeConfig without sanitizing execution-related fields. An attacker with RBAC permissions to create or modify labeled Secrets in monitored namespaces can supply a malicious exec credential plugin, resulting in arbitrary command execution within the console-proxy pod.
CVE-2026-62361 (GHSA-xgjr-7j9q-2h4r) is an authenticated SQL injection and authorization bypass vulnerability in listmonk, an open-source, self-hosted newsletter and mailing list manager written in Go. In versions prior to 6.2.0, the subscriber export endpoint (GET /api/subscribers/export) directly interpolates user-supplied SQL filter expressions into a PostgreSQL query without invoking the table allowlist validation function (validateQueryTables). Consequently, authenticated users possessing the subscribers:sql_query and subscribers:get_all permissions can bypass relational access controls, execute arbitrary subqueries against restricted tables such as users and settings, and modify database state via writable Common Table Expressions (CTEs).
CVE-2026-28385 (GHSA-3gq2-x4qg-p4g6) is a Server-Side Request Forgery (SSRF) vulnerability in Canonical LXD versions 4.12 through 6.9. An authenticated user possessing the can_create_images entitlement can force the LXD daemon to execute arbitrary outbound HTTP and HTTPS requests via the /1.0/images API endpoint. Due to the absence of egress destination validation, an attacker can probe host loopback services, RFC 1918 private network segments, and cloud Instance Metadata Services (IMDS) from the network position of the privileged LXD daemon.
Canonical LXD and LXC Incus contain an arbitrary file write vulnerability (CWE-73 / CWE-59) in the `/1.0/instances/<name>/exec` REST API endpoint. When an instance is unpacked from an image archive, top-level symbolic links are extracted directly onto the host filesystem within the instance storage directory. If a crafted image includes a symbolic link named `exec-output` pointing to an arbitrary host path, invoking the execution endpoint with `record-output: true` causes the privileged host daemon to follow the symlink and write command output files directly to the target host directory. An authenticated attacker with permissions to import images and execute commands can exploit this flaw to write controlled content to sensitive host directories such as `/etc/cron.d`, resulting in arbitrary code execution on the host as `root`.