Skip to main content

Speakr EUVDEUVD-2026-82427

| CVE-2026-54510 HIGH
Improper Authentication (CWE-287)
2026-09-17 GitHub_M
7.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Host malicious page on sibling subdomain
  2. Delivery
    Lure authenticated victim to visit
  3. Exploit
    Cross-origin GET /account?token=fake poisons CSRF exemption
  4. Execution
    Auto-submit cross-origin POST to state-changing route
  5. Persist
    Toggle admin or set SSO-only password
  6. Impact
    Full 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

speakr < 0.8.21-alpha

Affected Packages

euvd speakr fix: 0.8.21-alpha

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

Vendor (GitHub_M) PRIMARY 7.1 HIGH
AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:N
vuln.today AI 5.9 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:H/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:P/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
Low
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Sep 17, 2026 - 21:19 EUVD
CVE Published
Sep 17, 2026 - 20:20 cve.org
HIGH 7.1

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.1%
Top 96% exploitable
Prevalence
Rare
obscure personal self-hosted audio-transcription app, negligible enterprise footprint
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy