github akitaonrails/FrankMD v0.8.6

7 hours ago

v0.8.6

Released: 2026-08-15

Security-hardening release following a full application audit.

Security

  • Added optional access-token authentication with server-side sessions, token-rotation revocation, login throttling, minimum token entropy, and authenticated Bearer API mutations. Set FRANKMD_AUTH_TOKEN to a value generated with openssl rand -hex 32; trusted-LAN deployments remain open when it is unset.
  • Removed .fed from the note tree and blocked direct, encoded, and canonical-alias access through note routes, preventing configuration and credential disclosure. Edit .fed directly on disk for non-UI settings.
  • Fixed stored DOM XSS in image pickers, file finder, and table editor by making attribute interpolation quote-safe and validating image URL schemes.
  • Stripped active CSS from Markdown previews and added CSP, Referrer-Policy, importmap SRI, and CSP-compatible thumbnail fallbacks.
  • Hardened filesystem containment for new files below symlinked directories; recursive note walkers now ignore symlinks.
  • Made .fed creation, updates, and upgrades atomic with mode 0600, and rejected line/quote injection through UI configuration values.
  • Restricted image preview to configured media extensions; bounded regex searches, large-file scans, base64 decoding, and external-image fetch duration.
  • Randomized local/S3 object names and added conditional no-overwrite writes for image and media uploads.
  • Removed API-key prefix logging and raw upstream AI/image error disclosure.
  • Pinned GitHub Actions to reviewed commit SHAs, minimized workflow permissions, tracked the npm lockfile, and added npm/Vitest CI coverage.

Operations

  • Optional FRANKMD_ALLOWED_HOSTS enables Rails host authorization and origin checks for known LAN/tunnel hosts.
  • Docker Compose now forwards both security variables and no longer injects a public fallback SECRET_KEY_BASE.
  • Root .fed and .ai-jail files are excluded from Git/Docker build contexts.

Test Coverage

  • 790 Ruby tests, 1,479 JavaScript tests (2,269 total).

Don't miss a new FrankMD release

NewReleases is sending notifications on new releases.