CVE-2026-54510

Source
https://cve.org/CVERecord?id=CVE-2026-54510
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-54510.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-54510
Aliases
  • GHSA-x4q4-3ww4-h329
Published
2026-09-17T20:20:29Z
Modified
2026-09-19T03:46:30Z
Severity
  • 7.1 (High) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:N CVSS Calculator
Summary
Speakr: CSRF bypass via unauthenticated API token parameter in csrf_exempt_for_api_tokens hook
Details

Speakr is a personal, self-hosted web application designed for transcribing audio recordings. Prior to 0.8.21-alpha, the csrf_exempt_for_api_tokens() before_request hook in src/app.py calls csrf.exempt(view_func), permanently adding the selected view to Flask-WTF's process-global exemption set. The is_token_authenticated() function in src/utils/token_auth.py calls extract_token_from_request() and treats any present token, including request.args.get('token'), as authenticated without hashing the token, querying the database, or checking validity. A network-reachable attacker can therefore send a false token to disable CSRF protection for the targeted view for the worker lifetime. Because the exemption applies to the view function across HTTP methods, a cross-origin GET to /account with a query token can poison CSRF state for a later state-changing POST without triggering CORS preflight. This browser sequence requires attacker-controlled content on a sibling subdomain under the documented cookie conditions. The bypass can modify profile data, custom prompts, transcription settings, preferences, and administrative status through routes such as admin_toggle_admin. The change_password route also skips current-password verification when current_user.password is empty, allowing the chain to set a local password on an SSO-only account and bypass SSO. This issue is fixed in version 0.8.21-alpha.

Database specific
{
    "cna_assigner": "GitHub_M",
    "cwe_ids": [
        "CWE-287",
        "CWE-352"
    ],
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54510.json"
}
References

Affected packages

Git / github.com/murtaza-nasir/speakr

Affected ranges

Type
GIT
Repo
https://github.com/murtaza-nasir/speakr
Events
Introduced
0 Unknown introduced commit / All previous commits are affected
Fixed
Fixed
Database specific
Show details
{
    "extracted_events": [
        {
            "introduced": "0"
        },
        {
            "fixed": "0.8.21-alpha"
        }
    ],
    "source": [
        "AFFECTED_FIELD",
        "REFERENCES"
    ]
}

Affected versions

v0.*
v0.2.0-alpha
v0.2.1-alpha
v0.3.1-alpha
v0.4.1-alpha
v0.4.2-alpha
v0.5.0-alpha
v0.5.1-alpha
v0.5.10-alpha
v0.5.5-alpha
v0.5.6
v0.5.7-alpha
v0.5.8-alpha
v0.5.9-alpha
v0.6.0-alpha
v0.6.1-alpha
v0.6.2-alpha
v0.6.3-alpha
v0.6.4-alpha
v0.6.5-alpha
v0.7.0-alpha
v0.7.1-alpha
v0.7.2-alpha
v0.8.0-alpha
v0.8.1-alpha
v0.8.10-alpha
v0.8.11-alpha
v0.8.12-alpha
v0.8.13-alpha
v0.8.14-alpha
v0.8.15-alpha
v0.8.16-alpha
v0.8.17-alpha
v0.8.18-alpha
v0.8.19-alpha
v0.8.2-alpha
v0.8.20-alpha
v0.8.3-alpha
v0.8.4
v0.8.4-alpha
v0.8.5-alpha
v0.8.5.1-alpha
v0.8.6-alpha
v0.8.6.1-alpha
v0.8.7-alpha
v0.8.7.2
v0.8.8-alpha
v0.8.9-alpha

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-54510.json"