glossary
Incomplete GDPR Delete Flow
Incomplete GDPR Delete Flow is a Supabase security risk where delete flows remove top-level records but leave recoverable personal data behind, . This page explains it in plain English, then goes deeper into how it works in Supabase/Postgres, what commonly goes wrong, and how to fix it without relying on fragile client-side rules.
What “Incomplete GDPR Delete Flow” means (plain English)
Incomplete GDPR Delete Flow happens when delete flows remove top-level records but leave recoverable personal data behind. In simple terms, the app looks protected in the UI, but the database or API boundary still allows behavior an attacker can trigger directly. In Supabase projects, this usually shows up when grants, policies, and backend enforcement are not aligned.
How Incomplete GDPR Delete Flow works in Supabase/Postgres (technical)
Incomplete GDPR Delete Flow is typically rooted in a mismatch between Postgres privileges, Row Level Security policy semantics, and request paths exposed through PostgREST, RPC, Storage, or Edge Functions. Attackers bypass frontend constraints and call the exposed API surface directly with anon or authenticated credentials. Effective remediation combines least-privilege grants, explicit server-side authorization, strict input constraints, and repeatable verification queries after every migration.
Attack paths & failure modes for Incomplete GDPR Delete Flow
- Incomplete GDPR Delete Flow: direct API bypass: A frontend flow appears restricted, but an attacker calls the same endpoint or table path directly with client credentials. Because Incomplete GDPR Delete Flow is not fully mitigated, unauthorized reads or writes succeed outside intended app behavior.
- Incomplete GDPR Delete Flow: migration drift regression: Security controls were corrected in a prior release, but a later schema migration introduced a new object or permission path. The change unintentionally recreated Incomplete GDPR Delete Flow and restored an exploitable access route.
- Incomplete GDPR Delete Flow: direct API bypass: Authorization relied on UI logic and partial policy checks instead of a strict backend boundary. Grants and execution paths still allowed access in ways that were never intended for untrusted clients.
- Incomplete GDPR Delete Flow: migration drift regression: The migration process lacked security guardrails for new tables, functions, and grants. Changes merged successfully, but no automated checks validated least-privilege posture post-deploy.
- The configuration doesn’t match what the UI implies (direct API access bypasses the app).
- Policies/grants drift over time and widen access without anyone noticing.
- Fixes are applied without verification, leading to false confidence.
Why Incomplete GDPR Delete Flow matters for Supabase security
When Incomplete GDPR Delete Flow exists, incidents are rarely noisy at first: data access may look like normal traffic until a full extraction or unauthorized mutation is already underway. This risk compounds over time because schema changes and new features reintroduce similar paths unless there is a deterministic hardening workflow. Closing this gap protects user trust, reduces legal/compliance exposure, and prevents expensive emergency rotations or rollbacks.
Common Incomplete GDPR Delete Flow mistakes that lead to leaks
- Assuming Incomplete GDPR Delete Flow is prevented by frontend checks alone, even though direct API calls can bypass UI logic completely in production conditions.
- Applying one-off fixes without adding repeatable verification steps, so the same exposure returns after migrations or refactors.
- Keeping broad grants or permissive function access because it is convenient during development, then forgetting to tighten it before release.
- Incomplete GDPR Delete Flow: direct API bypass: Authorization relied on UI logic and partial policy checks instead of a strict backend boundary. Grants and execution paths still allowed access in ways that were never intended for untrusted clients.
- Incomplete GDPR Delete Flow: migration drift regression: The migration process lacked security guardrails for new tables, functions, and grants. Changes merged successfully, but no automated checks validated least-privilege posture post-deploy.
Where to look for Incomplete GDPR Delete Flow in Supabase
- Your grants, policies, and any direct client access paths.
- Storage and RPC settings (common blind spots).
How to detect Incomplete GDPR Delete Flow issues (signals + checks)
Use this as a quick checklist to validate your current state:
- Try the same queries your frontend can run (anon/authenticated). If sensitive rows come back, you have exposure.
- Verify RLS is enabled and (for sensitive tables) forced.
- List policies and look for conditions that don’t bind rows to a user or tenant.
- Audit grants to
anon/authenticatedon sensitive tables and functions. - Incomplete GDPR Delete Flow: direct API bypass: Never treat frontend checks as authorization.
- Incomplete GDPR Delete Flow: direct API bypass: Test direct API access, not only UI paths.
- Incomplete GDPR Delete Flow: direct API bypass: Use backend-only patterns for sensitive actions.
- Re-test after every migration that touches security-critical tables or functions.
How to fix Incomplete GDPR Delete Flow (backend-only + zero-policy posture)
Mockly’s safest default is backend-only access: the browser should not query tables, call RPC, or access Storage directly.
- Decide which operations must remain client-side (often: none for sensitive resources).
- Create server endpoints (API routes or server actions) for required reads/writes.
- Apply hardening SQL: enable+force RLS where relevant, remove broad policies, and revoke grants from client roles.
- Generate signed URLs for private Storage downloads on the server only.
- Re-run a scan and confirm the issue disappears.
- Add a regression check to your release process so drift doesn’t reintroduce exposure. Fixes that worked in linked incidents:
- Incomplete GDPR Delete Flow: direct API bypass: The team moved sensitive logic to backend-only endpoints, tightened grants, and added explicit ownership checks plus repeatable security verification queries.
- Incomplete GDPR Delete Flow: migration drift regression: The team added migration-time security checks, policy and grant audits in CI, and a mandatory rollback-safe verification checklist for each release.
Verification checklist for Incomplete GDPR Delete Flow
- Attempt direct access using client credentials and confirm it fails.
- Apply a backend-only fix pattern and verify end-to-end behavior.
- Re-run a scan after changes and after the next migration.
- Incomplete GDPR Delete Flow: direct API bypass: Never treat frontend checks as authorization.
- Incomplete GDPR Delete Flow: direct API bypass: Test direct API access, not only UI paths.
- Incomplete GDPR Delete Flow: direct API bypass: Use backend-only patterns for sensitive actions.
- Incomplete GDPR Delete Flow: direct API bypass: Re-run security checks after each migration.
- Incomplete GDPR Delete Flow: migration drift regression: Security regressions often happen in migrations.
SQL sanity checks for Incomplete GDPR Delete Flow (optional, but high signal)
If you prefer evidence over intuition, run a small set of SQL checks after each fix.
The goal is not to memorize catalog tables — it’s to make sure the access boundary you intended is the one Postgres actually enforces:
- Confirm RLS is enabled (and forced where appropriate) for tables tied to this term.
- List policies and read them as plain language: who can do what, under what condition?
- Audit grants for anon/authenticated and PUBLIC on the tables, views, and functions involved.
- If Storage is involved: review bucket privacy and policies for listing/reads.
- If RPC is involved: review EXECUTE grants for functions and whether privileged functions are server-only.
Pair these checks with a direct API access test using client credentials. When both agree, you can ship the fix with confidence.
Over time, keep a small “query pack” for the checks you trust and run it after every migration. That’s how you prevent quiet regressions.
Prevent Incomplete GDPR Delete Flow drift (so it doesn’t come back)
- Add a repeatable checklist and re-run it after schema changes.
- Prefer backend-only access for sensitive resources.
- Keep one reusable verification test for “Incomplete GDPR Delete Flow: direct API bypass” and rerun it after every migration that touches this surface.
- Keep one reusable verification test for “Incomplete GDPR Delete Flow: migration drift regression” and rerun it after every migration that touches this surface.
Rollout plan for Incomplete GDPR Delete Flow fixes (without breaking production)
Many hardening changes fail because teams revoke direct access first and only later discover missing backend paths.
Use this sequence to reduce both risk and outage pressure:
- Implement and verify the backend endpoint or server action before permission changes.
- Switch clients to that backend path behind a feature flag when possible.
- Then revoke direct client access (broad grants, permissive policies, public bucket reads, or broad EXECUTE).
- Run direct-access denial tests and confirm authorized backend flows still succeed.
- Re-scan after deployment and again after the next migration.
This turns security fixes into repeatable rollout mechanics instead of one-off emergency changes.
Incident breakdowns for Incomplete GDPR Delete Flow (real scenarios)
Incomplete GDPR Delete Flow: direct API bypass
Scenario: A frontend flow appears restricted, but an attacker calls the same endpoint or table path directly with client credentials. Because Incomplete GDPR Delete Flow is not fully mitigated, unauthorized reads or writes succeed outside intended app behavior.
What failed: Authorization relied on UI logic and partial policy checks instead of a strict backend boundary. Grants and execution paths still allowed access in ways that were never intended for untrusted clients.
What fixed it: The team moved sensitive logic to backend-only endpoints, tightened grants, and added explicit ownership checks plus repeatable security verification queries.
Why the fix worked: The fix removes client trust, enforces least privilege at the database boundary, and validates behavior with direct-access tests that mirror attacker behavior.
Key takeaways:
- Never treat frontend checks as authorization.
- Test direct API access, not only UI paths.
- Use backend-only patterns for sensitive actions.
- Re-run security checks after each migration.
Read full example: Incomplete GDPR Delete Flow: direct API bypass
Incomplete GDPR Delete Flow: migration drift regression
Scenario: Security controls were corrected in a prior release, but a later schema migration introduced a new object or permission path. The change unintentionally recreated Incomplete GDPR Delete Flow and restored an exploitable access route.
What failed: The migration process lacked security guardrails for new tables, functions, and grants. Changes merged successfully, but no automated checks validated least-privilege posture post-deploy.
What fixed it: The team added migration-time security checks, policy and grant audits in CI, and a mandatory rollback-safe verification checklist for each release.
Why the fix worked: By treating security posture as part of deployment quality gates, regressions are caught before release and drift no longer accumulates silently over time.
Key takeaways:
- Security regressions often happen in migrations.
- CI should validate grants and policies automatically.
- Release checklists need direct-access testing steps.
- Track security state before and after schema changes.
Read full example: Incomplete GDPR Delete Flow: migration drift regression
Real-world examples of Incomplete GDPR Delete Flow (and why they work)
- Incomplete GDPR Delete Flow: direct API bypass — A real-world pattern where Incomplete GDPR Delete Flow is exploited through direct API calls that bypass frontend assumptions and expose sensitive operations.
- Incomplete GDPR Delete Flow: migration drift regression — A migration introduces drift that reopens Incomplete GDPR Delete Flow despite earlier hardening, creating a realistic regression path in production.
Related terms
- Missing Data Retention Policy →
/glossary/data-retention-policy-missing - No Exfiltration Anomaly Detection →
/glossary/no-anomaly-detection-exfiltration
FAQ
Is Incomplete GDPR Delete Flow enough to secure my Supabase app?
It’s necessary, but not sufficient. You also need correct grants, secure Storage/RPC settings, and a backend-only access model for sensitive operations.
What’s the quickest way to reduce risk with Incomplete GDPR Delete Flow?
Remove direct client access to sensitive resources, enable/force RLS where appropriate, and verify via a repeatable checklist that anon/authenticated cannot query what they shouldn’t.
How do I verify the fix is real (not just a UI change)?
Attempt direct API queries using the same client credentials your app ships. If the database denies access (401/403) and your backend endpoints still work, your fix is effective.
Next step
Want a quick exposure report for your own project? Run a scan in Mockly to find public tables, storage buckets, and RPC functions — then apply fixes with verification steps.
Explore related pages
cross
Remove over-permissive RLS policies (adopt deny-by-default)/templates/access-control/remove-over-permissive-policies