FixVibe

// docs / baas security / supabase service role exposure

Allwedd service role Supabase wedi'i datgelu yn JavaScript: beth mae'n ei olygu a sut i'w canfod

Y allwedd service role Supabase yw'r prif allwedd i dy gronfa ddata. Mae unrhyw un sy'n ei dal yn osgoi Diogelwch ar Lefel Rhes, gall ddarllen pob colofn o bob tabl, a gall ysgrifennu neu ddileu unrhyw beth a ddewisant. Fe'i bwriadwyd i fyw yn unig mewn cod ochr-gweinydd — byth yn y porwr. Pan fydd offeryn codio AI yn ei llongio i'r bwndel JavaScript, mae dy gronfa ddata, mewn effaith, yn gyhoeddus. Mae'r erthygl hon yn esbonio siâp y JWT sy'n nodi allwedd a gollwyd, y tri phatrwm offeryn-AI sy'n cynhyrchu'r gollyngiad, beth i'w wneud yn yr awr gyntaf ar ôl canfod, a sut i sganio amdano'n awtomatig cyn i ddefnyddwyr wneud.

Beth yw'r allwedd service role

Mae Supabase yn cyhoeddi dwy allwedd benodol ar gyfer pob prosiect: yr allwedd anon (a elwir hefyd yn allwedd cyhoeddadwy mewn prosiectau newydd) a'r allwedd service_role. Mae'r ddau yn JSON Web Tokens a lofnodir gan gyfrinach JWT dy brosiect. Y gwahaniaeth yw'r hawliad role sydd wedi'i bobi i mewn i lwyth tâl y JWT — anon ar gyfer yr allwedd gyhoeddus, service_role ar gyfer y brif allwedd. Mae PostgREST, Storage Supabase, a Auth Supabase i gyd yn newid i fodd osgoi-popeth pan welant yr hawliad service_role.

Datgodia unrhyw allwedd Supabase yn jwt.io ac edrycha ar y llwyth tâl. Mae siâp JWT service-role yn ddiamheuol:

Llwyth tâl wedi'i ddatgodio o JWT service-role (a ddangosir fel bloc sy'n cael ei amlygu gan gystrawen isod).

json
{
  "iss": "supabase",
  "ref": "[project-ref]",
  "role": "service_role",
  "iat": 1700000000,
  "exp": 2000000000
}

Mae prosiectau Supabase newyddach yn cyhoeddi allweddi steil cyfrinachol gyda'r rhagddodiad sb_secret_ yn lle JWT. Mae'r ymddygiad yn unfath — mae unrhyw beth sy'n cario sb_secret_ mewn bwndel cyhoeddus yr un mor drychinebus.

Sut mae offer codio AI yn gollwng yr allwedd service role

Rydym wedi gweld yr un tri phatrwm ar draws miloedd o apiau wedi'u codio gan deimlad. Mae pob un yn dechrau gyda datblygwr yn gofyn i offeryn AI am help ac yn gorffen gyda'r allwedd gwasanaeth wedi'i mewnosod mewn bwndel.

Patrwm 1: Un ffeil .env gyda rhagddodiad NEXT_PUBLIC_

Mae'r datblygwr yn gofyn i'r offeryn AI "sefydlu Supabase" ac yn derbyn un .env gyda'r ddwy allwedd. Mae'r offeryn AI — wedi'i hyfforddi ar gorpws lle mae'r rhan fwyaf o newidynnau amgylchedd yn cael eu datgelu trwy NEXT_PUBLIC_* — yn rhagddodi'r ddau gyda NEXT_PUBLIC_. Mae Next.js yn mewnosod unrhyw beth sy'n cyfateb i'r rhagddodiad hwnnw i'r bwndel cleient ar amser adeiladu. Llongia i Vercel, ac mae'r allwedd gwasanaeth yn main.[hash].js.

Patrwm 2: Allwedd anghywir mewn galwad createClient

Mae'r datblygwr yn gludo'r ddwy allwedd i mewn i ffeil config.ts a gynhyrchodd yr AI, ac mae'r AI yn poblogeiddio'r alwad createClient() ochr-borwr gyda process.env.SUPABASE_SERVICE_ROLE_KEY trwy gamgymeriad. Mae'r adeiladu'n tynnu'r newidyn i mewn, ac mae'r JWT yn glanio yn y bwndel.

Patrwm 3: Allwedd service-role wedi'i chodio'n galed mewn sgriptiau hadu

Mae'r datblygwr yn gofyn i'r offeryn AI ysgrifennu sgript sy'n hadu'r gronfa ddata. Mae'r AI yn codio'r allwedd service-role yn galed yn uniongyrchol i'r ffeil (yn hytrach na darllen o'r amgylchedd), yn ymrwymo'r ffeil i'r ystorfa, ac mae'r ystorfa GitHub gyhoeddus neu lwybr /scripts/seed.js yr ap a leolwyd bellach yn gwasanaethu'r allwedd.

Sut mae sgan bwndel FixVibe yn canfod y gollyngiad

Mae gwiriad cyfrinachau-bwndel FixVibe yn lawrlwytho pob ffeil JavaScript y mae'r ap a leolwyd yn cyfeirio ati — talpiau mynediad, talpiau a lwythwyd yn ddiog, gweithwyr gwe, gweithwyr gwasanaeth — ac yn eu rhedeg trwy ganfyddwr sy'n datgodio unrhyw beth sy'n cyfateb i siâp JWT (eyJ[base64-header].eyJ[base64-payload].[signature]). Os yw'r llwyth tâl datgodedig yn cynnwys "role": "service_role", mae'r sgan yn ei adrodd fel canfyddiad critigol gyda llwybr y ffeil a'r llinell union lle mae'r allwedd yn ymddangos. Mae'r un gwiriad hefyd yn cyfateb i'r patrwm sb_secret_* newydd yn ôl rhagddodiad.

Nid yw'r sgan byth yn dilysu gyda'r allwedd a ddarganfuwyd. Mae'n adnabod y siâp ac yn adrodd y gollyngiad — byddai defnyddio'r allwedd i brofi gallu ecsbloetio yn fynediad anawdurdodedig i dy gronfa ddata. Mae'r prawf yn y llwyth tâl JWT ei hun.

Wedi'i ganfod — beth i'w wneud yn yr awr gyntaf

Mae allwedd service role a gollwyd yn argyfwng amser rhedeg. Tybia bod yr allwedd wedi'i sgrapio — mae ymosodwyr yn monitro bwndeli cyhoeddus mewn amser real. Trin y gronfa ddata fel un sydd wedi'i pheryglu nes y byddi wedi cylchdroi'r allwedd ac archwilio'r gweithgaredd diweddar.

  1. Cylchdroa'r allwedd ar unwaith. Yn Bwrdd Gwaith Supabase, ewch i Project Settings → API → Service role key → Reset. Mae'r hen allwedd yn cael ei annilysu mewn eiliadau. Rhaid diweddaru ac ailddefnyddio unrhyw god ochr-gwasanaeth sy'n defnyddio'r allwedd cyn i'r cylchdroi lanio.
  2. Archwilia weithgaredd diweddar y gronfa ddata. Agor Database → Logs yn y bwrdd gwaith. Hidla ar y 7 diwrnod diwethaf. Edrycha am ymholiadau SELECT * anarferol yn erbyn tablau gyda PII, datganiadau UPDATE neu DELETE mawr, a cheisiadau o IPs y tu allan i'th seilwaith hysbys. Mae Supabase yn cofnodi'r pennawd x-real-ip ar bob cais.
  3. Gwiria wrthrychau storio. Ymweld â Storage → Logs ac adolygu lawrlwythiadau ffeiliau diweddar. Mae allwedd service-role a gollwyd yn rhoi mynediad osgoi-popeth i fwcedi preifat hefyd.
  4. Tynna'r allwedd o reolaeth ffynhonnell. Hyd yn oed ar ôl cylchdroi, mae gadael y JWT yn dy hanes git yn golygu ei fod yn ddarganfyddadwy yn yr ystorfa gyhoeddus. Defnyddia git filter-repo neu BFG Repo-Cleaner i'w glanhau o'r hanes, yna gwthio drwy rym (rhybudd cydweithwyr yn gyntaf).
  5. Ail-sganio ar ôl trwsio. Rheda sgan FixVibe newydd yn erbyn yr ap ailddefnyddiwyd. Dylai'r canfyddiad cyfrinachau-bwndel glirio. Cadarnha bod dim JWT service_role a dim llinyn sb_secret_* yn aros mewn unrhyw dalp.

Atal y gollyngiad yn y lle cyntaf

Y trwsiad strwythurol yw disgyblaeth enwi ynghyd â rheiliau diogelwch ar lefel offer:

  • Byth ragddodi'r allwedd gwasanaeth gyda NEXT_PUBLIC_*, VITE_*, neu unrhyw ragddodiad mewnosod-bwndel arall. Y confensiwn enwi yw'r ffin — mae pob fframwaith yn ei barchu.
  • Cadw'r allwedd gwasanaeth allan o .env yn gyfan gwbl ar beiriant y datblygwr. Darllena hi o reolwr cyfrinachol (Doppler, Infisical, newidynnau env wedi'u hamgryptio Vercel) ar gyfer lleoli, byth ymrwymo'n lleol.
  • <strong>Mark every Supabase client construction with explicit context.</strong> Files named <code>supabase/browser.ts</code> use the anon key; files named <code>supabase/server.ts</code> use the service-role key with <code>import 'server-only'</code> at the top. The <code>server-only</code> import causes a build error if a client component tries to consume the module.
  • <strong>Add a pre-commit hook that greps for JWT-shaped strings.</strong> <code>git diff --staged | grep -E 'eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+'</code> catches both anon and service tokens before they leave your machine.
  • Ychwanega ddrws CI sy'n sganio'r allbwn adeiladu. Ar ôl next build, grepia'r allbwn .next/static/chunks/ am y llinyn service_role. Methu'r adeiladu os bydd unrhyw beth yn cyfateb.
bash
# Pre-commit hook: refuse any staged JWT-shaped string.
git diff --staged \
  | grep -E 'eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+' \
  && echo "JWT detected in staged changes — refusing commit" \
  && exit 1

# CI gate: fail the build if "service_role" shipped to the static bundle.
grep -RE 'service_role|sb_secret_' .next/static/chunks/ \
  && echo "Service-role credential leaked into bundle" \
  && exit 1

Cwestiynau cyffredin

Pa mor gyflym mae ymosodwyr yn canfod allweddi service-role Supabase a ollyngwyd mewn gwirionedd?

Mae sganwyr bwndel cyhoeddus yn olrhain lleoliadau newydd o fewn munudau. Mae ymchwilwyr wedi cofnodi camfanteisio sy'n gweithio yn erbyn prosiectau Supabase newydd mewn llai nag awr o'r lleoliad cyntaf. Trin unrhyw ddatguddiad service-role fel ffenestr 60-munud, nid 60-diwrnod.

A yw cylchdroi'r allwedd yn ddigon, neu a oes rhaid i mi gymryd yn ganiataol y bydd data'n cael ei alldynnu?

Mae cylchdroi'n annilysu'r allwedd a gollwyd ond nid yw'n dadwneud data sydd eisoes wedi'i dynnu. Os yw dy dablau'n cynnwys PII, data taliad, neu unrhyw ddata wedi'i reoleiddio, efallai bod gennyt rwymedigaeth hysbysu o dan GDPR (72 awr), CCPA, neu HIPAA. Archwilia'r logiau ac ymgynghora â chyngor cyfreithiol os yw'r archwiliad yn dangos mynediad amheus.

A all RLS fy amddiffyn os yw'r allwedd service-role yn gollwng?

Na. Mae Diogelwch ar Lefel Rhes yn cael ei osgoi'n llwyr gan yr hawliad service_role. Mae hynny trwy ddyluniad — mae'r allwedd yn bodoli'n union i adael i god cefn osgoi RLS ar gyfer gweithrediadau gweinyddol. Y lliniaru yw gwneud yn siŵr na fydd yr allwedd byth yn cyrraedd cyd-destun lle gall ymosodwr ei darllen.

A yw hyn yn berthnasol i'r model allwedd cyhoeddadwy / cyfrinachol newydd Supabase (<code>sb_publishable_</code> / <code>sb_secret_</code>)?

Ydy — dosbarth risg unfath. Y allwedd sb_secret_* yw'r fformat allwedd cyfrinachol newydd sy'n disodli'r JWT service-role ar gyfer prosiectau newyddach. Mae unrhyw beth sy'n cario sb_secret_* mewn bwndel yr un mor drychinebus â JWT service-role a gollwyd. Mae canfyddwr cyfrinachau-bwndel FixVibe yn cyfateb i'r ddau siâp.

Beth am yr allwedd anon / cyhoeddadwy — a yw hynny'n ddiogel yn y bwndel?

Ydy, trwy ddyluniad. Mae'r allwedd anon wedi'i bwriadu i fyw yn y porwr a hi yw'r hyn y mae pob cleient gwe Supabase yn ei defnyddio. Mae ei diogelwch yn dibynnu'n llwyr ar RLS yn cael ei gyflunio'n gywir ar bob tabl cyhoeddus. Gweler erthygl Sganiwr RLS Supabase am yr hyn i'w wirio.

Camau nesaf

Rheda sgan FixVibe yn erbyn dy URL cynhyrchu — mae'r gwiriad cyfrinachau-bwndel am ddim, dim cofrestru, ac yn adrodd datguddiad service_role mewn llai na munud. Cyplysa hyn gydag erthygl Sganiwr RLS Supabase i ddilysu bod haen RLS yn gwneud ei waith, a Rhestr wirio diogelwch bwced storio Supabase i gloi mynediad ffeiliau. Am gefndir ar pam mae offer AI yn cynhyrchu'r dosbarth gollyngiad hwn mor ddibynadwy, darllena Pam mae offer codio AI yn gadael bylchau diogelwch.

// sganio dy wyneb baas

Canfod y tabl agored cyn i rywun arall wneud.

Gollwng URL cynhyrchu i mewn. Mae FixVibe yn rhifo'r darparwyr BaaS y mae dy ap yn siarad â hwy, yn olrhain eu pwyntiau terfyn cyhoeddus, ac yn adrodd ar yr hyn y gall cleient heb ei ddilysu ei ddarllen neu ei ysgrifennu. Am ddim, dim gosod, dim cerdyn.

  • Haen am ddim — 3 sgan / mis, dim cerdyn cofrestru.
  • Olrhain BaaS goddefol — dim angen dilysu parth.
  • Supabase, Firebase, Clerk, Auth0, Appwrite, a mwy.
  • Awgrymiadau trwsio AI ar bob canfyddiad — gludo'n ôl i Cursor / Claude Code.
Rhedeg sgan BaaS am ddim

dim angen cofrestru

Allwedd service role Supabase wedi'i datgelu yn JavaScript: beth mae'n ei olygu a sut i'w canfod — Docs · FixVibe