Skip to content

speakr

v0.10.1-alpha Security

This release includes 4 security fixes for security teams reviewing exposed deployments.

Published 12d Productivity & Wikis
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 4 known CVEs

Affected surfaces

auth

ReleasePort's take

Moderate signal
editorial:auto 12d

The release eliminates the insecure default secret key and enforces strong random generation on first start. It also hardens password‑reset flows with single‑use tokens.

Why it matters: Affects session cookies, password‑reset tokens; apps must ensure SECRET_KEY is set or accept auto‑generated strong keys, and handle single‑use reset links to prevent replay attacks.

Summary

AI summary

Updates Session and token security, Access control, and derived across a mixed release.

Changes in this release

Security Critical

Insecure built-in secret key is no longer used; app refuses default and generates a strong random key on first start if SECRET_KEY unset.

Insecure built-in secret key is no longer used; app refuses default and generates a strong random key on first start if SECRET_KEY unset.

Source: llm_adapter@2026-07-15

Confidence: high

Security High

Password-reset links are now single-use; used or superseded tokens are immediately rejected.

Password-reset links are now single-use; used or superseded tokens are immediately rejected.

Source: llm_adapter@2026-07-15

Confidence: high

Security Medium

Security headers (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions‑Policy, CSP, HSTS) are now emitted by default on every response.

Security headers (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions‑Policy, CSP, HSTS) are now emitted by default on every response.

Source: llm_adapter@2026-07-15

Confidence: high

Security Medium

Markdown‑rendered content is sanitized with DOMPurify before display, preventing HTML injection in chat and admin texts.

Markdown‑rendered content is sanitized with DOMPurify before display, preventing HTML injection in chat and admin texts.

Source: llm_adapter@2026-07-15

Confidence: high

Security Medium

Logout operation is now a POST action, making it CSRF‑protected.

Logout operation is now a POST action, making it CSRF‑protected.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Medium

Admin user list now limits visibility to only members of groups the group administrator manages, preventing over‑sharing.

Admin user list now limits visibility to only members of groups the group administrator manages, preventing over‑sharing.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Medium

Bulk tagging of recordings now enforces that the actor is a member of the target group’s membership.

Bulk tagging of recordings now enforces that the actor is a member of the target group’s membership.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

New optional environment variables (`SECURITY_HEADERS_ENABLED`, `CONTENT_SECURITY_POLICY`, `HSTS_HEADER`, `SECRET_KEY_FILE`) provide fine‑grained control over security headers, CSP, HSTS, and secret‑key storage location.

New optional environment variables (`SECURITY_HEADERS_ENABLED`, `CONTENT_SECURITY_POLICY`, `HSTS_HEADER`, `SECRET_KEY_FILE`) provide fine‑grained control over security headers, CSP, HSTS, and secret‑key storage location.

Source: llm_adapter@2026-07-15

Confidence: high

Dependency Medium

Third‑party CDN dependencies (Chart.js, DOMPurify) are now bundled locally instead of loaded from external CDNs.

Third‑party CDN dependencies (Chart.js, DOMPurify) are now bundled locally instead of loaded from external CDNs.

Source: llm_adapter@2026-07-15

Confidence: high

Full changelog

Release Notes - v0.10.1-alpha

A security-hardening release. Upgrading is recommended for all deployments. It is backwards compatible with the v0.10.x line and involves no database migrations. There are no functional changes to recording, transcription, or summarization.

Session and token security

  • The insecure built-in secret key is no longer used. Previous versions fell back to a hardcoded, publicly known key when SECRET_KEY was unset. That key signs session cookies and password-reset tokens, so any deployment that never set SECRET_KEY could have its cookies and reset links forged. The application now refuses that default and, when SECRET_KEY is unset, generates a strong random key on first start and persists it under the instance directory (captured by a normal data-volume backup). Setting SECRET_KEY explicitly is still recommended for multi-host deployments and key rotation; see the installation guide. The key does not encrypt stored data, so upgrading only requires users to log in again once.
  • Password-reset links are single-use. Reset tokens are now bound to server-side state, so a used or superseded link is rejected immediately instead of remaining valid for its full lifetime. Changing the password also invalidates any outstanding reset link.

Response headers and content security

  • Security headers are set by the application. X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, a Content-Security-Policy, and (over HTTPS) Strict-Transport-Security are now emitted on every response, so a deployment without a hardening reverse proxy is still protected. These can be tuned or disabled with SECURITY_HEADERS_ENABLED, CONTENT_SECURITY_POLICY, and HSTS_HEADER.
  • Markdown-rendered content is sanitized. Chat answers, Inquire answers, and admin banner/disclaimer text are sanitized with DOMPurify before display, so HTML embedded in model output or settings cannot execute in the browser.
  • Third-party CDN dependencies removed. Chart.js (admin dashboard) and DOMPurify are now bundled locally with the other vendored assets instead of being loaded from a third-party CDN at runtime.

Access control

  • The admin user list no longer over-shares. A group administrator who is not a site administrator now sees only the members of the groups they administer, rather than the entire user directory.
  • Bulk tagging enforces group membership. Applying a group tag to multiple recordings now requires membership in that tag's group, matching the single-tag endpoints.
  • Logout is CSRF-protected. Signing out is now a POST action, so a cross-site request can no longer force a logout.

Configuration

New optional environment variables, all with safe defaults:

| Variable | Default | Purpose |
|---|---|---|
| SECURITY_HEADERS_ENABLED | true | Set false if your reverse proxy already sets all security headers. |
| CONTENT_SECURITY_POLICY | built-in policy | Override the entire Content-Security-Policy. |
| HSTS_HEADER | max-age=63072000; includeSubDomains | Tune or disable (empty string) the HSTS header. |
| SECRET_KEY_FILE | (derived) | Path to the persisted auto-generated key, if you want to relocate it. |

Compatibility

Backwards compatible with the v0.10.x line; no database migrations. On first start after upgrade, deployments that never set SECRET_KEY will generate and persist one automatically, which logs existing users out once. To avoid the one-time re-login and to control the key across hosts, set SECRET_KEY explicitly before upgrading.

Breaking Changes

  • Built‑in insecure default `SECRET_KEY` removed; application now refuses to start without a secret key or auto‑generates one on first run, causing existing sessions to become invalid.

Security Fixes

  • Removal of insecure built‑in secret key prevents forged session cookies and password‑reset tokens; new `SECRET_KEY_FILE` handling ensures secure storage.
  • Password‑reset token reuse vulnerability fixed by making links single‑use.
  • Admin user list now respects group administrator scope, preventing over‑exposure of all users.
  • Logout endpoint now CSRF‑protected via POST requirement.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track speakr

Get notified when new releases ship.

Sign up free

About speakr

Speakr is a personal, self-hosted web application designed for transcribing audio recordings

All releases →

Related context

Earlier breaking changes

  • v0.10.0-alpha Unauthenticated API requests now return a JSON 401 instead of a 302 redirect.

Beta — feedback welcome: [email protected]