Repository navigation
Conversation
hkonsti
added this pull request to stack #89
October 13, 2026 21:06
hkonsti
force-pushed
the
hkonsti/google-7-security
branch
from
October 14, 2026 21:24
bec149f to
9421e73
Compare
hkonsti
force-pushed
the
hkonsti/google-7-security
branch
from
October 14, 2026 21:32
9421e73 to
9db8204
Compare
Google sign-in only needs the profile in the id_token, and nothing ever read the access, refresh and id tokens it wrote to the Account row in plain text. Parse only the id_token from Google's answer and write the identity alone; the columns stay empty for new accounts, and clearing the existing rows and dropping the columns is left to a migration.
Only the web app's files had nosniff, a referrer policy and a framing rule; the api's JSON, its redirects and its 404s had none, and Express announced itself. Set them once in front of everything, deny framing everywhere (nothing frames the web app) with frame-ancestors as well, and add HSTS where APP_URL is https, since neither Render nor Caddy sends it.
The docs and the website are static sites on Render, which adds none of nosniff, a referrer policy, a framing rule or HSTS. Set them in the blueprint, as the app sets them itself.
Without authTagLength, node's decipher takes a tag as short as four bytes, which is far easier to forge; Bun already refuses one, so this states the rule instead of relying on the runtime, and a test keeps it. Flagged by semgrep's gcm-no-tag-length.
…en request decodeURIComponent throws on a malformed percent sequence, which escaped the Do block and became a 500 with a logged stack. Treat it as no credentials, so the client gets invalid_client.
properties[key] found constructor and toString on the prototype, so a tool appeared to take them; parseRecordValues refused them later, but the check meant to say which params a tool takes should say it itself.
hkonsti
force-pushed
the
hkonsti/google-7-security
branch
from
October 14, 2026 21:34
9db8204 to
3bde8f5
Compare
Collaborator
Author
|
Replaced by #147, redone on current main with every check run again. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Security self-check for Google's CASA assessment (AL1), on the repository only: no requests were made to the hosted service, and the DAST run is left for a staging instance.
Scanned with
p/owasp-top-ten,p/typescript,p/nodejs,p/secrets, plusp/default,p/react,p/jwt. 10 findings: one fixed here, the rest false positives or filed.bun audit: two transitive advisories. One has no published fix and is reached only from a dev tool. The other needs Prisma 7.Fixed here
nosniff,Referrer-Policy,X-Frame-Options: DENY,frame-ancestors 'none'and, over https, HSTS on every response, and stops sendingX-Powered-By. The docs and the website get the same headers fromrender.yaml./oauth/tokennow getsinvalid_clientinstead of a 500.constructor.Filed for later
Typecheck, lint and all 419 tests pass.
Stack: verification prep 2 of 2, on #85.
Open workspace in Conductor