CVE-2026-54510: CWE-287: Improper Authentication in murtaza-nasir speakr
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.
AI Analysis
Technical Summary
Speakr versions before 0.8.21-alpha have a flaw in the csrf_exempt_for_api_tokens() hook that permanently exempts certain views from CSRF protection when a token is present in the request, without validating the token's authenticity. The is_token_authenticated() function accepts any token from the request, including those in query parameters, without hashing or database verification. This enables a network attacker to disable CSRF protection for targeted views, allowing cross-origin requests to perform state-changing actions such as modifying profile data and administrative status. The change_password route also lacks current-password verification if the password is empty, enabling SSO bypass by setting a local password. The vulnerability is resolved in version 0.8.21-alpha.
Potential Impact
An attacker can bypass CSRF protections and perform unauthorized state-changing actions on behalf of users, including modifying profile data, transcription settings, preferences, and administrative status. The vulnerability also allows bypassing SSO authentication by setting a local password on accounts without one. This elevates the risk of account takeover and unauthorized administrative access. There is no indication of active exploitation in the wild.
Mitigation Recommendations
Upgrade Speakr to version 0.8.21-alpha or later, where this vulnerability is fixed. No other mitigations are indicated or required as the fix addresses the root cause.
CVE-2026-54510: CWE-287: Improper Authentication in murtaza-nasir speakr
Description
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.
CVSS v3.1
Score 7.1high
Affected software
murtaza-nasir
speakr
pkg:github/murtaza-nasir/speakrRun on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
Speakr versions before 0.8.21-alpha have a flaw in the csrf_exempt_for_api_tokens() hook that permanently exempts certain views from CSRF protection when a token is present in the request, without validating the token's authenticity. The is_token_authenticated() function accepts any token from the request, including those in query parameters, without hashing or database verification. This enables a network attacker to disable CSRF protection for targeted views, allowing cross-origin requests to perform state-changing actions such as modifying profile data and administrative status. The change_password route also lacks current-password verification if the password is empty, enabling SSO bypass by setting a local password. The vulnerability is resolved in version 0.8.21-alpha.
Potential Impact
An attacker can bypass CSRF protections and perform unauthorized state-changing actions on behalf of users, including modifying profile data, transcription settings, preferences, and administrative status. The vulnerability also allows bypassing SSO authentication by setting a local password on accounts without one. This elevates the risk of account takeover and unauthorized administrative access. There is no indication of active exploitation in the wild.
Mitigation Recommendations
Upgrade Speakr to version 0.8.21-alpha or later, where this vulnerability is fixed. No other mitigations are indicated or required as the fix addresses the root cause.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- GitHub_M
- Date Reserved
- 2026-06-15T18:01:15.513Z
- Cvss Version
- 3.1
- State
- PUBLISHED
Threat ID: 6aac51e755bf5e2cf5e0cf1d
Added to database: 09/17/2026, 20:47:35 UTC
Last enriched: 09/17/2026, 21:02:42 UTC
Last updated: 09/17/2026, 22:12:02 UTC
Views: 3
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.