0025_public_bucket_allows_listing silently returns zero findings when splinter.public_buckets is unset — undocumented transaction-local contract
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Inizia con la query 0025_public_bucket_allows_listing e il relativo preambolo nel splinter.sql compilato, poi confronta i campi separati query e setup in splinter.json. Esamina il README e l’invocazione CI psql --single-transaction per documentare il contratto del GUC locale alla transazione. Il lavoro è completato quando un’impostazione assente non può produrre silenziosamente un risultato pulito, con un comportamento che copra sia il setup saltato sia un elenco di bucket legittimamente vuoto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Since #170 ("chore: 0025 query_to_xml workaround", merged 2026-07-02), 0025_public_bucket_allows_listing no longer reads storage.buckets itself. The view now reads a GUC:
coalesce(
nullif(pg_catalog.current_setting('splinter.public_buckets', true), '')::pg_catalog.jsonb,
'[]'::pg_catalog.jsonb
)
and the storage.buckets read moved into a preamble DO block that exists only in the compiled splinter.sql, which populates the GUC transaction-locally:
perform pg_catalog.set_config('splinter.public_buckets', buckets, true);
Consequence: any consumer that executes the lint query without running that preamble in the same transaction gets zero findings — indistinguishable from a genuinely clean result. The lint fails open. #170 itself had to switch this repo's CI runner to psql --single-transaction to keep the GUC visible, which illustrates the hazard: the contract is real, but it lives only in the compiled artifact and CI invocation, and the README documents the pgrst.db_schemas dependency while splinter.public_buckets is undocumented.
Real-world impact (hosted advisor path)
On our hosted project, 0025 reported two findings (user-avatars, workspace-branding) through 2026-06-10. Sometime after #170, the findings disappeared from the hosted security-advisor results while both flagged conditions still hold — we re-verified by executing the lint's own predicate manually with the bucket list supplied: both broad PERMISSIVE SELECT policies still exist and both findings reproduce exactly. We can't inspect the hosted advisor runner, but the observable symptom is precisely what a runner that doesn't execute the preamble in-transaction would produce, and no other 0025-touching change exists in the window.
For an advisor whose job is to flag data exposure, "input not supplied" being indistinguishable from "no exposure found" seems worth closing: consumers (including us) read the absence of findings as a clean bill.
The same hazard is now formalized in the manifest
The versioned splinter.json manifest publishes per-lint query fields with a separate setup field. A consumer that runs a lint's query without executing setup in the same transaction reproduces the same silent zero for 0025.
Prior art
This is the same failure class as the unset-pgrst.db_schemas case (supabase/cli#5868, fixed by #168 coalescing to 'public'). The difference: 0025 has no sane inline default available — an empty bucket list doesn't degrade the lint, it disables it silently.
Suggestions
- Document the
splinter.public_bucketscontract in the README alongsidepgrst.db_schemas, including the transaction-local requirement. - Prefer fail-loud over fail-open: when the setting is absent (as opposed to a legitimately empty
[]), either raise, or emit a sentinel "not evaluated" row, so runners that skip the preamble become visible instead of silently green. - Alternatively, restore a self-contained fallback: read
storage.bucketsdirectly when the GUC is absent and thestorageschema exists (the pre-#170 behavior), using whatever construction avoids the originalquery_to_xmlproblem that motivated #170.
Happy to provide the manual reproduction steps or test against a fix.
- Lingua principale
- PLpgSQL
- Stelle
- 284
- Fork
- 110
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di supabase/splinter
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
supabase/splinter#206 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
0002_auth_users_exposed false positive: pg_depend join lacks a refclassid filter (cross-catalog OID collision)Forse già presa @tushardev-365 l’ha presa 95 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 40/100
supabase/splinter#210 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
0030_autovacuum_disabled misses tables where autovacuum_enabled is set to off, 0 or noForse già presa @RaphaelFakhri l’ha presa 8 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
-
Proposal: lint for RLS policies whose role lacks the table privilege (policy_without_privilege)Forse già presa @larik15 l’ha presa 28 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 1/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di supabase/splinter
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
microsoft/agent-framework#9946 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 Mezza giornata Idoneità per principianti 62/100
rmax/scrapy-redis#337 ·
-
Advanced search: created_at:!= combined with another term returns entries that do not match itAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Index conflicts report and internal errorForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertatriage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
chriskelly/wish-together#102 ·
I maintainer di solito rispondono entro 1 giorno