FixVibe
Covered by FixVibehigh

Абарона Next.js + Supabase: прадухіленне абходу бяспекі на ўзроўні радкоў (RLS)

Праграмы, створаныя з дапамогай Next.js і Supabase, часта спадзяюцца на бяспеку на ўзроўні радкоў (RLS) для абароны даных. Адмова ад уключэння RLS або няправільная налада кліента Supabase можа прывесці да поўнага раскрыцця базы дадзеных, дазваляючы несанкцыянаваным карыстальнікам чытаць або змяняць канфідэнцыяльныя запісы.

CWE-284

Уплыў

Зламыснікі могуць абыйсці логіку прыкладання для чытання, абнаўлення або выдалення запісаў у базе дадзеных, калі бяспека на ўзроўні радка (RLS) не выконваецца належным чынам [S1]. Гэта часта прыводзіць да раскрыцця інфармацыі, якая дазваляе ідэнтыфікаваць асобу (PII) або канфідэнцыяльных даных прыкладанняў карыстальнікам, якія маюць доступ толькі да публічнага ананімнага ключа API.

Першапрычына

Supabase выкарыстоўвае Postgres Row Level Security для кіравання доступам да даных на ўзроўні базы дадзеных, што з'яўляецца фундаментальным для забеспячэння бяспекі даных [S1]. У асяроддзі Next.js распрацоўшчыкі павінны стварыць кліент Supabase, які правільна апрацоўвае файлы cookie і сеансы для падтрымання бяспекі падчас рэндэрынгу [S2] на баку сервера. Уразлівасці звычайна ўзнікаюць, калі:

  • Табліцы ствараюцца без уключанага RLS, што робіць іх даступнымі праз адкрыты ананімны ключ [S1].
  • Кліент Supabase няправільна наладжаны ў Next.js, не можа належным чынам перадаць токены аўтэнтыфікацыі карыстальніка ў базу дадзеных [S2].
  • Распрацоўшчыкі выпадкова выкарыстоўваюць ключ service_role у кодзе на баку кліента, які абыходзіць усе палітыкі RLS [S1].

Канкрэтныя выпраўленні

  • Уключыць RLS: Пераканайцеся, што бяспека на ўзроўні радкоў уключана для кожнай табліцы ў вашай базе дадзеных Supabase [S1].
  • Вызначэнне палітык: Стварыце спецыяльныя палітыкі Postgres для аперацый SELECT, INSERT, UPDATE і DELETE, каб абмежаваць доступ на аснове UID карыстальніка [S1].
  • Выкарыстоўвайце кліенты SSR: укараніце пакет @supabase/ssr для стварэння кліентаў у Next.js, якія правільна кіруюць аўтэнтыфікацыяй на баку сервера і працягласцю сеансу [S2].

Як FixVibe правярае гэта

FixVibe ужо ахоплівае гэта шляхам праверкі разгорнутых праграм і рэпа. Пасіўны модуль baas.supabase-rls выяўляе Supabase пары URL-адрасоў і ананімных ключоў з аднолькавых пакетаў JavaScript, запытвае ў PostgREST публічныя метададзеныя табліцы і выконвае абмежаваны выбар толькі для чытання, каб пацвердзіць доступ ананімных даных без змены даных кліентаў. Сканаванне рэпазітара таксама запускае repo.supabase.missing-rls, каб пазначыць міграцыі SQL, якія ствараюць агульнадаступныя табліцы без ENABLE ROW LEVEL SECURITY, а сакрэтнае сканаванне шукае выкрыццё ключа ролі службы, перш чым ён дасягне браўзера.