Download:

Security Reference

A single printable reference for security auditors, compliance teams, and IT leads -- with deep links into the guides where each control is configured.

ℹ️
This page is for auditors and compliance teams
Security configuration is split across guides where it is most contextually useful. This page provides a one-stop overview and links to the detailed configuration steps. If you are implementing security for the first time, follow the guides in order: Install Guide -> Security, then Setup Guide, then Admin Guide -> Security.

Security Overview

FlowSquad uses a dual-database architecture. Understanding this separation is the foundation of the security model:

DatabaseDefault NameWhat It StoresHow to Protect
Config DB flowsquad_engine.db Admin credentials, LDAP bind passwords, LLM API keys, license keys, auth configuration OS file permissions + field-level encryption for sensitive values. -> Install Guide
Product DB PostgreSQL / MySQL All product data: requirements, designs, test cases, artifacts Dedicated DB user, SSL connections, DB-level audit logging. -> Admin Guide

Security Features Always Active (No Configuration Required)

FeatureDetails
Password hashingAll local user passwords hashed with bcrypt (cost factor 12)
LDAP credential encryptionLDAP bind passwords encrypted with Fernet before storage
LLM API key encryptionAll AI provider API keys encrypted at rest in the config database
CSRF protectionAll state-changing endpoints protected against Cross-Site Request Forgery
Input validationAll API endpoints validate and sanitise inputs to prevent injection attacks
Session securitySecure session cookies with HttpOnly and SameSite attributes. Session signing key is unique per installation — derived from a randomly-generated installation_id created on first start and stored encrypted in flowsquad_engine.db.

Quick Reference Cheat Sheet

Three Security Layers at a Glance

LayerKey ActionWhere ConfiguredPriority
1. File Permissions Linux: chmod 600 flowsquad_engine.db
Windows: icacls to remove Everyone access
Install Guide -- Security Required -- every deployment
2. Field-Level Encryption Enabled automatically -- all sensitive values (API keys, passwords, tokens) encrypted before storage Install Guide -- Security Active by default -- no configuration required
3. HTTPS / TLS Nginx + Let's Encrypt (Model A) or direct TLS in Setup Wizard (Model B) Install Guide -- Security * Deployment Models Required -- all production

Configuration Database Security

All sensitive values (API keys, passwords, SAML keys, tokens) are encrypted at the field level before storage using Fernet AES-128-CBC. No whole-file database encryption is available. For at-rest protection of the entire database file, use LUKS/dm-crypt (Linux), BitLocker (Windows), or place the Docker named volume on an encrypted filesystem.

Password Storage Rules

Store Here [OK]Never Here [FAIL]
Password manager (1Password, Bitwarden, LastPass)Hardcoded in any file
Enterprise vault (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault)Committed to a Git repository
Secure credentials register (documented, access-controlled)Plain text file
OS-level secrets store (Secret Service, Windows Credential Manager)Sent via email or chat

TLS / HTTPS Configuration

All production deployments must use HTTPS. Three options are available:

OptionUse CaseConfiguration Location
Nginx reverse proxy + Let's Encrypt (recommended) Public domain, internet-accessible Linux/Docker deployment Install Guide -- Deployment Models (Model A)
Nginx reverse proxy + Commercial CA Internal or air-gapped deployments with corporate CA Install Guide -- Deployment Models (Model A)
Direct TLS in FlowSquad Standalone Windows or environments without a reverse proxy Install Guide -- Deployment Models (Model B)

TLS cipher suites configured in the Nginx template in the Install Guide achieve an A+ rating on SSL Labs. Protocols: TLSv1.2 and TLSv1.3. SSLv3, TLSv1.0, and TLSv1.1 are not permitted.


Database Encryption

What to EncryptMethodWhere Configured
Configuration database (flowsquad_engine.db) Field-level Fernet AES-128-CBC encryption for all sensitive values (API keys, passwords, tokens). No whole-file database encryption. For full at-rest encryption use filesystem-level encryption (LUKS, BitLocker, encrypted Docker volume). Install Guide -- Security
Product database in transit (PostgreSQL/MySQL) SSL/TLS: use sslmode=require (PostgreSQL) or ssl_ca=... (MySQL) in Setup Wizard connection string Setup Guide -- Step 1
Product database at rest Use your database platform's native capabilities: pgcrypto extension or filesystem encryption (PostgreSQL); InnoDB tablespace encryption (MySQL) Managed outside FlowSquad -- configure in your database server

Session Secret Key

FlowSquad signs all browser session cookies with a cryptographic secret key. A weak or shared key allows an attacker to forge valid session cookies and impersonate any user.

How It Works

ConceptDetail
installation_id A 256-bit random value generated once on first start and stored encrypted in flowsquad_engine.db. It never changes unless the database is wiped. It is not the machine ID — it is scoped purely to this installation.
Default session secret Derived automatically as SHA-256("flask-secret:" + installation_id). Unique per installation, requires no admin action, and survives app restarts, license upgrades, and server migrations (as long as the config database is carried over).
Admin override Available in Setup Wizard → Step 9 → Session Secret Key. Stores a flag (flask_secret_key_override=true) so the override is not silently replaced on the next restart. Use only when required by policy — for example, a value pinned in HashiCorp Vault or AWS Secrets Manager.
Session invalidation Any change to the secret key — whether via the admin UI or by wiping the database — immediately invalidates all active user sessions. Every logged-in user will be signed out. Plan key rotations outside active usage hours.

Migration Behaviour

The session secret travels with flowsquad_engine.db, not with the hardware. Migrating to a new server:

This is intentionally decoupled from the license machine ID. A license re-issue for a new machine has no effect on session continuity.

Hardening Recommendations


Role-Based Access Control (RBAC)

RoleScopeRecommended Count
Global Administrator Full unrestricted system access -- database, auth, LLMs, all products, license, audit logs 2-3 trusted IT staff only
Product Administrator Scoped to assigned products -- team management, LLM config, artifact deletion. No system-wide access. 1-2 per product (team lead or project owner)
Regular User Read/write on assigned products -- all 10 workflow tabs, generate and save artifacts All other team members

Full RBAC configuration guide: Admin Guide -- Administrator Roles and Admin Guide -- Security Best Practices.

LDAP / SAML Group-Based Role Assignment

Roles can be assigned automatically based on group membership -- no manual per-user assignment needed:


Audit Logs & Compliance

FlowSquad logs all security-relevant and data-mutating events automatically. Full audit log documentation: Admin Guide -- Audit Logs.

Event Categories Logged

Export Formats

Compliance Framework Coverage

FrameworkFlowSquad Controls That ApplyRetention Requirement
SOC 2 Audit logs, MFA for admins, database encryption, RBAC 12 months (configure in Admin Panel -> Settings)
HIPAA HTTPS, database encryption at rest and in transit, access logs, RBAC 6 years minimum
GDPR User data export, user deletion (right to be forgotten), audit log of data access, configurable retention Retain only as long as necessary; test user deletion capability

Security Hardening Checklist

Minimum -- Required for All Deployments

Enhanced -- Recommended for Production

Enterprise -- High-Security Environments

Incident Response

If you suspect the configuration database has been compromised:

  1. Rotate the session secret key: Setup Wizard → Step 9 → Session Secret Key → Generate a new random key. This invalidates all active sessions immediately. → Session Secret Key
  2. Immediately rotate all stored credentials: admin passwords, LDAP bind password, all LLM API keys, Jira/Confluence API tokens
  3. Rotate API keys and integration passwords through the Setup Wizard when a credential is compromised
  4. Review audit logs for the suspected time period: Admin Panel → Audit Logs → filter by date
  5. Notify affected users to change their passwords