A SQL flaw in the relay used to be remote code execution on the database
host: superuser can run COPY … TO PROGRAM. That is the whole reason
this was worth doing regardless of confidence in the query layer.
The bootstrap superuser CANNOT be demoted — Postgres refuses ALTER ROLE flamenet NOSUPERUSER outright — so this is a new scoped role
and a switchover, not a demotion.
The role OWNS its tables rather than holding only DML grants. Fluent
migrates at boot, so a role that cannot create a table would fail the next
deploy that carries a migration — and that failure reads as an application
bug rather than a missing grant.
Cross-database access needed a separate REVOKE CONNECT … FROM PUBLIC;
Postgres grants it by default, so the scoped role could still read pg_catalog in the other database until that was done.
Rehearsed against the real schema AND the real migration rows before being
applied. The first rehearsal failed with "relation devices already
exists" — --schema-only carries that table but none of its rows, so
Fluent tried to create everything again. A rehearsal missing the
bookkeeping is not a rehearsal.
Applied to production and verified: RCE, role creation and the other
database all refused; relay healthy; edge answering 200.
A SQL flaw in the relay used to be remote code execution on the database
host: superuser can run `COPY … TO PROGRAM`. That is the whole reason
this was worth doing regardless of confidence in the query layer.
The bootstrap superuser CANNOT be demoted — Postgres refuses
`ALTER ROLE flamenet NOSUPERUSER` outright — so this is a new scoped role
and a switchover, not a demotion.
The role OWNS its tables rather than holding only DML grants. Fluent
migrates at boot, so a role that cannot create a table would fail the next
deploy that carries a migration — and that failure reads as an application
bug rather than a missing grant.
Cross-database access needed a separate `REVOKE CONNECT … FROM PUBLIC`;
Postgres grants it by default, so the scoped role could still read
`pg_catalog` in the other database until that was done.
Rehearsed against the real schema AND the real migration rows before being
applied. The first rehearsal failed with "relation devices already
exists" — `--schema-only` carries that table but none of its rows, so
Fluent tried to create everything again. A rehearsal missing the
bookkeeping is not a rehearsal.
Applied to production and verified: RCE, role creation and the other
database all refused; relay healthy; edge answering 200.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
A SQL flaw in the relay used to be remote code execution on the database
host: superuser can run
COPY … TO PROGRAM. That is the whole reasonthis was worth doing regardless of confidence in the query layer.
The bootstrap superuser CANNOT be demoted — Postgres refuses
ALTER ROLE flamenet NOSUPERUSERoutright — so this is a new scoped roleand a switchover, not a demotion.
The role OWNS its tables rather than holding only DML grants. Fluent
migrates at boot, so a role that cannot create a table would fail the next
deploy that carries a migration — and that failure reads as an application
bug rather than a missing grant.
Cross-database access needed a separate
REVOKE CONNECT … FROM PUBLIC;Postgres grants it by default, so the scoped role could still read
pg_catalogin the other database until that was done.Rehearsed against the real schema AND the real migration rows before being
applied. The first rehearsal failed with "relation devices already
exists" —
--schema-onlycarries that table but none of its rows, soFluent tried to create everything again. A rehearsal missing the
bookkeeping is not a rehearsal.
Applied to production and verified: RCE, role creation and the other
database all refused; relay healthy; edge answering 200.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
assigned to @paulhitt
mentioned in commit
b75c01e217mentioned in issue #15
changed the description