Lovable Hardening Guide
Security and privacy hardening for Lovable workspaces and the apps they publish — SSO/SCIM, workspace access governance, AI-agent and MCP surface controls, Lovable Cloud data protection (RLS, secrets, storage), security scanning gates, AI training opt-out, and audit logging.
Plans Covered: Free, Pro, Business, Enterprise (settings are heavily plan-gated; each control notes its gate)
Overview
Lovable is an AI app builder: prompts in, published full-stack applications out, with a managed backend (Lovable Cloud, built on Supabase’s open-source foundation) or a connected Supabase project behind them. That makes its security surface unusual in two ways.
First, the workspace is an AI-agent governance problem. Prompts, uploaded files, and generated code flow through Lovable’s AI gateway to third-party model providers; MCP clients and connectors can reach into the workspace; and on Free/Pro plans, customer content is used for AI model training by default starting September 9, 2026 — with only a per-member opt-out. Second, the published apps are a data-exposure problem the platform formally leaves to you: CVE-2025-48757 (CVSS 9.3) documented Lovable-generated apps whose missing Row-Level Security let unauthenticated attackers read and write arbitrary tables, and Lovable’s response placed responsibility for data protection on each customer. The controls exist — RLS review, security scans, a publish-blocking gate — but most ship disabled.
There is no admin API and no CLI: apart from SCIM provisioning (Enterprise), every control in this guide is console-only, and that honest constraint shapes the automation story throughout.
Intended Audience
- Security engineers governing Lovable adoption in an organization
- Workspace owners/admins on any plan
- GRC teams assessing AI app-builder (“vibe coding”) platforms
- Builders publishing apps that hold real user data
How to Use This Guide
- L1 (Crawl): Essential controls for every workspace
- L2 (Walk): Enhanced controls for security-sensitive teams
- L3 (Run): Strictest controls for regulated environments
- L4 (Fly): Maximum-assurance controls (rare)
Scope
Covers the Lovable workspace (identity, membership, project access, publishing, integrations, AI/MCP surfaces, privacy, audit) and the security configuration of apps built on Lovable Cloud. For projects connected to your own Supabase project, authentication settings live in the Supabase dashboard — this guide covers the Lovable side and hands off explicitly. Does not cover general Supabase hardening, prompt-engineering technique, or Lovable’s internal infrastructure.
Table of Contents
- Identity & Authentication
- Workspace Access Governance
- AI Agent & Integration Surfaces
- Data Protection
- Published App Security
- Privacy & AI Training
- Monitoring & Audit
- Compliance Quick Reference
1. Identity & Authentication
1.1 Verify Your Domain (Foundation for SSO, SCIM, and Provisioning)
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 5.6, 6.7 |
| NIST 800-53 | IA-2, AC-2 |
Description
Domain verification (DNS TXT record) is the prerequisite for every serious identity control in Lovable: SSO configuration, Enforce SSO, SCIM (Enterprise), verified-email auto-provisioning, and branded app URLs. Verify your domain deliberately — and understand its two sharp edges: verification is a one-time check that is never re-validated, and another workspace can verify the same domain.
Rationale
Why This Matters:
- Without a verified domain, the workspace cannot enforce SSO — leaving membership on invite links and per-account passwords
- First verification auto-activates “Verified email sign-up” with editor-level default access — anyone with an email on your domain can join as an editor unless you review and downgrade that default
- Because the same domain can be verified by multiple workspaces, domain verification alone is not proof of organizational control — govern which workspace is canonical
Attack Prevented: Unauthorized workspace joins via unmanaged sign-up paths; shadow workspaces claiming your domain
Prerequisites
- Business or Enterprise plan; workspace admin/owner; access to your DNS zone
ClickOps Implementation
- Settings → Access → Identity → Verified domains → add your domain
- Create the DNS TXT record: Host
@, value = the fulllovable_verification=token shown; wait for propagation (up to 72h), then click Verify domain - Immediately review the auto-activated Verified email sign-up setting and downgrade its default role (or disable it) to match your joiner policy
Time to Complete: ~30 minutes plus DNS propagation
Validation & Testing
- The domain shows Verified under Settings → Access → Identity
- Test that a new same-domain sign-up receives the role you intended (not an unreviewed editor default)
Expected result: Domain verified, sign-up defaults deliberate, SSO/SCIM unlocked.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | IA-2, AC-2 | Identification; account management |
| ISO 27001:2022 | 5.16 | Identity management |
1.2 Enforce SSO with Short Sessions
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 6.7, 12.5 |
| NIST 800-53 | IA-2, IA-8, AC-12 |
Description
Configure OIDC (Lovable’s recommended protocol) or SAML 2.0 against Okta, Auth0, Microsoft Entra ID, or any compliant IdP, then enable Enforce SSO so every workspace member must authenticate through your IdP. Set the session duration to the shortest workable window (options: 8h, 24h, 48h, 7 days).
Rationale
Why This Matters:
- Lovable has no workspace-wide 2FA enforcement (2FA is per-account, see 1.4) — Enforce SSO with IdP-side MFA is the only way to guarantee MFA for all members
- When SSO is enforced, external collaborators and invite links become unavailable — collapsing the unmanaged-access surface in one move
- JIT provisioning with IdP group→role mappings (plus optional Group restriction) keeps role assignment in your directory, not in ad-hoc invites
Attack Prevented: Credential-stuffing and phished-password account takeover; membership sprawl outside the IdP
Prerequisites
- Business or Enterprise plan; verified domain (1.1); workspace owner/admin
ClickOps Implementation
- Settings → Access → Identity (lovable.dev/settings/identity) → configure OIDC (recommended) or SAML 2.0 with your IdP
- Map IdP groups to workspace roles; set the JIT default role to the least privilege that works (viewer)
- Enable Enforce SSO; set Session duration to 8h (L2+) or 24h (L1)
Time to Complete: ~1–2 hours
Validation & Testing
- A member signing in with email/password is redirected to the IdP
- Confirm invite links and external collaborators are unavailable while enforcement is on
Expected result: All members authenticate via the IdP (with its MFA), sessions expire on your schedule.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | IA-2(1), IA-8, AC-12 | MFA via federation; session termination |
| ISO 27001:2022 | 5.17, 8.5 | Authentication; secure log-on |
1.3 Automate Joiner/Leaver Flow with SCIM
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 5.1, 5.3, 6.1, 6.2 |
| NIST 800-53 | AC-2, AC-2(3) |
Description
SCIM provisioning (Enterprise) syncs users and groups from Okta, Microsoft Entra ID, or any SCIM 2.0 IdP to Lovable, and — critically — deprovisions on IdP deactivation: the user is removed from the workspace and blocked from logging in. The SCIM API at https://api.lovable.dev/scim/v2 is Lovable’s only documented programmatic admin surface.
Rationale
Why This Matters:
- IdP-driven deprovisioning is the tested leaver kill-switch — no manual removal race when someone departs
- Group mappings (viewer/editor/admin) keep roles synchronized with your directory; the default role catches unmapped users — set it to viewer
- The SCIM API token is shown only once and is rotatable — treat it as a privileged credential (audit-log events carry API-key attribution)
Attack Prevented: Orphaned access after offboarding; role drift between directory and workspace
Prerequisites
- Enterprise plan; active SSO (1.2); verified domain (1.1); workspace owner/admin
ClickOps Implementation
- Settings → Access → Identity → SCIM provisioning → enable; record the generated API key (shown once; Rotate here if ever exposed)
- Configure your IdP with base URL
https://api.lovable.dev/scim/v2and the token; map IdP groups to Lovable roles; set the default role to viewer - Note: disabling SCIM stops provisioning but does not remove existing members — removals still need review
Code Implementation
Code Pack: API Script
# Access review: list every SCIM-provisioned user with active state and role-bearing groups.
# Reconcile this against your IdP; anyone here who is inactive in the IdP is a deprovisioning gap.
scim_get "/Users?count=200" | jq -r '
["ACTIVE","USERNAME","DISPLAY_NAME","GROUPS"],
(.Resources[] | [
(.active | tostring),
.userName,
(.displayName // "-"),
([.groups[]?.display] | join(",") // "-")
]) | @tsv' | column -t -s$'\t'
# Group -> role mapping review. Lovable assigns workspace roles (viewer/editor/admin) via
# SCIM group membership; when a user is in several mapped groups the HIGHEST role wins.
# Flag any group mapped to admin and confirm its IdP membership is deliberately small.
scim_get "/Groups?count=200" | jq -r '
.Resources[] | [
.displayName,
((.members // []) | length | tostring)
] | @tsv' | column -t -s$'\t'
# Leaver verification: confirm a departed user is gone. IdP deactivation should remove them
# from the workspace and block login. An "active: true" result here means the leaver still
# has workspace access — investigate the IdP assignment before closing the offboarding ticket.
LEAVER_EMAIL="${1:-}"
if [ -n "${LEAVER_EMAIL}" ]; then
ENCODED=$(printf '%s' "userName eq \"${LEAVER_EMAIL}\"" | jq -sRr @uri)
RESULT=$(scim_get "/Users?filter=${ENCODED}")
COUNT=$(printf '%s' "${RESULT}" | jq -r '.totalResults // 0')
if [ "${COUNT}" = "0" ]; then
echo "PASS 1.3: ${LEAVER_EMAIL} is not provisioned in the workspace."
else
printf '%s' "${RESULT}" | jq -r '.Resources[] | "FAIL 1.3: \(.userName) still present (active=\(.active))"'
fi
fi
Validation & Testing
- Deactivate a test user in the IdP → confirm they are removed from the workspace and blocked from login
- Run the SCIM access-review pack to list provisioned users/groups and reconcile against the directory
Expected result: Workspace membership mirrors the IdP; leavers lose access automatically.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-2(3) | Disable accounts (automated) |
| ISO 27001:2022 | 5.18 | Access rights |
1.4 Require 2FA on Every Account (Especially Below Business)
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 6.3, 6.5 |
| NIST 800-53 | IA-2(1) |
Description
Lovable 2FA is per-account, not per-workspace — there is no admin toggle to require it. Every member (all plans) should enable it themselves, preferring the authenticator app (TOTP) over SMS. On Free/Pro workspaces, where Enforce SSO is unavailable, this is the only MFA you can get.
Rationale
Why This Matters:
- Workspaces below Business have no SSO — a phished password on an admin account is otherwise game over
- Lovable provides no backup/recovery codes; losing all enrolled methods means proving account ownership to Lovable Support — so the doc’s own advice stands: keep at least two active methods enrolled
- Owner/admin accounts can delete the workspace and every project in it — MFA on those accounts is non-negotiable
Attack Prevented: Account takeover via credential phishing or password reuse
ClickOps Implementation
- Each member: Settings → Your account → Two-factor authentication → enable Authenticator app (recommended); optionally add Phone (SMS) as the second method
- Admins: track enrollment manually (there is no enforcement dashboard) — make it a joiner-checklist item; on Business/Enterprise prefer Enforce SSO (1.2) with IdP MFA instead
Validation & Testing
- Sign-in on a fresh session prompts for the TOTP code
- Confirm two methods are enrolled per the lockout guidance
Expected result: All accounts (at minimum all owners/admins) carry MFA.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | IA-2(1) | Multi-factor authentication |
| ISO 27001:2022 | 5.17 | Authentication information |
2. Workspace Access Governance
2.1 Right-size Roles and Member Lifecycle
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 5.4, 6.1 |
| NIST 800-53 | AC-6, AC-2 |
Description
Lovable has five workspace roles — Owner, Admin, Editor, Viewer, and (external, project-scoped) Collaborator. Keep owners to a governed minimum (inviting additional owners requires Business/Enterprise), default new members to viewer, and use the documented lifecycle semantics: email invites expire after 30 days, invite links after 5 days, and removal revokes access immediately with owned projects auto-transferring to the most senior remaining member.
Rationale
Why This Matters:
- Owners hold full control including owner management and workspace deletion; admins manage everything except owners — both are takeover-grade accounts to minimize
- Editors can invite viewers and external collaborators — meaning editor count is also your invitation surface unless restricted (2.2)
- Auto-transfer on removal means projects never orphan, but also that seniority silently inherits data access — review transfers after offboarding
Attack Prevented: Privilege sprawl; lingering access through stale invites
ClickOps Implementation
- Settings → Access → People → audit each member’s role; demote to the least role that works (viewer for read-only stakeholders)
- Cancel stale pending invites; on paid plans use viewer/admin tiers deliberately
- On Business/Enterprise, use Settings → Access → Groups to grant project/folder access by group (SCIM-syncable), and set Default monthly member credit limit (Settings → General) as a resource-abuse cap
Validation & Testing
- The People list shows no unexplained admins/owners and no expired-but-pending invites
- A removed test member loses access immediately; their projects transfer as documented
Expected result: Least-privilege membership with governed lifecycle.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-6, AC-2 | Least privilege; account management |
| ISO 27001:2022 | 5.18, 8.2 | Access rights; privileged access |
2.2 Lock Down Invitations, Invite Links, and Workspace Discovery
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 5.4, 6.1 |
| NIST 800-53 | AC-2, AC-6 |
Description
Three settings govern how people get in: Restrict workspace invitations (Enterprise; only admins/owners may invite by email), the Invite links toggle (Free/Pro/Business; shareable join links, 5-day expiry, one active per role), and Workspace discovery (Business/Enterprise, default enabled; verified-domain users can discover and request access). Harden all three.
Rationale
Why This Matters:
- Invite links are bearer credentials — anyone holding the URL joins at the link’s role; disable them where SSO/SCIM handles joining
- Workspace discovery is enumeration surface: it advertises the workspace to everyone on the domain — turn it off unless you rely on request-to-join flows
- With invitations restricted, membership converges on the governed paths (SSO JIT, SCIM, admin invites) — the auditable ones
Attack Prevented: Uncontrolled joins via leaked invite links; social-engineering via discovery/request-access flows
ClickOps Implementation
- Settings → Security → Privacy & security → Restrict workspace invitations → enable (Enterprise)
- Same page → Invite links → disable (or accept the 5-day/one-per-role limits knowingly)
- Same page → Workspace discovery → disable; also review Public member profiles (Enterprise, default disabled — keep it off)
Validation & Testing
- A non-admin editor cannot generate an email invite or an invite link
- A same-domain outsider can no longer discover the workspace
Expected result: Every join flows through an admin- or IdP-governed path.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-2, AC-6 | Account management; least privilege |
| ISO 27001:2022 | 5.18 | Access rights |
2.3 Default Projects to Restricted; Govern External Collaborators
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.3, 6.8 |
| NIST 800-53 | AC-3, AC-6 |
Description
Set Default project access from Workspace (every member can view/remix/edit per role — the default) to Restricted (owner + invited collaborators only; Business/Enterprise), and constrain External project collaborators (default “Allow all”) to the narrowest workable option. Workspace owners retain full access regardless — that residual is by design.
Rationale
Why This Matters:
- Workspace-wide default access means any member — and anything acting as a member — can open any project, including ones holding production schemas and chat history
- External collaborators are project-scoped but outside your identity governance; “Allow all” lets any editor pull outsiders into any project
- Restricted-by-default converts data access from ambient to deliberate, which is also what your auditors will ask for
Attack Prevented: Intra-workspace data exposure; unsanctioned external access to source and data
Prerequisites
- Business or Enterprise for Restricted default and the external-collaborators setting
ClickOps Implementation
- Settings → Security → Privacy & security → Default project access → Restricted
- Same page → External project collaborators → Allow viewers or None allowed (L3: None)
- Per-project overrides stay available via the project Share dialog — audit them, including project-level Admin grants (paid plans)
Validation & Testing
- A new project is visible only to its owner and explicit invitees
- An editor attempting to add an external collaborator hits the policy
Expected result: Project access is explicit, external access is bounded.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-3, AC-6 | Access enforcement; least privilege |
| ISO 27001:2022 | 5.15, 8.3 | Access control; information access restriction |
2.4 Control Who Can Publish and Who Can View Published Apps
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.3, 4.2 |
| NIST 800-53 | AC-3, CM-5 |
Description
Publishing is the moment a project becomes an internet-facing app. Constrain Who can publish externally (Enterprise; default “Editors and above” → tighten to “Admins and owners” or “Owners only”), set Default website access (Business/Enterprise; default “Anyone” → “Workspace”), and use the per-project Who can view your site? picker (Public | Workspace | Custom with invited people/groups/external emails). On Free/Pro, published apps are always public — plan accordingly.
Rationale
Why This Matters:
- The default lets every editor put an app on the public internet under your brand — a change-control gap in regulated teams
- Workspace-visibility publishing turns Lovable into a viable internal-tools platform: viewers must authenticate as members
- “External invites” (default enabled) lets members email outside viewers into internally published apps — govern it with the same care as external collaborators
Attack Prevented: Unreviewed public exposure of internal apps and their data
Prerequisites
- Business/Enterprise for non-public website access; Enterprise for the publish-permission setting
ClickOps Implementation
- Workspace settings → Privacy & security → Who can publish externally → Admins and owners (L2) or Owners only (L3)
- Same page → Default website access → Workspace; review External invites (disable at L3)
- Per project: Publish dialog → visibility row → Who can view your site? → the narrowest audience; unpublish stale apps (Project settings → Unpublish project)
Validation & Testing
- An editor’s Publish attempt on an external target is blocked by policy
- A published internal app demands workspace sign-in from an incognito session
Expected result: Publishing is a governed act; internal apps are actually internal.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | CM-5, AC-3 | Access restrictions for change; access enforcement |
| ISO 27001:2022 | 8.32 | Change management |
2.5 Harden the GitHub Integration
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.3, 4.6 |
| NIST 800-53 | AC-6, CM-5 |
Description
The Lovable GitHub App requests Contents (write), Metadata (read), Pull requests (write), Workflows (write), and Administration (write — to create repositories). Install it with “Only select repositories”, never “All repositories”, and use the documented role gating (workspace owners/admins install and manage connections). Repositories created by Lovable are private by default on every plan.
Rationale
Why This Matters:
- Workflows-write plus Contents-write on all repositories would make the Lovable app a supply-chain pivot into your CI — scope the install to the repos it syncs
- Administration-write exists so Lovable can create repos; on an org-wide install that is repo-creation authority for a third-party app
- For GitHub Enterprise Server/data-residency (Enterprise plan), Lovable publishes its egress IP ranges in the setup wizard — add them to the GitHub org IP allow list rather than opening the org
Attack Prevented: Third-party-app blast radius across your GitHub org; unreviewed workflow modification
ClickOps Implementation
- Workspace settings → Git → GitHub → Add connection (owners/admins) → during the GitHub install choose Only select repositories
- Review the granted permissions against the documented list; re-scope any legacy all-repositories install
- GHES/GHEC-DR (Enterprise): add Lovable’s setup-wizard IP ranges to GitHub organization → Settings → Security → IP allow list
Validation & Testing
- The GitHub App’s installation page lists only the intended repositories
- Two-way sync works on the connected repo’s single active branch
Expected result: Lovable’s GitHub reach is scoped to exactly the repos it needs.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-6, CM-5 | Least privilege; change restrictions |
| ISO 27001:2022 | 5.19, 8.30 | Supplier relationships; outsourced development |
3. AI Agent & Integration Surfaces
3.1 Govern Connectors (and Know Their Enforcement Boundary)
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 4.8, 15.2 |
| NIST 800-53 | AC-20, SA-9 |
Description
Connectors wire projects (and the AI agent) to external services. On Business/Enterprise, Connectors → Admin settings exposes per-connector “Who can create connections and clients” (No one | Admins | Editors & admins) across two tabs (App + chat connectors; App user connectors). Enterprise defaults to No one — keep it that way and enable per-connector on demand. Critical boundary: connector access controls are not enforced after publishing — a published app keeps using its connections regardless of later admin-setting changes.
Rationale
Why This Matters:
- Every connector is a credential-bearing egress path; token storage is encrypted and unreadable (even to admins and the agent), but creation rights determine who can open new paths
- Because governance applies at build time only, the admin setting is a gate, not a runtime revocation — to actually cut a published app off, delete the connection (which removes its secrets and stops dependent apps)
- Rate limiting (1,000 req/min per connector per project) bounds runaway agent loops but not data sensitivity — the creation policy is your real control
Attack Prevented: Unsanctioned third-party data flows opened by any editor; token sprawl
Prerequisites
- Business or Enterprise for admin settings (Free/Pro: any editor+ can create connections)
ClickOps Implementation
- Connectors → Admin settings → for each connector on both tabs, set Who can create connections and clients to No one (enable per-request) or Admins
-
Review existing connections’ usage scope (Only you Invite specific people Invite entire workspace) — narrow the workspace-wide ones - To revoke a published app’s external access: delete the connection itself, not just the admin setting
Validation & Testing
- An editor’s attempt to create a new connection is blocked by the policy
- Deleting a test connection stops the dependent app’s integration immediately
Expected result: New external data flows require admin action; revocation semantics are understood.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-20, SA-9 | Use of external systems; external services |
| ISO 27001:2022 | 5.19, 5.23 | Supplier relationships; cloud services security |
3.2 Restrict MCP Surfaces (Third-Party Clients, Remote Connectors, Local Servers)
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 4.8, 15.2 |
| NIST 800-53 | AC-20, CM-7 |
Description
Three Privacy & security toggles govern Model Context Protocol reach into the workspace: Third-party MCP clients (Claude Desktop, Cursor, etc. connecting via Lovable’s MCP server at mcp.lovable.dev; default enabled on Business, disabled on Enterprise), Remote MCP connectors (members connecting external MCP servers; default enabled), and Local desktop MCP servers (desktop-app users attaching local servers; default enabled, disabled on Enterprise). Disable all three unless a governed use case exists.
Rationale
Why This Matters:
- The Lovable MCP server exposes real capability — project creation/deployment, visibility changes, file reads,
query_database, analytics — to any OAuth-authorized external AI client; on Free/Pro it is always available, so Business/Enterprise gating is your only off-switch - Remote and local MCP servers are member-attached code with access to project context — an unvetted-tool supply-chain surface
- Enterprise defaults (disabled) reflect the vendor’s own risk read — mirror them on Business
Attack Prevented: Workspace data egress and project manipulation through external AI clients and unvetted MCP servers
Prerequisites
- Business or Enterprise (toggles are not configurable below that)
ClickOps Implementation
- Settings → Security → Privacy & security → Third-party MCP clients → disable (enable narrowly if a sanctioned client workflow exists)
- Same page → Remote MCP connectors → disable
- Same page → Local desktop MCP servers → disable
Validation & Testing
- An external MCP client’s OAuth connection attempt fails while the toggle is off
- Members cannot attach new remote/local MCP servers to projects
Expected result: MCP reach into the workspace is deliberate, not default.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-20, CM-7 | External systems; least functionality |
| ISO 27001:2022 | 5.23, 8.19 | Cloud services; software installation |
3.3 Treat Workspace Knowledge and Cross-Project Sharing as Privileged Configuration
Profile Level: L3 (Run)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.3, 4.1 |
| NIST 800-53 | CM-5, AC-3 |
Description
Workspace Knowledge/Skills (Settings → Customization, owner/admin-managed) inject instructions into every project’s AI context — they steer the agent workspace-wide. Cross-project sharing (all plans, default enabled) lets members reference and reuse implementations from other projects. For segregated teams or regulated work, disable cross-project sharing and change-control the knowledge base.
Rationale
Why This Matters:
- Workspace knowledge is prompt-injection-shaped by design: whoever edits it programs the agent for everyone — treat edits like CI-config changes
- Cross-project sharing moves code (and the context embedded in it) across project boundaries you may have deliberately drawn in 2.3
- Both surfaces are invisible in day-to-day use — they belong in your periodic access review
Attack Prevented: Workspace-wide agent manipulation via knowledge edits; cross-boundary code/context leakage
ClickOps Implementation
- Settings → Security → Privacy & security → Cross-project sharing → disable for segregated environments
- Settings → Customization → review Workspace Knowledge/Skills; restrict editing to owners/admins and log changes through your change process (audit-log Projects/workspace-management events cover this on Enterprise)
Validation & Testing
- A member cannot pull implementation context from a sibling project while sharing is off
- Knowledge edits appear in the audit log and match approved changes
Expected result: The agent’s standing instructions and cross-project flows are governed.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | CM-5, AC-3 | Change restrictions; access enforcement |
| ISO 27001:2022 | 8.32 | Change management |
4. Data Protection
4.1 Manage Secrets the Platform’s Way (and Rotate on Exposure)
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.11, 16.9 |
| NIST 800-53 | SC-12, SC-28, IA-5 |
Description
Project secrets live at Cloud tab → Secrets: encrypted, injected into Edge Functions automatically, never reaching the browser, and write-only after save (view shows name + creation date only). The reserved SUPABASE_/LOVABLE_ prefixes are platform-managed; the project’s LOVABLE_API_KEY is rotatable in place. The sharp edge: VITE_-prefixed variables are build-time and browser-exposed — never put secrets there. Enterprise adds workspace-level Build secrets (Settings → Build & deploy) for private-registry/CI-type credentials.
Rationale
Why This Matters:
- The most common AI-generated-app leak is a secret pasted into frontend code; Lovable auto-detects API keys pasted into chat and routes them to Secrets + Edge Functions — but the
VITE_path remains a self-inflicted bypass - Write-only semantics mean an exposed value can’t be re-read from the console — rotation (not inspection) is the response: Rotate on
LOVABLE_API_KEYre-issues and updates the Edge Function environment automatically - Build secrets separate registry/CI credentials from runtime app secrets, with role-scoped visibility (editors see names read-only)
Attack Prevented: Secret exposure via client bundles; stale compromised credentials
ClickOps Implementation
- Cloud tab → Secrets → keep every credential here; audit for anything mirrored into
VITE_variables or source - On suspected exposure: Rotate (
LOVABLE_API_KEY) or replace the secret value (replace-only by design) - Enterprise: Settings → Build & deploy → Build secrets for
.npmrc-style${SECRET_NAME}injection during builds
Validation & Testing
- The published app’s browser bundle contains no secret values (search the served JS)
- Deep scan (5.3) reports no exposed-secret findings
Expected result: Secrets are server-side, write-only, and rotated on exposure.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | IA-5, SC-28 | Authenticator management; protection at rest |
| ISO 27001:2022 | 8.24 | Use of cryptography |
4.2 Keep Storage Buckets Private (Verify the Default)
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.3 |
| NIST 800-53 | AC-3, SC-28 |
Description
Block public storage buckets (all plans) is default enabled — new Lovable Cloud buckets are private, governed by database-layer RLS, and file links are one-hour signed URLs. Public buckets serve permanent public URLs and can only be unblocked by workspace owners/admins. Verify the block is still on, and treat any unblocking as an exception with an owner.
Rationale
Why This Matters:
- Public buckets are the classic accidental-exposure primitive; the platform default is right — your job is to keep it and catch exceptions
- Private-bucket access rides the same RLS layer as the database (5.1) — storage exposure and table exposure are the same failure class
- Signed-URL expiry (1 hour) limits link-forwarding leakage from private buckets
Attack Prevented: Unauthenticated harvesting of uploaded files (documents, images, exports)
ClickOps Implementation
- Settings → Security → Privacy & security → Block public storage buckets → confirm enabled
- Cloud tab → Storage → inventory buckets; any public bucket needs a documented owner and reason (bucket names are immutable; deletion requires an empty bucket and is irreversible)
Validation & Testing
- Creating a public bucket as a non-admin fails while the block is on
- A private bucket’s copied file URL stops working after one hour
Expected result: All buckets private unless deliberately excepted.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-3, SC-28 | Access enforcement; protection at rest |
| ISO 27001:2022 | 8.3, 8.12 | Information access restriction; data leakage prevention |
4.3 Turn On Sensitive-Data Scanning and Chat Send Protection
Profile Level: L3 (Run)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.1, 3.13 |
| NIST 800-53 | SI-4, SC-7(10) |
Description
Enterprise workspaces get a DLP layer, disabled by default: Sensitive data scanning (identity, financial, government-ID, medical, and security data — passwords, API keys, auth secrets — across chat, file uploads, chat history, sampled Cloud database rows, and storage buckets), Chat send protection (Off | Log only — the default | Ask before sending | Block original), and Block publishing with PII (unresolved findings stop publish/update).
Rationale
Why This Matters:
- Builders paste production data into AI chat — that is the workflow, not an anomaly; “Log only” records it, “Ask before sending”/”Block original” actually intervenes
- Database-row and bucket sampling catches PII that arrived through the app, not just through chat — the scan follows the data, not the door
- The publish gate turns findings into a hard control instead of a report
Attack Prevented (privacy): PII/credential leakage into prompts, model providers, and published apps
Prerequisites
- Enterprise plan; workspace owner/admin
ClickOps Implementation
- Settings → Privacy & security → Sensitive data scanning → enable
- Same page → Chat send protection → Ask before sending (L3) or Block original (L4)
- Same page → Block publishing with PII → enable; editors triage findings (false-positive, redact, delete) per project
Validation & Testing
- Sending a test credit-card-formatted string in chat triggers the configured mode
- A project with an unresolved finding cannot publish while the gate is on
Expected result: Sensitive data is detected — and blocked — before it leaves.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | SI-4, SC-7(10) | Monitoring; prevent exfiltration |
| ISO 27001:2022 | 8.12 | Data leakage prevention |
4.4 Set Data-Boundary Controls: Code Downloads, Transfers, Region, Abandoned Projects
Profile Level: L3 (Run)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.4, 3.1 |
| NIST 800-53 | AC-4, SI-12 |
Description
Four Enterprise/Business boundary settings finish the data story: Code downloads (Enterprise, default enabled — disable so only admins/owners can export source zips), Editor project transfers (default disabled — keep it off so editors cannot move/remix projects into other workspaces), Default hosting region (Business/Enterprise — Americas | Europe | Asia Pacific, new projects only), and the Abandoned projects lifecycle (Enterprise — mark after 60 idle days; optional auto-delete with 7/14/30-day grace).
Rationale
Why This Matters:
- Source export and cross-workspace transfer are the two doors data walks out of when someone leaves — closing both makes offboarding (1.3) complete
- Hosting region is a compliance commitment; it must be set before projects are created (it never applies retroactively)
- Idle projects hold real data behind forgotten access lists — the abandoned-project sweep is attack-surface reduction, with export-first discipline (database export caps: 5 GB, one per 24h; backups: daily, ~14-day retention; restores are permanent)
Attack Prevented: Data exfiltration via export/transfer; stale-project exposure; residency violations
ClickOps Implementation
- Settings → Security → Privacy & security → Code downloads → disable; Editor project transfers → keep disabled; consider Require workspace editor role for modify rights
- Same page → Default hosting region → set to your jurisdiction before onboarding builders
- Same page → Abandoned projects → enable marking; enable auto-delete with a grace period only after your export runbook exists (Cloud tab → Advanced settings → Export project data)
Validation & Testing
- An editor cannot download a source zip or transfer a project out
- New projects land in the configured region (project settings confirm)
Expected result: Data leaves the workspace only through governed, admin-visible paths.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-4, SI-12 | Information flow; information handling |
| ISO 27001:2022 | 5.14, 8.10 | Information transfer; information deletion |
5. Published App Security
5.1 Enforce Row-Level Security on Every Table Before Go-Live
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.3, 16.1 |
| NIST 800-53 | AC-3, AC-6 |
Description
Lovable-built apps call the database from the client, so RLS policies are the authorization layer — the vendor’s own doc is blunt: “Before going live, make sure every table has Row Level Security policies that restrict who can read and write each row… Missing RLS policies are the most common way app data gets exposed.” Review policies at Cloud tab → Database → RLS policies (read-only viewer: policy name, command, applies-to, rule expression; changes go through chat requests). For connected-Supabase projects, verify in the Supabase dashboard — auth settings live there, not in Lovable.
Rationale
Why This Matters:
- CVE-2025-48757 (CVSS 9.3, researcher Matt Palmer): Lovable-generated apps with missing/weak RLS were readable and writable by unauthenticated attackers — reported scope ~10% of scanned projects. Lovable disputed the CVE, stating each customer “accepts a responsibility over protecting the data of their application” — which makes RLS review your control, formally
- The Basic scan lints RLS (“overly permissive rules or missing access checks”); the Deep scan additionally detects database functions that bypass RLS — run both before any launch (5.3)
- Client-side auth state is UI, not enforcement: “All authentication decisions must happen server-side” — RLS plus Edge-Function checks are that server side
Real-World Incidents:
- CVE-2025-48757 (2025): unauthenticated read/write to arbitrary tables of generated sites via insufficient RLS — the defining incident class for this platform
Attack Prevented: Unauthenticated database read/write on published apps
ClickOps Implementation
- Cloud tab → Database → RLS policies → verify every table (filter by Tables/Storage/Realtime) has policies restricting each command to the right principals
- Ask the agent to review (“Make sure users can only see and edit their own data”) — then verify yourself; for connected Supabase, confirm in the Supabase dashboard
- Follow Lovable’s pre-launch checklist: no secrets in frontend, validation and critical logic in Edge Functions, auth enforced server-side, external API calls server-side
Validation & Testing
- As an unauthenticated client, table reads/writes fail; as user A, user B’s rows are invisible
- Basic + Deep scans report no RLS/access-control errors
Expected result: Every table’s access is policy-enforced; scans agree.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-3, AC-6 | Access enforcement; least privilege |
| ISO 27001:2022 | 8.3, 8.26 | Access restriction; application security requirements |
5.2 Harden App Authentication (Lovable Cloud)
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 6.2, 16.2 |
| NIST 800-53 | IA-2, IA-5, SC-23 |
Description
For apps on Lovable Cloud, end-user authentication is configured at Cloud tab → Users → Auth settings. Harden email auth (disable auto-confirm, secure email change, minimum password length ≥8 with required character classes, Password HIBP check against breached passwords, re-authentication before password change, tight OTP expiry/length), restrict enabled providers, lock down Redirect URLs (up to 50), and use Disable sign-up for closed apps. Workspace policy can restrict App login methods across all workspace apps (Business/Enterprise — e.g., SAML SSO only for internal tools).
Rationale
Why This Matters:
- Auto-confirmed emails and 6-character passwords are the shipped defaults of least resistance — each toggle here removes a standard account-takeover path; HIBP checking alone kills the reused-breached-password class
- Open redirect-URL lists are OAuth-token-leak surface; the allowlist (plus Site URL) is the fix — and the documented cause when “sign-in works in preview but breaks on the published domain”
- Workspace-level login-method restriction turns per-project auth choices into policy (SAML-only internal apps)
Attack Prevented: End-user account takeover; OAuth redirect abuse; unwanted self-registration
ClickOps Implementation
- Cloud tab → Users → Auth settings → Email → disable auto-confirm; enable secure email change, HIBP check, re-auth for password change; set min length ≥8 + character classes; tighten OTP expiry
- Auth settings → disable unused providers; Advanced → set Site URL + explicit Redirect URLs; Disable sign-up for closed apps; review email sending limits
- Workspace: Settings → Security → Privacy & security → App login methods → restrict to approved methods
Validation & Testing
- A breached-list password is rejected at sign-up; unverified emails cannot sign in
- An unlisted redirect URL is refused during OAuth
Expected result: App auth resists takeover by default across every workspace app.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | IA-5(1), SC-23 | Password-based authentication; session authenticity |
| ISO 27001:2022 | 5.17, 8.26 | Authentication; application security |
5.3 Make Security Scans a Publish Gate
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 16.12, 7.5 |
| NIST 800-53 | RA-5, SA-11 |
Description
Lovable ships two free scanners: Basic scan (10–15s; RLS policy linting, schema/access review, npm dependency audit — runs automatically in the publish dialog) and Deep scan (~4 min; agentic review adding access-control analysis, unauthenticated-endpoint detection, exposed secrets, unsafe input handling). Two workspace settings convert them from advice into control: Block publishing with critical findings (all plans, default disabled) and Auto-fix security issues (scope up to All projects; auto-remediates error-level Basic findings). Wiz (SCA/SAST) and Aikido (DAST) integrations can feed the same findings view.
Rationale
Why This Matters:
- The publish-time Basic scan is the platform’s answer to CVE-2025-48757-class exposure — but without the blocking toggle, a builder can ship past red findings
- Deep scan catches what config linting can’t: edge functions lacking auth, RLS-bypassing database functions, injected secrets
- “Try to fix all” and auto-fix lower the cost of remediation to near zero (shared pool of 10 free fixes, then credits) — there is no economic excuse for shipping criticals
Attack Prevented: Publishing apps with known-critical exposure (missing RLS, open endpoints, leaked secrets)
ClickOps Implementation
- Settings → Security → Privacy & security → Block publishing with critical findings → enable (all plans — do this on day one)
- Same page → Auto-fix security issues → scope to All published projects (L2) after piloting
- Per project: More → Security → run Deep scan before launch; resolve Errors; use Edit security memory to document accepted risks
Validation & Testing
- A project with an error-level finding is refused publication
- Deep scan completes clean (or with documented, accepted non-critical findings) before go-live
Expected result: Nothing ships with known-critical findings.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | RA-5, SA-11 | Vulnerability scanning; developer testing |
| ISO 27001:2022 | 8.29, 8.8 | Security testing; technical vulnerability management |
5.4 Publish on a Custom Domain (and Know the Shared-Suffix Risk)
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 9.2 |
| NIST 800-53 | SC-8, SC-20 |
Description
Production apps should serve from a custom domain (Project → Settings → Domains or the Publish dialog; paid plans) — A record to 185.158.133.1 plus a _lovable TXT verification record, auto-provisioned certificates, TLS 1.2+ enforced. Beyond branding, this moves your app off the shared *.lovable.app suffix — where phishing kits demonstrably also live.
Rationale
Why This Matters:
- Guardio Labs’ VibeScamming benchmark (2025) scored Lovable weakest of the tested platforms (≈1.8/10) at resisting phishing-kit generation — it produced and hosted a Microsoft-lookalike credential harvester on a
login-microsft-com.lovable.appsubdomain, complete with a captured-credentials dashboard and Telegram exfiltration - Your legitimate app sharing a suffix with such kits inherits reputational and filtering risk; a custom domain separates your trust surface
- Defensively: your security team should monitor for brand-lookalike
*.lovable.appsubdomains as a phishing vector against your users
Attack Prevented: Brand impersonation blending with your production URLs; shared-suffix reputation damage
ClickOps Implementation
- Project → Settings → Domains → add your domain; create the A record (
185.158.133.1) and_lovableTXT record (lovable_verify=…); remove AAAA records - Confirm certificate issuance and that TLS 1.0/1.1 clients are rejected (platform-enforced)
- Add
*.lovable.applookalike patterns to your brand-monitoring/anti-phishing watchlist
Validation & Testing
- The app serves on the custom domain with a valid certificate; TLS 1.1 handshakes fail
- Brand-monitoring alerts cover lovable.app lookalikes
Expected result: Production traffic on your domain, with the shared-suffix risk consciously managed.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | SC-8, SC-20 | Transmission protection; secure name resolution |
| ISO 27001:2022 | 8.20 | Network security |
6. Privacy & AI Training
6.1 Opt Out of AI Model Training (Before September 9, 2026 on Free/Pro)
Profile Level: L1 (Crawl)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.1 |
| NIST 800-53 | SI-12, PL-4 |
Description
From September 9, 2026, Free and Pro customer content — “prompts (including images and files you attach), code, project files, generated outputs, and usage data” — may be used to train Lovable’s models, opted in by default. The opt-out is per-member only (Account settings → AI model training → disable “Use my Lovable content for model training”); an admin cannot opt a Free/Pro workspace out — every member must flip their own toggle, and opting out is forward-only (it does not retract prior training data). Business/Enterprise workspace data is excluded by default under DPA; verify the workspace toggle regardless.
Rationale
Why This Matters:
- Opting out before September 9, 2026 prevents any training use; after that date, whatever was collected stays in assembled datasets/models — the deadline is the control
- Because the toggle is per-member on Free/Pro, one un-flipped account leaks the whole team’s shared-project content — verify every member or upgrade to a plan with the workspace-level guarantee
- End-user data inside your apps is excluded from training scope — the exposure is your build content: prompts, code, uploads
Attack Prevented (privacy): Proprietary prompts, code, and files entering third-party model training
ClickOps Implementation
- Every member (Free/Pro): Account settings → AI model training → disable Use my Lovable content for model training — before 2026-09-09
- Business/Enterprise admins: Settings → Security → Privacy & security → Use workspace content for model training → confirm disabled (docs state Business defaults have been inconsistent — verify the toggle, don’t trust the default)
- Make the opt-out a joiner-checklist item on Free/Pro teams
Validation & Testing
- Each member’s account toggle reads disabled; the workspace toggle (Business/Enterprise) reads disabled
- New-member onboarding includes the check
Expected result: No workspace content flows into model training.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | SI-12, PL-4 | Information handling; rules of behavior |
| ISO 27001:2022 | 5.34 | Privacy and PII protection |
6.2 Close the Passive Exposure Channels: Previews, Remixing, Analytics
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.3 |
| NIST 800-53 | AC-3, SI-12 |
Description
Three low-visibility channels expose project content or user data: public preview links (view-only URLs valid 7 days, guest comments on by default; Enterprise can disable workspace-wide via “Allow public preview links sharing”), Public remixing (project-level; when on, anyone with the link copies the latest version including source code — off by default, unavailable on Enterprise), and Visitor analytics on published apps (auto-collected; disable per project under Project settings → General → Publishing if your privacy posture requires).
Rationale
Why This Matters:
- Preview links are unauthenticated bearer URLs to your work-in-progress — 7-day validity limits but does not remove the leak window
- A remix copies code and database schema (not records) plus optionally chat history — enabling it on a proprietary project is a source-code disclosure decision
- Analytics is privacy-positive as shipped (aggregate, no visitor profiles per the docs) but is still a data-collection surface to declare in your app’s privacy notice — or switch off
Attack Prevented (privacy): Unintended source/context disclosure via shareable artifacts
ClickOps Implementation
- Enterprise: Settings → Privacy & security → Allow public preview links sharing → disable; otherwise train builders to treat preview links as ephemeral secrets
- Per project: Project settings → Sharing → Public remixing → confirm off for anything proprietary
- Per published app: Project settings → General → Publishing → Visitor analytics → align with your privacy notice
Validation & Testing
- Preview-link creation fails (Enterprise, disabled) or links expire at 7 days
- A non-collaborator cannot remix a proprietary project
Expected result: No passive disclosure channel is open unknowingly.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AC-3, SI-12 | Access enforcement; information handling |
| ISO 27001:2022 | 5.34, 8.12 | Privacy; data leakage prevention |
6.3 Know the Privacy Floor: Providers, Telemetry, Retention
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 3.1, 15.1 |
| NIST 800-53 | SI-12, SA-9 |
Description
Some privacy realities have no console toggle and belong in your risk register instead: prompts and related content transit Lovable’s AI Gateway to third-party providers (the privacy policy names OpenAI, Google Gemini, and models via OpenRouter — pass-through, “we do not store the raw prompts… unless you explicitly save them”); there is no admin control over which LLM subprocessor processes prompts and no zero-data-retention option documented; Lovable’s own product telemetry (PostHog; prompts-submitted/build/deploy events) has no in-app off-switch — only cookie consent, browser controls, and Global Privacy Control. Retention commitments: log data ≤90 days, customer data ≤90 days post-deletion, account deletion within 30 days of request (30-day grace), workspace deletion 60-day grace then permanent removal including integration keys/tokens.
Rationale
Why This Matters:
- What you cannot configure you must contract: Enterprise buyers should route model-provider constraints and ZDR requirements through the DPA — the console will not do it
- The pass-through claim is a policy commitment, not a setting — treat prompts as data shared with the named providers and govern what goes into them (4.3 is your enforcement layer)
- Deletion timelines (30/60/90-day) belong in your records-retention and offboarding docs verbatim
Attack Prevented (privacy): Compliance surprises — undisclosed processor flows and retention mismatches
ClickOps Implementation
- Record the AI Gateway provider list and retention terms in your vendor-risk file; for Enterprise, negotiate provider/ZDR terms in the DPA
- Enable Global Privacy Control in managed browsers if honoring CPRA opt-outs matters to your users
- Pair with 4.3 (DLP) and 6.1 (training opt-out) — the configurable layers over this floor
Validation & Testing
- Vendor-risk documentation reflects the current privacy policy (re-verify on policy updates)
- DPA terms cover model subprocessors for Enterprise deployments
Expected result: The non-configurable privacy surface is documented, contracted, and compensated for.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | SA-9, SI-12 | External services; information handling |
| ISO 27001:2022 | 5.19, 5.34 | Supplier relationships; privacy |
7. Monitoring & Audit
7.1 Operate the Audit Log (13-Week Retention Forces an Export Cadence)
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 8.2, 8.9 |
| NIST 800-53 | AU-2, AU-6, AU-11 |
Description
Enterprise audit logs (Settings → Security → Audit logs) capture membership, workspace management, groups, identity/access (domain verification, SSO, SCIM), secrets and integrations, project events (including database queries and prompt sending), Lovable Cloud changes, and authentication — with 13-week (~90-day) retention and manual JSONL export only (no API; SIEM integration is an account-team conversation). That retention floor mandates a scheduled export.
Rationale
Why This Matters:
- 90 days is shorter than most incident-response lookback and many compliance retention requirements — export monthly (minimum) to your own storage or lose the history
- There is no log API: a poller cannot exist; the export button (JSONL, filters respected, links live 7 days) is the mechanism — put it on the calendar
- Expandable event rows carry structured JSON with API-key attribution — enough to reconstruct SCIM-driven changes and secret/integration touches
Attack Prevented: Un-investigable incidents; compliance gaps from silent log expiry
Prerequisites
- Enterprise plan; owner/admin
ClickOps Implementation
- Settings → Security → Audit logs → establish a monthly (L2) or weekly (L3) Export → JSONL routine into your evidence store (clear resource filters first — export is unavailable while one is active)
- Review high-signal categories on a cadence: identity/access changes, secrets and integrations, Cloud storage/auth changes
- If you need streaming, raise SIEM integration with your account team — do not build against undocumented endpoints
Validation & Testing
- Exported JSONL files land in your store on schedule and parse cleanly
- A test setting change appears in the log with correct actor attribution
Expected result: Continuous, exportable audit coverage beyond the platform’s 13-week window.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | AU-2, AU-11 | Event logging; retention |
| ISO 27001:2022 | 8.15 | Logging |
7.2 Run the Security Center as Your Posture Dashboard
Profile Level: L2 (Walk)
| Framework | Control |
|---|---|
| CIS Controls v8 | 7.5, 16.13 |
| NIST 800-53 | RA-5, CA-7 |
Description
The workspace Security center (Settings → Security → Security center; Business/Enterprise, admins/owners) aggregates Code analysis (Basic/Deep findings across all projects, central Deep-scan triggering), Supply chain security (dependency vulnerabilities by severity), Secrets overview (secret names by project — never values), and Workspace insights (Enterprise; risk portfolio including PII detection). Enterprise adds scheduled scans (weekly Monday or monthly 1st, 08:00 workspace time; 1 credit per project per run). Only the latest results are retained — export CSV if you need history.
Rationale
Why This Matters:
- Central Deep-scan triggering plus scheduling turns per-project diligence (5.3) into a fleet control — no reliance on each builder remembering
- The secrets overview is your credential-inventory answer on a platform with write-only secrets: names, locations, publish status
- No-history retention means trend evidence only exists if you export it — same cadence discipline as 7.1
Attack Prevented: Fleet-wide drift — unscanned projects, aging dependency vulns, orphaned secrets
Prerequisites
- Business or Enterprise; scheduled scans Enterprise-only
ClickOps Implementation
- Settings → Security → Security center → review all four tabs; clear error-level findings fleet-wide
- Enterprise: configure the recurring scan (scope: all projects or published-only; weekly at L3)
- Export CSV per review cycle into your evidence store
Validation & Testing
- Scheduled scans run on cadence and consume expected credits
- CSV exports accumulate as posture history
Expected result: One dashboard, on a schedule, with exported evidence.
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| NIST 800-53 | RA-5, CA-7 | Vulnerability scanning; continuous monitoring |
| ISO 27001:2022 | 8.8 | Technical vulnerability management |
8. Compliance Quick Reference
Tier 2 baseline coverage (verified 2026-08-15)
| Body | Coverage of Lovable |
|---|---|
| CIS Benchmarks | None — no benchmark exists for Lovable or any AI app-builder category |
| DISA STIG | None found (best-effort; official library renders as a JS shell to automated checks) |
| CISA SCuBA | Not applicable — SCuBA covers Microsoft 365 services only |
Mappings in this guide therefore reference CIS Controls v8 (the general framework), NIST 800-53 Rev 5, and ISO 27001:2022 — not product benchmarks.
Control-to-framework summary
| Area | Controls | NIST 800-53 anchors |
|---|---|---|
| Identity | 1.1–1.4 | IA-2, IA-8, AC-2, AC-12 |
| Access governance | 2.1–2.5 | AC-3, AC-6, CM-5 |
| AI/integration surfaces | 3.1–3.3 | AC-20, SA-9, CM-7 |
| Data protection | 4.1–4.4 | SC-12, SC-28, SI-4, AC-4 |
| Published apps | 5.1–5.4 | AC-3, IA-5, RA-5, SC-8 |
| Privacy | 6.1–6.3 | SI-12, PL-4, SA-9 |
| Monitoring | 7.1–7.2 | AU-2, AU-11, RA-5, CA-7 |
Appendix A: Plan Gating Summary
| Control surface | Free | Pro | Business | Enterprise |
|---|---|---|---|---|
| 2FA (per-account) | ✅ | ✅ | ✅ | ✅ |
| SSO + Enforce SSO | ❌ | ❌ | ✅ | ✅ |
| SCIM provisioning | ❌ | ❌ | ❌ | ✅ |
| Restricted default project access | ❌ | ❌ | ✅ | ✅ |
| Non-public published apps | ❌ | ❌ | ✅ | ✅ |
| Publish-permission restriction | ❌ | ❌ | ❌ | ✅ |
| Block publishing w/ critical findings | ✅ | ✅ | ✅ | ✅ |
| Sensitive data scanning / DLP | ❌ | ❌ | ❌ | ✅ |
| Security center | ❌ | ❌ | ✅ | ✅ (+scheduled scans) |
| Audit logs | ❌ | ❌ | ❌ | ✅ |
| Workspace training-data toggle | ❌ (per-member) | ❌ (per-member) | ✅ | ✅ |
| MCP surface toggles | ❌ (always on) | ❌ (always on) | ✅ | ✅ |
Appendix B: References
Tier 1 — Lovable documentation (all fetch-verified 2026-08-15):
- Privacy & security settings · SSO · SCIM · Verified domains · 2FA · People & roles
- Security features & scans · Security view · Security center · Security best practices · Sensitive data scanning · Audit logs
- Secrets · Build secrets · Storage · Database & RLS · Authentication · Email auth · Advanced settings
- Publish & visibility · Project visibility · Share & preview links · Remix · Custom domains · Analytics
- Connector admin controls · Integration security · GitHub integration · Supabase integration · MCP server · Lovable API (scope)
- AI training opt-out · Account settings · Delete account · Delete workspace · Privacy policy
Tier 3/4 — research and incidents:
- CVE-2025-48757 — Lovable RLS bypass, CVSS 9.3 (researcher: Matt Palmer)
- Guardio Labs — VibeScamming benchmark
Changelog
| Version | Date | Changes |
|---|---|---|
| 0.1.0 | 2026-08-15 | Initial guide: 25 controls across identity (SSO/SCIM/2FA/verified domains), workspace access governance (roles, invitations, project access, publishing, GitHub), AI-agent surfaces (connectors with the not-enforced-after-publishing boundary, MCP toggles, workspace knowledge), data protection (secrets, storage, DLP, data boundaries), published-app security (RLS/CVE-2025-48757, app auth, scan gates, custom domains/VibeScamming), privacy (training opt-out deadline 2026-09-09, passive channels, non-configurable floor), and monitoring (audit-log export cadence, Security Center). Honest automation story: no admin API/CLI exists; SCIM is the sole programmatic surface (one pack). Tier 2 negatives (no CIS/STIG/SCuBA) cited. Authored by Claude Code (Opus 5). |
Contributing
Found an issue or improvement? Open an issue or PR on GitHub. Lovable ships settings rapidly — plan-gating and defaults drift; currency PRs welcome.