Repository navigation
[Tracking] Security review 2026-10-06 fixes #416
Copy link
Copy link
Labels
SecuritySecurity, access control, and data exposureSecurity, access control, and data exposure
Milestone
Description
Activity
- added sub-issues
on Oct 6, 2026 18 remaining items
- added sub-issues
on Oct 6, 2026 - changed the title
[-]Tracking: security review 2026-10-06 fixes (due Friday 2026-10-09)[/-][+][Tracking] Security review 2026-10-06 fixes[/+]on Oct 6, 2026 - addedSecuritySecurity, access control, and data exposureSecurity, access control, and data exposure
on Oct 6, 2026 - added sub-issues
on Oct 6, 2026 Handoff, 2026-10-06
The session that produced this review is closing. A new session starts here.
Branch
claude/youthful-lovelace-3nvsc6is 15 commits ahead ofmainand 2 behind; last commitd5117e7.- A test merge with
mainshows no conflict. - No pull request is open yet.
Fixed on the branch (each closes when the branch merges into
main): #397, #398, #399, #401, #403, #404, #406, #407, #409, #410, #411, #413, #414, #417. Changelogs and agent docs are updated in7560222andd5117e7.Next steps, in order
- Maintainer settings: Require approval before fork pull requests run workflows #440 (fork approval) and Confirm the password-token hook is on, and correct the connected-app docs #441 (password hook). Both take minutes.
- Maintainer decisions: see "Decisions the maintainer must make" above, including the
proxy.tsedits in Stop the sign-in error page from showing text from the URL #411 and Use a cryptographic random source for new document slugs #442. - Merge
maininto the branch, open the pull request, and let CI run extension Cypress. Cloud sessions cannot download the Cypress binary, so that gate did not run locally (seeAGENTS.md§Learned Workspace Facts). - After the merge, deploy in this order:
- migrations
20261006120000, then20261006130000; - the apps;
- the recovery SQL in Bring back push on Chrome and Android devices the server switched off #417, soon after deploy;
- the staging checks in Keep server secrets out of the webapp and admin-dashboard containers #403;
- push on real devices;
- the read-only checks in Stop signed-in users from squatting a workspace slug to block chat #409 and Carry the production function revokes in the Supabase migrations #397.
- migrations
- Continue the order of work above, starting with Make a Private document's chat readable and writable only by its owner #396 and Stop clients from writing server-owned columns on chat messages #400.
Environment notes for a cloud session
- Install with
CYPRESS_INSTALL_BINARY=0 bun install --frozen-lockfile. - Run checks with
LC_ALL=C.UTF-8. - To run Cypress there, add
download.cypress.ioto the environment's allowed network domains.
Generated by Claude Code
Status, 2026-10-09
Deployed to prod today (run 37906965365, deploy job finished 09:28:41Z, after a migration push of
20261006120000–20261008140000):- All 14 branch fixes: Carry the production function revokes in the Supabase migrations #397 Stop the SSRF filter from treating fcm.googleapis.com as a private address #398 Stop document content from injecting CSS through Highlight and link marks #399 Stop channel members from muting or renaming a channel for everyone #401 Keep server secrets out of the webapp and admin-dashboard containers #403 Record the actor of every admin write action #404 Stop any viewer from pushing a fake Pad title to live viewers #406 Keep a purged document id gone after a PUT or a reconnect #407 Stop signed-in users from squatting a workspace slug to block chat #409 Stop bookmarks and replies from copying a message the user cannot read #410 Stop the sign-in error page from showing text from the URL #411 Keep raw database error text out of production 500 responses #413 Bind dev and local Postgres, Redis and app ports to loopback only #414 Bring back push on Chrome and Android devices the server switched off #417.
- Make a Private document's chat readable and writable only by its owner #396 (Private document chat gate): migration applied; the backfill wrote 3 of 3 mirror rows. Closed.
- Stop clients from writing server-owned columns on chat messages #400 (column grants on chat messages): the prod pre-check was clean. Closed.
- The Bring back push on Chrome and Android devices the server switched off #417 recovery ran: 4 FCM devices of 3 users are active again.
Decisions taken today:
- Stop the sign-in error page from showing text from the URL #411: the
proxy.tsedit is accepted, because it touches only the auth-error branch. It is deployed. - Carry the production function revokes in the Supabase migrations #397: the scope cut is accepted. Follow-ups are Revoke PUBLIC and anon EXECUTE on internal schema helpers #469 (the
internalschema helpers) and Remove anon default table privileges on production #470 (anon default table privileges).
Now: every other open sub-issue is being re-validated against today's
main, then built in file-disjoint waves. Maintainer-only steps (#440, #437, and the dashboard half of #441) get their own checklist.
Metadata
Metadata
Assignees
Labels
SecuritySecurity, access control, and data exposureSecurity, access control, and data exposure
Goal
Fix the 34 findings from the 2026-10-06 security review. The first target was Friday 2026-10-09. Every issue below is on the milestone Security review 2026-10-06 and is a sub-issue of this one.
Status (2026-10-09)
All code is deployed (
bbdaae66c, production run 37976785981, green). All migrations are applied, including the late ones for #434 and #402, and verified read-only on production. 22 sub-issues in the list below are closed with evidence.Still open, and why:
pg_monitorexporter role (Give the observability containers least privilege #443).s3cmd setaclfrom a workstation.MEDIA_COOKIE_SECRETis unset.The chatroom Cypress suite passes except
attachments.cy.ts"lists the hover menu rows". That test has failed since it was added (4f2c460d1). It hovers inside the HoverMenu scroll lock, and it needs a ruling. The #427 follow-up is #471.Status (2026-10-06)
14 issues are fixed on branch
claude/youthful-lovelace-3nvsc6. The branch is not merged or deployed yet. Each issue closes when the branch merges intomain.335138d)0f6fc54)b65b33e)335138d)1db1bd3)fd96138, step 1 only)6e5a537)02f7530)335138d)335138d)c6fdc2d, needs a maintainer decision, see below)355502b)0a09b5d)0f6fc54,da0d832,ea384b6,04fa4c0)After the merge, run the #417 runbook. Its recovery queries are in the #417 comment.
Order of work for the open issues
Highest risk first. Inside one severity, the smaller fix goes first.
Critical
High
Medium
Low
proxy.ts.Optional push follow-ups after #417 are listed in #447.
Decisions the maintainer must make
c6fdc2deditsapps/webapp/src/proxy.ts. RootCLAUDE.md§Settled (Next product APIs) forbids that. Accept the edit, or revert only theproxy.tspart.rest-apiDocker healthcheck at/health/database.apps/webapp/src/proxy.ts, which rootCLAUDE.md§Settled protects.productionenvironment settings. Only the maintainer can change them.Risk to the deadline
#396 is L and #402 is M. Together they may not fit in two days. If they slip, ship the Data API read gate of #396 first (anon and non-owner reads refused). That closes the High exposure. Then move the notification and media parts to a follow-up.
Done means
packages/supabase/scripts/.seed.sqlis regenerated withbun run --filter @docs.plus/supabase_back seed.apps/webapp/src/types/supabase.tsis regenerated when a function signature or a column changes.truerows after deploy.Source
Local report:
Notes/local-docs/security-review-2026-10-06.mdand its raw reports. They are not in the repo; the maintainer holds a copy sent on 2026-10-06. Every issue is self-contained, so the report is not needed to execute them.Generated by Claude Code