0002_auth_users_exposed false positive: pg_depend join lacks a refclassid filter (cross-catalog OID collision)
Los mantenedores suelen responder en 1 día
@tushardev-365 ya está trabajando en esto.
Desde el 29/7/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
Línea de trabajo
Empieza en lints/0002_auth_users_exposed.sql e inspecciona el join de pg_depend descrito en el issue. Usa la consulta de diagnóstico del informe para reproducir la colisión de OID entre catálogos. Se considera terminado cuando el lint ya no informa de una vista cuya dependencia sea únicamente un objeto pg_proc, pero siga detectando una dependencia de relación en auth.users.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
lints/0002_auth_users_exposed.sql joins the view's rewrite dependencies to auth.users by OID only:
join pg_catalog.pg_depend d
on d.refobjid = auth_users_pg_class.oid
There is no d.refclassid = 'pg_catalog.pg_class'::regclass predicate, so any pg_depend row from a view's rewrite whose refobjid numerically collides with auth.users' pg_class OID — but actually references an object in a different catalog (pg_proc, pg_type, …) — fires the lint.
Observed instance
On one of our projects, auth.users has pg_class OID 16499, and a public view calls a SECURITY DEFINER helper function whose pg_proc OID is also 16499. The view selects only from public tables (verified: zero relation dependency on auth.users), yet the advisor reports it as CRITICAL auth_users_exposed, and the "action required: security vulnerabilities" email goes out weekly.
Diagnostic query that shows the collision:
with au as (
select oid from pg_class
where relname = 'users' and relnamespace = 'auth'::regnamespace
),
rw as (
select oid from pg_rewrite where ev_class = 'public.<your_view>'::regclass
)
select d.refclassid::regclass as ref_catalog,
case when d.refclassid = 'pg_proc'::regclass then d.refobjid::regprocedure::text
when d.refclassid = 'pg_class'::regclass then d.refobjid::regclass::text
else d.refobjid::text end as ref_object,
d.deptype
from pg_depend d, au, rw
where d.objid = rw.oid and d.refobjid = au.oid;
Result on the affected project: one row, ref_catalog = pg_proc, ref_object = <helper function>(text,uuid) — not a relation.
Suggested fix
Add the catalog filter to the join:
join pg_catalog.pg_depend d
on d.refobjid = auth_users_pg_class.oid
and d.refclassid = 'pg_catalog.pg_class'::regclass
(Other OID-equality joins in the lint suite may want the same audit.)
- Lenguaje dominante
- PLpgSQL
- Estrellas
- 284
- Forks
- 110
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de supabase/splinter
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 69/100
supabase/splinter#206 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 40/100
supabase/splinter#210 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
0030_autovacuum_disabled misses tables where autovacuum_enabled is set to off, 0 or noPosiblemente ocupada @RaphaelFakhri la tomó hace 8 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
Los mantenedores suelen responder en 1 día
-
Proposal: lint for RLS policies whose role lacks the table privilege (policy_without_privilege)Posiblemente ocupada @larik15 la tomó hace 28 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 1/100
Los mantenedores suelen responder en 1 día
-
0028/0029 silently report zero findings for projects using a custom PostgREST request rolePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
Todos los issues de supabase/splinter
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
pocoproject/poco#5626 ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
liberation-data/drivine4j#547 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
smswithoutborders/RelaySMS-Publisher#226 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
voidzero-dev/void#677 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
mongoosejs/mquery#142 ·