mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-06 21:46:40 +02:00
c151fabfca
Community PR #664 by @mr-k-man (security audit round 1, new parts only). - IPv6 ULA prefix blocking (fc00::/7) in url-validation.ts with false-positive guard for hostnames like fd.example.com - Cookie value redaction for tokens, API keys, JWTs in browse cookies command - Per-tab cancel files in killAgent() replacing broken global kill-signal - design/serve.ts: realpathSync upgrade prevents symlink bypass in /api/reload - extension: targeted getToken handler replaces token-in-health-broadcast - Supabase migration 003: column-level GRANT restricts anon UPDATE scope - Telemetry sync: upsert error logging - 10 new tests for IPv6, cookie redaction, DNS rebinding, path traversal Co-Authored-By: mr-k-man <mr-k-man@users.noreply.github.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
26 lines
1.2 KiB
SQL
26 lines
1.2 KiB
SQL
-- 003_installations_upsert_policy.sql
|
|
-- Re-add a scoped UPDATE policy for installations so the telemetry-ingest
|
|
-- edge function can upsert (update last_seen) using the caller's anon key
|
|
-- instead of the service role key.
|
|
--
|
|
-- Migration 002 dropped the overly broad "anon_update_last_seen" policy
|
|
-- (which allowed UPDATE on ALL columns). This replacement uses:
|
|
-- 1. An RLS policy to allow UPDATE (required for any row access)
|
|
-- 2. Column-level GRANT to restrict anon to only the tracking columns
|
|
-- the edge function actually writes (last_seen, gstack_version, os)
|
|
--
|
|
-- This means anon callers cannot UPDATE first_seen or installation_id,
|
|
-- closing the residual risk from the broad RLS-only approach.
|
|
|
|
-- RLS policy: allow UPDATE on rows (required for PostgREST/upsert)
|
|
CREATE POLICY "anon_update_tracking" ON installations
|
|
FOR UPDATE
|
|
USING (true)
|
|
WITH CHECK (true);
|
|
|
|
-- Column-level restriction: anon can only UPDATE these three columns.
|
|
-- PostgreSQL GRANT UPDATE (col, ...) is enforced at the query level —
|
|
-- any UPDATE touching other columns will be rejected with a permission error.
|
|
REVOKE UPDATE ON installations FROM anon;
|
|
GRANT UPDATE (last_seen, gstack_version, os) ON installations TO anon;
|