Skip to content

Comments

fix(security): restrict get_orgs_v6(userid uuid) access#1677

Merged
riderx merged 9 commits intomainfrom
riderx/fix_get_orgs_v6_auth
Feb 25, 2026
Merged

fix(security): restrict get_orgs_v6(userid uuid) access#1677
riderx merged 9 commits intomainfrom
riderx/fix_get_orgs_v6_auth

Conversation

@riderx
Copy link
Member

@riderx riderx commented Feb 24, 2026

Summary (AI generated)

  • Removed public execution access to the vulnerable public.get_orgs_v6(userid uuid) helper function.
  • Added migration supabase/migrations/20260224091500_fix_get_orgs_v6_access_controls.sql to revoke anon/authenticated and grant only postgres and service_role.
  • Updated supabase/schemas/prod.sql grant section to match the new hardening state.
  • Kept get_orgs_v6() wrapper behavior unchanged for authenticated/API-key callers.

Motivation (AI generated)

The parameterized get_orgs_v6(userid uuid) function can return another user’s organizations without any authorization check and is marked SECURITY DEFINER, creating an unauthenticated data-disclosure vector. Restricting direct grants closes this path.

Business Impact (AI generated)

  • Prevents unauthenticated enumeration and extraction of organization PII, subscription, and billing/usage metadata.
  • Reduces security and compliance risk from mass customer data leakage.
  • Preserves existing admin/service integrations while preventing external abuse.

Test Plan (AI generated)

  • Ran bun lint.
  • Verify the migration applies in a fresh/local database reset flow.
  • Validate that public.get_orgs_v6(userid uuid) is no longer callable by anon/authenticated roles.
  • Verify authenticated/service_role workflows that rely on internal uses of get_orgs_v6(userid uuid) remain functioning through the wrapper path.

Generated with AI

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 24, 2026

Warning

Rate limit exceeded

@riderx has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 27 minutes and 13 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 38ce641 and 8299257.

📒 Files selected for processing (10)
  • package.json
  • src/pages/admin/dashboard/replication.vue
  • supabase/functions/_backend/files/preview.ts
  • supabase/functions/_backend/public/build/index.ts
  • supabase/functions/_backend/public/replication.ts
  • supabase/functions/_backend/utils/version.ts
  • supabase/migrations/20260224091500_fix_get_orgs_v6_access_controls.sql
  • supabase/migrations/20260224100000_fix_webhook_rls_org_scoping.sql
  • supabase/schemas/prod.sql
  • tests/build-upload-head-routing.test.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch riderx/fix_get_orgs_v6_auth

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

riderx and others added 8 commits February 24, 2026 23:27
* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly
* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret
* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup
@sonarqubecloud
Copy link

@riderx riderx merged commit 466a552 into main Feb 25, 2026
14 checks passed
@riderx riderx deleted the riderx/fix_get_orgs_v6_auth branch February 25, 2026 04:29
riderx added a commit that referenced this pull request Feb 25, 2026
* fix(security): revoke anon access to exist_app_v2 rpc

* fix(build): restore TUS HEAD upload routing (#1664)

* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly

* chore(release): 12.116.2

* fix(security): protect replication endpoint (#1686)

* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret

* fix(security): revoke PUBLIC execute on exist_app_v2 rpc

* fix(security): revoke anon execute on exist_app_v2 rpc

* fix(database): enforce org-scoped webhook rls (#1676)

* fix: use exact app_id match for preview lookup (#1674)

* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup

* chore(release): 12.116.3

* fix(security): revoke anon access to exist_app_v2 rpc

* fix(security): revoke PUBLIC execute on exist_app_v2 rpc

* fix(security): revoke anon execute on exist_app_v2 rpc

* fix(frontend): require confirmation before URL login session (#1688)

* fix(frontend): require confirmation for URL session login

* fix(build): restore TUS HEAD upload routing (#1664)

* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly

* chore(release): 12.116.2

* fix(security): protect replication endpoint (#1686)

* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret

* fix(frontend): retain tokens until query login succeeds

* fix(database): enforce org-scoped webhook rls (#1676)

* fix: use exact app_id match for preview lookup (#1674)

* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup

* chore(release): 12.116.3

* fix(frontend): require confirmation for URL session login

* fix(frontend): retain tokens until query login succeeds

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* chore(release): 12.116.4

* Riderx/fix email otp rpc reopen (#1693)

* fix(security): restrict email otp verification rpc path

* fix(security): also revoke otp rpc execute from public

* fix(security): record email otp verification via service-side rpc

* fix(security): harden email otp verification RPC usage

* fix(db): drop legacy record_email_otp_verified overload

* fix(frontend): delete replaced profile images from storage (#1683)

* fix(frontend): delete replaced profile images from storage

* fix(backend): clean stale unlinked user avatars

* fix(build): restore TUS HEAD upload routing (#1664)

* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly

* chore(release): 12.116.2

* fix(security): protect replication endpoint (#1686)

* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret

* fix: address sonar regex exec suggestions

* fix(database): enforce org-scoped webhook rls (#1676)

* fix: use exact app_id match for preview lookup (#1674)

* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup

* chore(release): 12.116.3

* fix(frontend): delete replaced profile images from storage

* fix(backend): clean stale unlinked user avatars

* fix: address sonar regex exec suggestions

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix: restrict find_apikey_by_value RPC to service role (#1672)

* fix(security): restrict find_apikey_by_value to service role

* fix(build): restore TUS HEAD upload routing (#1664)

* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly

* chore(release): 12.116.2

* fix(security): protect replication endpoint (#1686)

* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret

* fix(database): enforce org-scoped webhook rls (#1676)

* fix: use exact app_id match for preview lookup (#1674)

* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup

* chore(release): 12.116.3

* fix(security): restrict find_apikey_by_value to service role

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix: secure get_total_metrics rpc (#1671)

* fix(db): harden get_total_metrics rpc auth

* fix(db): qualify org_id and harden rpc role checks

* fix(db): align get_total_metrics auth overloads

* fix(db): harden get_total_metrics rpc auth

* fix(db): qualify org_id and harden rpc role checks

* fix(db): align get_total_metrics auth overloads

* fix(db): harden get_total_metrics rpc auth

* fix(db): qualify org_id and harden rpc role checks

* fix(db): align get_total_metrics auth overloads

* fix(backend): validate stripe redirect URLs (#1681)

* fix(backend): validate stripe redirect URLs

* fix(build): restore TUS HEAD upload routing (#1664)

* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly

* chore(release): 12.116.2

* fix(security): protect replication endpoint (#1686)

* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret

* test(backend): add stripe redirect validation tests

* test(backend): fix stripe redirect unit test env setup

* fix(database): enforce org-scoped webhook rls (#1676)

* fix: use exact app_id match for preview lookup (#1674)

* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup

* chore(release): 12.116.3

* fix(backend): validate stripe redirect URLs

* test(backend): add stripe redirect validation tests

* test(backend): fix stripe redirect unit test env setup

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* feat(api): auto cleanup EXIF image metadata (#1673)

* feat(api): auto cleanup image metadata on updates

* fix: preserve content type when stripping image metadata

* fix(security): restrict get_orgs_v6(userid uuid) access (#1677)

* fix(security): restrict get_orgs_v6(uuid) execution to private roles

* fix(build): restore TUS HEAD upload routing (#1664)

* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly

* chore(release): 12.116.2

* fix(security): protect replication endpoint (#1686)

* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret

* fix(database): enforce org-scoped webhook rls (#1676)

* fix: use exact app_id match for preview lookup (#1674)

* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup

* chore(release): 12.116.3

* fix(security): restrict get_orgs_v6(uuid) execution to private roles

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix(security): revoke anon access to apikey oracle RPCs (#1670)

* fix(security): restrict apikey oracle rpc execution

* fix(build): restore TUS HEAD upload routing (#1664)

* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly

* chore(release): 12.116.2

* fix(security): protect replication endpoint (#1686)

* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret

* fix: remove anon-backed get_user_id calls in private apikey flows

* fix(database): enforce org-scoped webhook rls (#1676)

* fix: use exact app_id match for preview lookup (#1674)

* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup

* chore(release): 12.116.3

* fix(security): restrict apikey oracle rpc execution

* fix: remove anon-backed get_user_id calls in private apikey flows

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix(security): require capgkey auth in exist_app_v2

* fix(api): block scoped apikey key creation (#1685)

* fix(api): block scoped apikeys from creating keys

* fix(build): restore TUS HEAD upload routing (#1664)

* fix(build): handle tus HEAD upload route

* fix(build): chain HEAD middleware correctly

* chore(release): 12.116.2

* fix(security): protect replication endpoint (#1686)

* fix(security): protect replication endpoint

* fix(api): require replication endpoint internal api secret

* fix(api): allow admin JWT access to replication endpoint

* fix(frontend): use admin session only when no replication secret

* fix(database): enforce org-scoped webhook rls (#1676)

* test: fix apikey test lint violations

* fix: use exact app_id match for preview lookup (#1674)

* fix(backend): use exact app_id match for preview lookup

* fix(backend): preserve case-insensitive preview app lookup

* chore(release): 12.116.3

* fix(api): block scoped apikeys from creating keys

* test: fix apikey test lint violations

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix: restrict webhook secret access to admin-only (#1692)

* fix(security): restrict webhook secret read access

* fix(rls): restrict webhook reads to admins

* fix(security): keep only apikey-based exist_app_v2 check

* fix(security): require capgkey auth in exist_app_v2

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant