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_TOKENto a value generated withopenssl rand -hex 32; trusted-LAN deployments remain open when it is unset. - Removed
.fedfrom the note tree and blocked direct, encoded, and canonical-alias access through note routes, preventing configuration and credential disclosure. Edit.feddirectly 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
.fedcreation, updates, and upgrades atomic with mode0600, 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_HOSTSenables 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
.fedand.ai-jailfiles are excluded from Git/Docker build contexts.
Test Coverage
- 790 Ruby tests, 1,479 JavaScript tests (2,269 total).