Skip to content

docs: add SECURITY.md (disclosure policy + config.json threat model) (#72)#82

Merged
BorisTyshkevich merged 1 commit into
mainfrom
docs/security-md
Jun 29, 2026
Merged

docs: add SECURITY.md (disclosure policy + config.json threat model) (#72)#82
BorisTyshkevich merged 1 commit into
mainfrom
docs/security-md

Conversation

@BorisTyshkevich

Copy link
Copy Markdown
Collaborator

Closes #72. Release-blocker for #68 (Roadmap to 1.0.0).

Adds SECURITY.md — the last governance file 1.0's Definition of Done calls for — covering:

  • Disclosure policy: report privately via GitHub private advisory or security@altinity.com; latest-release support window; no public issues for vulns.
  • config.json threat model: it's served to browsers, so treat it as public. Prefer a PKCE public client (the supported deploy/install.sh renders a secret-free config by construction); if a client_secret is unavoidable, lock the redirect URI to exactly https://<host>/sql. Mirrors CLAUDE.md hard rule 3 + the README "Configuring OAuth" section.
  • Token handling: id/access/refresh + PKCE state/verifier live in sessionStorage (tab-lifetime), never localStorage/cookies.
  • CSP baseline: default-src 'none' with connect-src bounding exfiltration; operators must ship deploy/http_handlers.xml's headers.
  • Operator responsibilities (ClickHouse RBAC, IdP config, TLS) called out as out of scope for the client.

Also links SECURITY.md from the README and notes it in the CHANGELOG.

On the optional deploy-time secret warning (#72)

deploy/install.sh has no client_secret input — it never renders one — so a warning there would be a no-op. SECURITY.md instead documents this as a strength (the supported path is secret-free) and points the redirect-lock requirement at the hand-authored configs where a secret can actually appear. No code change made.

Note

Used security@altinity.com as the disclosure contact — swap it if Altinity prefers a different channel.

🤖 Generated with Claude Code

…72)

Release-blocker for 1.0 (#68). Adds a vulnerability-disclosure policy
(GitHub private advisory / security@altinity.com, latest-release support
window) and formalizes the threat model the README only described prose-style:

- config.json is served to browsers → treat as public; prefer a PKCE public
  client (the supported install.sh renders a secret-free config by
  construction); if a client_secret is unavoidable, lock the redirect URI to
  exactly https://<host>/sql (mirrors CLAUDE.md hard rule 3 + README).
- Token handling: id/access/refresh + PKCE state/verifier live in
  sessionStorage (tab-lifetime), never localStorage/cookies.
- CSP baseline: default-src 'none' with connect-src bounding exfiltration;
  ship deploy/http_handlers.xml's headers.
- Operator responsibilities (ClickHouse RBAC, IdP config, TLS) called out as
  out of scope for the client.

Also links SECURITY.md from the README "Security headers" section and notes it
in the CHANGELOG.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PgV4UResR7braUkAq7VaCr
@BorisTyshkevich BorisTyshkevich merged commit bd98ea4 into main Jun 29, 2026
6 checks passed
@BorisTyshkevich BorisTyshkevich deleted the docs/security-md branch June 29, 2026 11:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add SECURITY.md: disclosure policy + client_secret-in-config.json threat model

1 participant