FixVibe
Covered by FixVibehigh

ЗКСЦВФИКСВИБЕСЕГ0 Неовлашћени приступ подацима преко ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ безбедности на нивоу реда (ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ) ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ1 Недостајућа или погрешно конфигурисана безбедност на нивоу реда (ЗКСЦВФИКСВИБЕТОКЕН2ЗКСЦВ) у ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ апликацијама које подржава ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ може довести до потпуног излагања базе података. ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ2 У апликацијама које подржавају ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ, безбедност података се ослања на безбедност на нивоу реда (ЗКСЦВФИКСВИБЕТОКЕН3ЗКСЦВ). Ако ЗКСЦВФИКСВИБЕТОКЕН4ЗКСЦВ није експлицитно омогућен и конфигурисан са смерницама, сваки корисник са јавним анонимним кључем може да чита, ажурира или брише податке у целој бази података. Ово је посебно критично у ЗКСЦВФИКСВИБЕТОКЕН2ЗКСЦВ окружењима где се ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ клијент често иницијализује јавним кључем ЗКСЦВФИКСВИБЕТОКЕН5ЗКСЦВ. ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ3 ## Импацт ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ4 Неуспех у примени безбедности на нивоу реда (ЗКСЦВФИКСВИБЕТОКЕН6ЗКСЦВ) омогућава неовлашћеним нападачима да траже податке из базе података ЗКСЦВФИКСВИБЕТОКЕН3ЗКСЦВ када су јавне табеле изложене преко анонимне границе ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ. Пошто ЗКСЦВФИКСВИБЕТОКЕН5ЗКСЦВ апликације обично откривају ЗКСЦВФИКСВИБЕТОКЕН4ЗКСЦВ ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ кључ у коду на страни клијента, нападач може да користи овај кључ за директан приступ РЕСТ ЗКСЦВФИКСВИБЕТОКЕН7ЗКСЦВ и позивањем података намењеној апликацији путем логичке базе података. ЗКСЦВФИКСВИБЕТОКЕН2ЗКСЦВ. ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ5 ## Основни узрок ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ6 Подразумевано, Постгрес табеле у ЗКСЦВФИКСВИБЕТОКЕН4ЗКСЦВ захтевају експлицитну активацију безбедности на нивоу реда да би се спречио јавни приступ ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ. Када програмер креира табелу, али заборави да омогући ЗКСЦВФИКСВИБЕТОКЕН7ЗКСЦВ или не успе да дефинише рестриктивне смернице, база података може изложити податке сваком ко поседује ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ кључ пројекта ЗКСЦВФИКСВИБЕТОКЕН2ЗКСЦВ. У ЗКСЦВФИКСВИБЕТОКЕН6ЗКСЦВ апликацијама, приказивање на страни сервера и преузимање на страни клијента такође захтевају пажљиво подешавање клијента ЗКСЦВФИКСВИБЕТОКЕН5ЗКСЦВ тако да аутентификовани кориснички контекст допре до слоја базе података ЗКСЦВФИКСВИБЕТОКЕН3ЗКСЦВ. ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ7 ## Бетонске поправке ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ8 1. **Омогући ЗКСЦВФИКСВИБЕТОКЕН2ЗКСЦВ:** Изврши ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ за сваку јавну табелу која чува податке апликације ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ. ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ9 2. **Дефинишите смернице:** Креирајте посебне смернице које ограничавају приступ на основу статуса аутентификације корисника, као што је ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ. ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ10 3. **Безбедни клијенти на страни сервера:** Када користите ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ, задржите клијенте са улогом само на серверу и још увек примените филтере власништва пре него што вратите податке корисницима ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ. ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ11 ## Како ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ тестира за то ЗКСЦВФИКСВИБЕСЕГЕНД ЗКСЦВФИКСВИБЕСЕГ12 ЗКСЦВФИКСВИБЕТОКЕН3ЗКСЦВ већ покреће ЗКСЦВФИКСВИБЕТОКЕН4ЗКСЦВ ЗКСЦВФИКСВИБЕТОКЕН6ЗКСЦВ проверу само за читање кроз ЗКСЦВФИКСВИБЕТОКЕН0ЗКСЦВ. Скенер открива УРЛ адресу пројекта ЗКСЦВФИКСВИБЕТОКЕН5ЗКСЦВ и јавни анонимни кључ из ЈаваСцрипт пакета истог порекла, тражи од ПостгРЕСТ-а метаподатке јавне табеле и покушава ограничено бирање само за читање да потврди да ли су подаци изложени без корисничке сесије. Не умеће, ажурира, брише нити користи акредитиве за улогу услуге. Репо скенирања такође могу ухватити ово раније преко ЗКСЦВФИКСВИБЕТОКЕН1ЗКСЦВ, који означава СКЛ миграције које креирају јавне табеле без ЗКСЦВФИКСВИБЕТОКЕН2ЗКСЦВ.

In Supabase-backed applications, data security relies on Row Level Security (RLS). If RLS is not explicitly enabled and configured with policies, any user with the public anonymous key can read, update, or delete data across the entire database. This is particularly critical in Next.js environments where the Supabase client is often initialized with a public API key.

CWE-284

Impact

Failure to implement Row Level Security (RLS) allows unauthenticated attackers to query data from a Supabase database when public tables are exposed through the anon boundary [S1]. Because Next.js applications typically expose the Supabase anon key in client-side code, an attacker can use this key to make direct REST API calls to the database, bypassing the intended application logic and accessing sensitive user information [S2].

Root Cause

By default, Postgres tables in Supabase require explicit activation of Row Level Security to prevent public access [S1]. When a developer creates a table but forgets to enable RLS or fails to define restrictive policies, the database may expose data to anyone possessing the project's anon key [S1]. In Next.js applications, server-side rendering and client-side fetching also require careful Supabase client setup so authenticated user context reaches the database layer [S2].

Concrete Fixes

  • Enable RLS: Execute ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; for every public table that stores app data [S1].
  • Define Policies: Create specific policies that restrict access based on the user's authentication status, such as CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Secure Server-Side Clients: When using Next.js, keep service-role clients server-only and still apply ownership filters before returning data to users [S2].

How FixVibe tests for it

FixVibe already runs a read-only Supabase RLS check through baas.supabase-rls. The scanner discovers the Supabase project URL and public anon key from same-origin JavaScript bundles, asks PostgREST for public table metadata, and attempts limited read-only selects to confirm whether data is exposed without a user session. It does not insert, update, delete, or use service-role credentials. Repo scans can also catch this earlier through repo.supabase.missing-rls, which flags SQL migrations that create public tables without ENABLE ROW LEVEL SECURITY.