Skip to content

docs: update SECURITY.md scope and container hardening - #408

Merged
aliasunder merged 3 commits into
mainfrom
worktree-docs-security-scope
Aug 5, 2026
Merged

docs: update SECURITY.md scope and container hardening#408
aliasunder merged 3 commits into
mainfrom
worktree-docs-security-scope

Conversation

@aliasunder

Copy link
Copy Markdown
Owner

Summary

  • Split the Scope section into Server attack surface (what ships in the Docker image) and Reference deployment (the maintainer's IaC — API Gateway, Lambda, Lightsail, CI/CD). Adopters bring their own TLS termination, reverse proxy, and hosting — those aren't part of vault-cortex itself.
  • Fixed stale container hardening details:
    • "two containers sharing a volume" → single container with s6-overlay (:remote target)
    • PID 1 init now documents both targets (tini for :local, s6's /init for :remote)
    • Base image corrected from node:24-slim to node:24-trixie-slim
    • Non-root user documents both user names (node on :local, obsidian on :remote)
    • Removed Compose-specific log rotation (deployer concern, not image hardening)
    • Added daily layer-cache bust note for Debian security patches

Test plan

  • Verify the Scope section reads correctly for both vault-cortex adopters and security researchers
  • Confirm container hardening details match the current Dockerfile

🤖 Generated with Claude Code

Split the Scope section to distinguish vault-cortex's own attack surface
from the maintainer's reference deployment (API Gateway, Lambda, Lightsail,
CI/CD). Adopters bring their own TLS termination and hosting — those
components aren't part of the project itself.

Also fixes stale container hardening details:
- "two containers" → single container with s6-overlay (`:remote` target)
- PID 1 init now documents both targets (tini for `:local`, s6 for `:remote`)
- Base image corrected from `node:24-slim` to `node:24-trixie-slim`
- Non-root user documents both user names (`node`/`obsidian` by target)
- Removed Compose-specific log rotation (deployer concern, not image hardening)
- Added daily layer-cache bust note for Debian security patches

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@umm-actually

umm-actually Bot commented Aug 5, 2026

Copy link
Copy Markdown

Update stale '$5/mo for Obsidian Sync' cost claim in README
Medium severity · correctness · high confidence

README.md:18 — beyond the diff's line ranges, in code the changes touch or depend on.

The README's Deployment Options section states '$5/mo for Obsidian Sync'. The official Obsidian Sync pricing is now $10/mo (raised in late 2025). The ARCHITECTURE.md Cost section correctly states '$5/mo' but both docs are stale — the actual cost is $10/mo.

Failure scenario: A user budgets $5/mo for Obsidian Sync based on the README, then discovers the actual cost is $10/mo when signing up. The documentation is misleading about the total cost of a remote deployment.

Suggested fix
Update '$5/mo' to '$10/mo' in the README's Deployment Options cost line, or link to Obsidian's current pricing page instead of quoting a fixed number.

@umm-actually

umm-actually Bot commented Aug 5, 2026

Copy link
Copy Markdown

Update stale 'non-root user' claim in README Data Integrity section
Medium severity · correctness · high confidence

README.md:315 — beyond the diff's line ranges, in code the changes touch or depend on.

The README says 'non-root user' without distinguishing the two targets. SECURITY.md now correctly documents node on :local and obsidian on :remote. The README's claim is ambiguous and could mislead readers who assume a single user name across both targets.

Failure scenario: A reader checking the README for the non-root user name tries to use 'node' on the remote target and finds the user doesn't exist, or vice versa. The ambiguity creates confusion between the two targets.

Suggested fix
Change 'non-root user' to 'non-root user (`node` on `:local`, `obsidian` on `:remote`, both UID 1000)' to match the SECURITY.md precision.

@umm-actually

umm-actually Bot commented Aug 5, 2026

Copy link
Copy Markdown

Update stale 'PID 1 init (tini)' claim in README Data Integrity section
Medium severity · correctness · high confidence

README.md:316 — beyond the diff's line ranges, in code the changes touch or depend on.

The README's Data Integrity section states 'PID 1 init (tini)' as the single init mechanism. The remote target uses s6-overlay's /init, not tini — this was corrected in SECURITY.md but the README still carries the old claim.

Failure scenario: A reader of the README's Data Integrity section learns that the container uses tini as PID 1 init, then reads SECURITY.md and sees conflicting information about s6-overlay on the remote target. The README's claim is factually wrong for the remote image — which is the production target.

Suggested fix
Change 'PID 1 init (`tini`)' to 'PID 1 init (`tini` on `:local`, s6-overlay's `/init` on `:remote`)' to match the updated SECURITY.md hardening list.

@umm-actually

umm-actually Bot commented Aug 5, 2026

Copy link
Copy Markdown

umm-actually re-reviewed at 8adcaec

1 new finding(s) posted (3 tracked finding(s) across all runs).


umm-actually · deepseek/deepseek-v4-pro

aliasunder and others added 2 commits August 4, 2026 21:03
Obsidian Sync is $4 USD/mo (billed annually), not $5/mo. Updated across
README, ARCHITECTURE, and deploy/remote/README. Also adds explicit USD
currency denomination. Reference deployment total adjusted accordingly
($18–30 → $17–29).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…CURITY.md

Remove `(tini)` qualifier from PID 1 init (both targets have init, not
just tini) and replace `log rotation` (a Compose config concern removed
from SECURITY.md) with `graceful shutdown` (an actual container hardening
item).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Comment thread README.md
@aliasunder

Copy link
Copy Markdown
Owner Author

Addressing the 3 umm-actually PR-level findings:

1. Obsidian Sync pricing ($5/mo claim) — False positive. The bot claims the price is $10/mo; the actual current price is $4 USD/mo billed annually (verified against the Obsidian pricing page by the maintainer). This PR corrects the stale $5/mo to $4 USD/mo across all docs.

2. Non-root user specificity in README — Intentional. The Data Integrity section is a scannable summary linking to SECURITY.md for full detail ("See SECURITY.md → Runtime Hardening for the full attack-surface inventory"). Adding per-target user names to a one-line summary bullet is over-specification — the same bullet says "PID 1 init" without per-target detail, at the same level of summarization.

3. PID 1 init (tini) in README — Already fixed. Commit 8adcaec removed the (tini) qualifier from the README Data Integrity summary. The finding references a pre-fix state.


🔍 ship-check · pr-monitor · claude-opus-4-6[1m]

@aliasunder
aliasunder merged commit b3a35e4 into main Aug 5, 2026
19 checks passed
@aliasunder
aliasunder deleted the worktree-docs-security-scope branch August 5, 2026 01:19
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.

1 participant