Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

SIGSEGV in backend when authenticator role (supautils+safeupdate preloaded) hits a denied-EXECUTE call

オープン
#2,495 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 2 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
活発
技術スタック
postgresql

調査の方向性

Start by reproducing the isolated denied-EXECUTE call with supautils and safeupdate preloaded, then compare it with each library loaded alone. Trace the backend failure from the denied function call; done means the call returns 42501 and the backend connection remains usable.

索引モデルが issue の本文から書いたものです。

説明

Bug report

Calling a function you've been denied EXECUTE on crashes the backend connection
with SIGSEGV instead of returning a clean 42501, when the connecting role has
BOTH supautils and safeupdate in session_preload_libraries — exactly the
authenticator role's default configuration, i.e. what PostgREST uses for
every request via SET ROLE anon/authenticated.

Environment
  • Local Supabase CLI stack (supabase start), Postgres 17.6
  • Nix-packaged build: .../postgresql-and-plugins-17.6/bin/.postgres-wrapped
Reproduction (isolated, trivial function, no app logic involved)
  1. CREATE FUNCTION test_trivial() RETURNS int LANGUAGE sql AS $$ SELECT 1 $$;
  2. REVOKE EXECUTE ON FUNCTION test_trivial() FROM <role>; (schema USAGE still granted)
  3. Connect as authenticator (session_preload_libraries = 'supautils, safeupdate'),
    SET ROLE anon; (or any role denied EXECUTE on the function)
  4. SELECT test_trivial();
  5. Connection dies instantly: "Connection terminated unexpectedly" client-side.
Isolation results
  • supautils alone preloaded, same denied call → clean 42501, no crash.
  • safeupdate alone preloaded, same denied call → clean 42501, no crash.
  • Both together (matching authenticator's real config) → SIGSEGV, 100% reproducible
    on the first call, regardless of function body (tested plain SQL and SECURITY
    DEFINER; not specific to either).
Server-side evidence

dmesg inside the container shows, identically on every occurrence:

segfault at 0 ip <consistent offset> sp ... error 4 in .postgres-wrapped[...]
.postgres-wrapped: potentially unexpected fatal signal 11.

segfault at 0 = NULL-pointer dereference. pg_postmaster_start_time() is
unchanged across every crash — only the individual backend dies, not postmaster.
Ruled out OOM: host VM had 8.8GB free, zero OOM-killer lines in dmesg across the
whole session.

Why this matters

authenticator's preload-library combination is presumably the Supabase default
across all projects. Any real PostgREST request that correctly gets EXECUTE-denied
(a perfectly normal authorization outcome, not misconfiguration) will crash the
backend instead of returning 403, on any project using this default.

Happy to provide the full investigation transcript or test further if useful.

主要言語
Nix
スター
1.8k
フォーク
268
平均マージ
3日 22時間
マージ済み PR(30日)
44

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

supabase/postgres のほかの issue

supabase/postgres の issue をすべて見る

似ている issue

Databases の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。