CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-F66Q-9RF6-8795

GHSA-f66q-9rf6-8795: WebAuthn Re-authentication Freshness Bypass in Flask-Security-Too

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 8, 2026·5 min read·15 visits

Executive Summary (TL;DR)

An authenticated attacker can bypass session freshness gates by submitting their own WebAuthn cryptographic signature inside a victim's stale session, gaining unauthorized access to administrative or sensitive functions.

An authentication freshness bypass vulnerability exists in the WebAuthn re-authentication path of Flask-Security-Too versions 5.8.0 and 5.8.1. The flaw allows an authenticated attacker to elevate the freshness status of a victim session using their own WebAuthn credential, bypassing re-authentication constraints.

Vulnerability Overview

The security package Flask-Security-Too implements WebAuthn support to facilitate passwordless and multi-factor authentication. To secure highly sensitive operations, the library utilizes session freshness validation via the @auth_required(within=...) decorator. When a user attempts to access a protected resource, the server checks if the session was authenticated within a specified time window.

If the session is stale, the application enforces re-authentication before the request can proceed. Users can satisfy this requirement using their registered WebAuthn credentials. The vulnerability resides in this re-authentication workflow and permits an attacker to falsify the freshness status of a session.

The attack surface requires the attacker to be an authenticated user on the same application instance. This vulnerability is classified under CWE-305, allowing an attacker to utilize WebAuthn as an alternate channel to bypass re-authentication requirements.

Root Cause Analysis

The flaw is located in the webauthn_verify_response view within flask_security/webauthn.py. When a re-authentication flow is initiated, the application issues a challenge and expects a cryptographic WebAuthn assertion in response. This response is validated using the WebAuthnSigninResponseForm.

During validation, the form parses the credential identifier from the client's assertion and retrieves the associated database user. However, the backend validation logic fails to check whether this retrieved user matches the active current_user of the session. The signature validation is processed successfully as long as the credential belongs to any valid user in the database.

Because of this validation oversight, once the signature is verified, the server executes session["fs_paa"] = time.time(). This line unconditionally updates the security freshness timestamp on the active session. Consequently, the victim's session is designated as fresh based on the cryptographic proof of the attacker's WebAuthn key.

Code Analysis

The vulnerable code segment demonstrates the absence of identity binding verification. In flask_security/webauthn.py at commit 5c44c76e33a20b67d02115e26d2da4bab18c094e, the application processes the signature validation as follows:

@auth_required(lambda: cv("API_ENABLED_METHODS"))
def webauthn_verify_response(token: str) -> ResponseValue:
    form = t.cast(
        WebAuthnSigninResponseForm, build_form_from_request("wan_signin_response_form")
    )
    # ... verification steps ...
    if form.validate_on_submit():
        # Code updates last use data
        form.cred.lastuse_datetime = _security.datetime_factory()
        _datastore.put(form.cred)
 
        # Unconditional update of session freshness
        session["fs_paa"] = time.time()

The WebAuthnSigninResponseForm.validate method resolves the user object strictly from the credential ID query. It executes self.user = _datastore.find_user_from_webauthn(self.cred). It never compares this self.user instance against the active session user, allowing cross-user re-authentication assertions to succeed.

This behavior contrasts with the patched OAuth flow implemented in a previous release. The OAuth re-authentication path explicitly checks if user and user.email == current_user.email before updating the session freshness parameter. The lack of an equivalent check on the WebAuthn code path leaves the freshness mechanism exposed.

Exploitation

An exploitation sequence requires the attacker to possess an active account on the deployment and a registered WebAuthn credential. The attacker must also have access to the victim's session, which has entered a stale freshness state. This scenario often occurs in shared workstation environments or when session tokens are partially exfiltrated.

The attacker initiates the re-authentication sequence within the victim's session by making a request to the /wan-verify endpoint. The server responds with a WebAuthn challenge wrapped in a temporary state token. Because these state tokens lack user binding, they are highly portable.

Instead of utilizing the victim's credentials, the attacker signs this challenge using their own WebAuthn key. The attacker then submits the assertion back to the endpoint. The backend validates the assertion against the attacker's public key, marks the form as valid, and advances the session freshness timer on the victim's active session.

Impact Assessment

The impact of this security freshness bypass is significant, as it completely subverts the isolation between authentication strengths. Freshness gates are critical defense-in-depth mechanisms designed to protect highly sensitive operations from unauthorized modification. These operations include password resets, multi-factor authentication enrollment, and email modifications.

By leveraging this bypass, an attacker can modify the security parameters of the victim's account. This allows the attacker to register a permanent authenticating credential under their control or change the primary email address. This results in complete and persistent account takeover.

The vulnerability does not allow direct initial access but acts as a privilege escalation and security bypass tool. It elevates a standard, stale session to a fresh administrative-grade session. No user interaction from the victim is required once the session is active.

Remediation & Mitigation

Remediation requires upgrading the flask-security-too package to version 5.8.2 or later. This patch introduces a verification step to ensure the WebAuthn assertion belongs to the active session owner. The security check compares the user object retrieved from the credential with the session's active user identity.

If upgrading immediately is not feasible, deployers should disable WebAuthn re-authentication. This can be accomplished by removing WebAuthn from the allowed verification options in the configuration. Adjust the SECURITY_WAN_ALLOW_AS_VERIFY parameter to exclude WebAuthn verification.

In addition, implementing robust monitoring of the /wan-verify endpoint can help identify anomalous behavior. Security teams should monitor for instances where the authenticated session user differs from the user owner of the WebAuthn credential utilized during re-authentication.

Fix Analysis (1)

Technical Appendix

CVSS Score
5.3/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Affected Systems

Flask-Security-Too

Affected Versions Detail

Product
Affected Versions
Fixed Version
flask-security-too
pallets-eco
>= 5.8.0, <= 5.8.15.8.2
AttributeDetail
CWE IDCWE-305
Attack VectorNetwork
CVSS Score5.3 (Medium)
Exploit StatusProof-of-Concept Available
ImpactRe-authentication Freshness Bypass
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1556Modify Authentication Process
Credential Access
T1539Steal Web Session Cookie
Credential Access
CWE-305
Authentication Bypass by Alternate Channel

The application processes a WebAuthn signature without validating that the authenticated identity matches the current session user.

References & Sources

  • [1]GitHub Security Advisory GHSA-f66q-9rf6-8795

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•39 minutes ago•CVE-2026-72802
6.9

CVE-2026-72802: Sensitive Information Disclosure via Administrative Asset Resolvers in SiYuan Note

SiYuan Note versions prior to v3.7.4 contain an information disclosure vulnerability in the `/api/asset/resolveAssetPath` endpoint. This endpoint returns absolute backend filesystem paths unmodified to CheckAuth-only requests. Low-privileged users or unauthenticated readers under publish mode can exploit this to leak the local directory layout, operating system username, and overall host deployment structure.

Amit Schendel
Amit Schendel
0 views•6 min read
•about 2 hours ago•CVE-2026-72801
8.7

CVE-2026-72801: Information Disclosure of Cryptographic Key Material in SiYuan

An access control vulnerability in the SiYuan personal knowledge management platform before version v3.7.4 exposes notebook encryption parameters to unauthenticated remote attackers. When the platform is configured in Publish Mode, specific API endpoints fail to enforce authorization checks. This access failure leaks key-derivation materials, password verifiers, and wrapped database keys to anonymous network clients.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 4 hours ago•CVE-2026-72800
5.8

CVE-2026-72800: Missing Authorization in SiYuan Personal Knowledge Management System

A security vulnerability in the SiYuan local-first personal knowledge management system allows unauthenticated remote attackers to bypass logical boundary controls in publish (read-only) mode. By interacting with endpoints that lack proper publish-access validation, an attacker can disclose the application's internal database schemas and harvest block IDs across both public and private notebooks. This metadata leakage compromises the confidentiality of restricted documents and provides foundational information for targeted extraction.

Alon Barad
Alon Barad
2 views•5 min read
•about 5 hours ago•CVE-2026-72803
6.9

CVE-2026-72803: Information Disclosure via Missing Authorization in SiYuan API

An information disclosure vulnerability exists in the SiYuan personal knowledge management system versions prior to v3.7.4. The application fails to enforce publish-access filters on block attribute retrieval endpoints. Consequently, unauthenticated remote attackers can bypass document-level protection rules (such as password protection or disabled-publish flags) to retrieve sensitive block-level attributes, including aliases, memos, block names, and custom metadata fields, by querying the API using guessed or known block IDs.

Alon Barad
Alon Barad
4 views•7 min read
•about 6 hours ago•GHSA-7J72-F6WG-CXW6
8.6

CVE-2026-68584: Authentication Bypass via Auxiliary Content Endpoints in SiYuan

An authentication bypass vulnerability (classified as CWE-288) exists in the publish-mode component of SiYuan, a Go-based note-taking application. This security flaw allows unauthenticated remote attackers to bypass password-protected note boundaries by leveraging auxiliary block endpoints that fail to enforce document access checks. Attackers can exploit this issue by first harvesting document metadata via a public search endpoint and subsequently fetching full rendered document contents using vulnerable block endpoints. This technical analysis explores the root cause, exploitation methodology, and remediation path.

Alon Barad
Alon Barad
2 views•7 min read
•about 7 hours ago•CVE-2026-77465
7.5

CVE-2026-77465: Uncontrolled Recursion in toml-node Deserializer Leads to Denial of Service

An uncontrolled recursion vulnerability (CWE-674) in the toml-node NPM package (published as toml) prior to version 4.2.0 allows unauthenticated remote attackers to trigger process-wide Denial of Service (DoS) crashes. By submitting TOML payloads with deep bracket or brace nesting, attackers exhaust the V8 runtime stack limit.

Amit Schendel
Amit Schendel
6 views•6 min read