Commit graph

19 commits

Author SHA1 Message Date
willchen96
af5691e773 Update OSS setup docs and remove app legal pages 2026-05-11 03:15:34 +08:00
cosimoastrada
0ac2744a8e
Merge pull request #21 from Metbcy/fix/download-secret-fail-fast
fix(security): fail fast when download HMAC secret is missing (closes #7)
2026-05-11 02:20:27 +08:00
willchen96
a84c1cc113 docs: improve setup guidance and env examples 2026-05-10 22:36:29 +08:00
cosimoastrada
dbbf19697e
Merge pull request #51 from aaronjmars/security/tabular-document-idor
fix(security): scope tabular-review document_ids by access (CWE-639)
2026-05-10 21:03:38 +08:00
cosimoastrada
029181b2ff
Merge pull request #52 from willchen96/sync/jsonb-shared-with-s3-path-style
fix: handle JSONB shared_with filters and path-style S3
2026-05-10 20:23:13 +08:00
willchen96
625bca4d84 fix: handle JSONB shared_with filters and path-style S3 2026-05-10 20:19:30 +08:00
Aeon (aaronjmars)
e261d2e4bd fix(security): scope tabular-review document_ids by access (CWE-639)
The tabular-review routes accept user-supplied document_ids in
request bodies (POST /tabular-review, PATCH /:reviewId) and stale
cell rows on byte-fetching paths (POST /:reviewId/regenerate-cell,
POST /:reviewId/generate). None of those paths checked whether the
caller can read those documents — a free-account attacker could plant
foreign UUIDs into their own review and have the server fetch the
bytes from R2 + run an LLM extraction over them, returning verbatim
text via the standard review GET.

Adds filterAccessibleDocumentIds(documentIds, userId, userEmail, db)
next to the existing access helpers (owner-of-doc OR project member),
and applies it at the four entry points:

- POST /tabular-review               drop unauthorised on insert
- PATCH /:reviewId                   drop newly-added unauthorised; keep
                                     already-attached cells so non-owner
                                     collaborators don't accidentally
                                     orphan rows they can't directly
                                     access
- POST /:reviewId/regenerate-cell    refuse byte fetch when caller has
                                     no access to the underlying doc
- POST /:reviewId/generate           filter docIds before parallel LLM
                                     fetch (defense-in-depth for legacy
                                     cells planted before this fix)

Fails closed silently rather than 403'ing so legacy clients that pass
stale ids don't error out the whole review.

Detected by Aeon + manual review.
Severity: high
CWE-639 (Authorization Bypass Through User-Controlled Key)
2026-05-10 04:50:21 +00:00
cosimoastrada
f40c25d07f
Merge pull request #48 from willchen96/sync/openai-model-support
feat: add OpenAI model support and harden OSS security defaults
2026-05-09 15:07:47 +08:00
willchen96
bef75b082d feat: add OpenAI model support and harden OSS security defaults 2026-05-09 14:55:51 +08:00
cosimoastrada
adc2cf2370
Merge pull request #31 from fayerman-source/codex/safe-local-testing-guide
docs: add safe local testing guide
2026-05-08 23:05:15 +08:00
cosimoastrada
1f191fea59
Merge branch 'main' into codex/safe-local-testing-guide 2026-05-08 23:05:03 +08:00
cosimoastrada
e5a3d6f222
Merge pull request #28 from fayerman-source/codex/validate-project-folders
fix(projects): validate folder ownership before folder mutations
2026-05-08 22:55:15 +08:00
cosimoastrada
7f5dd217d7
Merge pull request #46 from willchen96/sync/security-profile-chat-headers
Sync security and backend profile updates
2026-05-08 21:12:04 +08:00
willchen96
ba6f771144 Sync security and backend profile updates 2026-05-08 20:45:16 +08:00
Eli Fayerman
fce2f2d941 docs: add safe local testing guide 2026-05-04 20:09:05 -04:00
Eli Fayerman
7062a30039 fix project folder boundary checks 2026-05-04 11:59:04 -04:00
Metbcy
eb4414092e fix(security): fail fast when download HMAC secret is missing
Resolves the issue where getSecret() silently fell back to the literal
string "dev-secret" when neither DOWNLOAD_SIGNING_SECRET nor
SUPABASE_SECRET_KEY was set. Because the codebase is public, that
fallback let anyone forge valid /download/:token signatures against a
mis-configured deployment.

- Throw at first call instead of returning the hardcoded string, with a
  message pointing the operator at `openssl rand -hex 32`.
- Document DOWNLOAD_SIGNING_SECRET in backend/.env.example so deployers
  following the README know to set it (and that it should be distinct
  from SUPABASE_SECRET_KEY).

Closes #7
2026-05-03 00:12:44 +00:00
willchen96
d9690965b5 Add local repo contents 2026-04-29 19:49:06 +02:00
willchen96
65739ef1ce Initial empty commit 2026-04-29 19:47:10 +02:00