[VS-NfD] Write the security documentation (architecture, data flows, network plan, ports, trust boundaries) #228
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#228
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Plan reference:
20-massnahmenplan.md-> Phase 5ADR: ADR 0019
Effort: L (4 AT)
Depends on: —
Context
This is the document an assessor reads first and returns to. It has to be
accurate to the digit on ports, services and trust boundaries.
Current state
inventing:
docs/architecture/security.md,deployment.md,data-model.md,permissions.md,realtime-collaboration.md,plugin-architecture.md, plusdeploy/compose/docker-compose.ymlas theauthoritative service and port list (web, api, collab, backup, db,
gotenberg, pandoc, caddy).
Acceptance criteria
privileges.
Postgres
LISTEN/NOTIFY), export (pandoc/Gotenberg sidecars),backup, and each read channel from #222.
externally exposed, matching the compose files exactly.
(ADR 0008) and the reverse-proxy boundary from #215.
page_updates,page_content_cacheincluding the search vector, versions, backups,export artefacts — because the deletion concept in #229 depends on
this list being complete.
Mermaid), not binary images.
Out of scope
Penetration test and threat model as separate deliverables.
Toolchain versions for the hardening/ops documentation (from #236, PR #257): Node 22.15.1 (single authoritative source: .node-version; consumed by CI/CD via node-version-file, by all Dockerfiles as node:22.15.1-alpine, engines floor >=22.15.1; drift fails CI via an early checks step). pnpm 11.9.0 (packageManager). postgres 17.5-alpine, pandoc/core:3.6, gotenberg:8 (digest pinning tracked in #203). Update procedure: docs/architecture/operations.md, Update strategy section.
From #202 (PR #258, pending): SBOMs are published as build artefacts named supply-chain-vX.Y.Z on each release run of release.yml (one CycloneDX SBOM per image, one for the workspace, plus the pnpm licenses report); license policy lives in scripts/check-licenses.mjs.
From #201 (PR #261): the audit event catalogue - the stable contract for SIEM/syslog rules - lives at docs/architecture/audit-events.md (v1.0). Forwarding path for the ops documentation: container stdout (Docker json-file with rotation) -> operator's collector (promtail/fluent-bit/vector/...) -> syslog/SIEM; there is deliberately no application-side syslog client. Selector: msg prefix 'audit: ', routing hint: the severity field (info|notice|warning|critical).
Web-view marking convention (#206, for the operations manual): the fixed wording VS - NUR FUER DEN DIENSTGEBRAUCH renders as a bold, centered band with top+bottom rules ABOVE and BELOW the page content, in reading view, editor and public view; unclassified pages show nothing. Styling uses only the standard text token, so it holds in light and dark and under every accent theme. Screenshots (light/dark):
Browser print (#207): the same pair repeats as running header+footer on EVERY printed sheet (real-table thead/tfoot mechanism; @page margin boxes are unimplemented in Chromium/Gecko and position:fixed places unreliably). Verified as PDF-from-browser in Chromium 140 and Firefox 153 on a multi-page document; the repeatable procedure is documented in apps/web/e2e/README.md (section Print marking check).
Channel conventions from the rest of M26 (for the operations manual):
Done in commit
f0c6af4(PR #273, CI run 579 green, fast-forward merged on Stefan's standing merge instruction).Evidence: docs/vs-nfd/60-sicherheitsdokumentation.md - component diagram with per-service purpose/privileges (all own images non-root), network plan digit-exact against deploy/compose/docker-compose.yml (127.0.0.1-only app bindings, internal-only data zone, no host binding for db/pandoc/gotenberg/backup), Mermaid data-flow diagrams for auth (fail-closed CSRF, Argon2id, session bounds), realtime editing (60s HKDF collab token, LISTEN/NOTIFY), export (pinned sidecars, marking options), backup (ADR-0026 allowlist) and all nine read channels with their marking; named trust boundaries incl. plugin sandbox and outbound-only SMTP/mirror; complete content-copy list (DB, volumes, outside-instance) as the basis of the #229 deletion concept; crypto inventory. Maintained-in-same-PR rule stated.