Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessHost malicious page on sibling subdomain
-
DeliveryLure authenticated victim to visit
-
ExploitCross-origin GET /account?token=fake poisons CSRF exemption
-
ExecutionAuto-submit cross-origin POST to state-changing route
-
PersistToggle admin or set SSO-only password
-
ImpactFull account takeover / privilege escalation
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication mechanism validation
MITRE ATT&CK
2 techniques across 2 tactics: Defense Evasion, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires ALL of: (1) a victim with an active authenticated Speakr session; (2) the victim to visit attacker-controlled content hosted on a SIBLING SUBDOMAIN of the Speakr instance (UI:R); (3) the deployment's session cookie to be domain-scoped so it is sent cross-subdomain ('the documented cookie conditions'); and (4) the vulnerable Speakr version < 0.8.21-alpha. The attacker needs no valid token or credentials - the is_token_authenticated() check trusts any present token, including request.args.get('token'), without hashing, DB lookup, or validity check. The GET-based CSRF-exemption poison deliberately avoids CORS preflight. The SSO-bypass leg is further gated to accounts whose current_user.password is empty (SSO-only users). Limiting factors: the required sibling-subdomain foothold and domain-scoped cookie configuration are non-trivial and not universal, and victim interaction is mandatory. |
| Impact | Moderate-but-conditional risk. The vendor CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:N = 7.1) frames this as a network, low-complexity, unauthenticated attack requiring only victim interaction, with high integrity impact. That headline understates the real gating: the description explicitly requires attacker-controlled content on a SIBLING SUBDOMAIN of the target 'under the documented cookie conditions' (i.e. domain-scoped session cookies), plus a victim with an active Speakr session who visits the attacker page. That is a meaningful precondition, so I assess AC:H rather than AC:L, lowering my score to roughly 6.3. No EPSS score, KEV entry, or public POC was supplied - per the precision rules this is 'no public exploit identified at time of analysis,' NOT active exploitation. The confidentiality impact is genuinely low (C:L), but integrity is high (I:H) because the chain reaches admin_toggle_admin for privilege escalation and change_password for full SSO-only account takeover, both confirmed by the vendor security advisory and the patch commit. Net: a real, well-documented vulnerability with a clear fix, but the subdomain/cookie/interaction gating and a niche self-hosted product make this a lower operational priority than the 7.1 alone implies. Two independent root causes are confirmed by the commit diff: a process-global CSRF-exemption poison and an unconditional current-password bypass. |
| Exploit ScenarioDerived | An attacker who controls content on a sibling subdomain of a Speakr instance lures a logged-in user to a malicious page; a cross-origin GET to /account?token=anything trips the buggy is_token_authenticated() check, which trusts the unvalidated query token and permanently CSRF-exempts the /account view for the worker's lifetime. The page then auto-submits a cross-origin POST that changes the victim's profile, custom prompts, or administrative status, and - because change_password skips current-password verification on SSO-only accounts - sets a local password to bypass SSO and log in directly. No public POC is referenced, though the vendor advisory and patch commit describe the full chain. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 17, 2026
Speakr, a self-hosted audio transcription web app, is affected before 0.8.21-alpha by a chained authentication bypass in which a bogus token supplied as a query parameter permanently disables CSRF protection for a targeted view, letting a remote, unauthenticated attacker who lures a logged-in victim to attacker-controlled content on a sibling subdomain perform state-changing actions as that victim - editing profile data, custom prompts, transcription settings and preferences, toggling administrative status through admin_toggle_admin, and, for SSO-only accounts, silently setting a local password that bypasses SSO. No valid token or credentials are needed because the token check trusts any present token without hashing or database validation, but exploitation is conditional: it requires a victim with an active session, mandatory user interaction, a sibling-subdomain foothold, and a domain-scoped session cookie, which is why the independent assessment rates it as moderate-but-conditional risk under CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:H/A:N. There is no public exploit identified at time of analysis; the vendor has released a fix in 0.8.21-alpha.
RemediationAI
Vendor-released patch: 0.8.21-alpha - upgrade Speakr to 0.8.21-alpha or later (release archive: https://github.com/murtaza-nasir/speakr/releases/tag/v0.8.21-alpha), which contains commit 70e193e47b664bedf274f62aea14220f2a85a459 and is documented in advisory GHSA-x4q4-3ww4-h329. Until upgrading, the highest-value compensating control is to remove the sibling-subdomain attack surface: configure the session cookie as host-only (no Domain= attribute covering the parent domain) so it is never sent from an attacker-controlled subdomain - the trade-off is that legitimate cross-subdomain single-sign-on stops working, and users must re-authenticate on each host. Where that is impossible, ensure no untrusted or user-generated content can be served from any subdomain that shares the cookie scope, since the chain depends on a sibling-subdomain foothold. Operators can also front the application with a reverse proxy that strips or rejects query-string parameters named token on state-changing endpoints and blocks cross-origin GETs to sensitive routes such as /account, admin_toggle_admin and change_password; this is a blunt rule that may break legitimate integrations that pass tokens in URLs. Audit SSO-only accounts for any locally set password and force a password reset for them, since the change_password leg let a session set credentials without proving knowledge of the existing password; this is detective rather than preventive and does not stop the underlying CSRF bypass. Because the vulnerable token check treats any non-empty token as authenticated, treat any deployment that accepted ?token= on browser-facing routes as potentially compromised and review profile, prompt, transcription-setting and admin-status changes for unauthorized modification.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause class is CWE-287 (Improper Authentication) and it manifests in two independent code paths in the Flask application. First, the removed before_request hook csrf_exempt_for_api_tokens() in src/app.py called csrf.exempt(view_func) from inside a request handler; Flask-WTF stores exemptions in a process-global set, so one request mutated server-wide state for the lifetime of the worker rather than for the current request. Because the exemption is attached to the view function and not to an HTTP method, a cross-origin GET (a CORS "simple request") to a route such as /account carrying ?token=anything could poison CSRF state so that a later state-changing POST to the same view succeeded without a CSRF token and without triggering a preflight. Second, is_token_authenticated() in src/utils/token_auth.py called extract_token_from_request(), which accepted request.args.get('token') and treated any present value as authenticated - no hashing, no database query, no validity check. The secondary leg lives in change_password, which skipped the current-password verification whenever current_user.password was empty, so a session obtained through the CSRF chain could set a local password on an SSO-only account and then log in directly, defeating SSO. The fix in 0.8.21-alpha sets WTF_CSRF_CHECK_DEFAULT to False and replaces the mutating hook with a per-request csrf_token_aware_check() that honours registration-time blueprint/view exemptions, accepts API tokens only from the Authorization, X-API-Token and API-Token headers (never the query string, precisely to defeat the preflight-free simple-request vector), validates them against the database via load_user_from_token_headers_only(), and otherwise falls through to csrf.protect(). The same commit routes SSO-only users to the email-gated password-reset flow instead of letting change_password set a password unguarded.
Know when Speakr gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:N
Network CSRF exploited via the victim's session so PR:N/UI:R; AC:H because it needs an attacker-controlled sibling subdomain plus domain-scoped cookies; I:H (admin toggle/account takeover), C:L, A:N.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
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.
Technical POC Analysis
Note on evidence: the supplied material is the GitHub advisory (GHSA-x4q4-3ww4-h329) plus the CVE description.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Speakr, a self-hosted audio transcription platform, is affected by a high-severity vulnerability that could allow a remote attacker to perform actions as a logged-in user, including modifying settings, toggling administrative status, and bypassing SSO by setting a local password. No public exploit identified at time of analysis, but exploitation requires user interaction and a sibling-subdomain foothold, making it a targeted risk for organizations with active Speakr sessions and multiple subdomains. Leadership should prioritize patching to 0.8.21-alpha to prevent unauthorized changes and potential privilege escalation.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-82427
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB