QA-15 Phase 2c: AUD-08, IAM-23, API-20 (Sicherheitsbehebung) #121

Closed
patrick wants to merge 0 commits from feature/qa-15-phase2c-sicherheitsbehebung into integration/gesamtprojekt
pull from: feature/qa-15-phase2c-sicherheitsbehebung
Owner

Setzt die drei verbleibenden QA-15-Kind-Tickets um: AUD-08 (F-09), IAM-23 (F-10), API-20 (F-14). Details und Entscheidungen in docs/QA-15-PHASE2C-PRUEFPROTOKOLL.md.

AUD-08 — Audit-Export ohne Token in der URL

  • Token per Header (X-Service-Token) statt Query; altes URL-Token wird mit 401 abgewiesen und protokolliert.
  • CORS nur fuer konfigurierte Herkunft (internal/svcauth).
  • web/audit-log: Download per Header-Fetch + Blob statt window.open(url).

IAM-23 — Sitzungssignatur asymmetrisch

  • Neuer Ed25519-Schluesselsatz fuer Sitzungstokens (session_signing_keys, Migration 0010), getrennt von Modul-Signaturschluesseln.
  • account-api signiert, rbac-admin-api/notifyprefs-api pruefen nur noch per JWKS (kein geteiltes Geheimnis mehr noetig).
  • HS256 bleibt optionaler Uebergangspfad; MinHS256SecretLen/ValidateHS256Secret an den drei Diensthauptprogrammen erzwungen.

API-20 — Einheitliche Fehlerantworten mit Korrelations-ID

  • internal/apierror (Core) und archive/internal/apierror: 5xx-Antworten verlieren jeden Handler-Text, stattdessen generische Meldung + Korrelations-ID; 4xx bleibt fachlich verstaendlich.
  • Eingehaengt in httpharden.ListenAndServe/ListenAndServeStreaming (Core 14/15, Archive 5/5 HTTP-Dienste) statt an 116 Einzelstellen.
  • Statischer Architekturtest ueber alle 116 Stellen NICHT umgesetzt (Entscheidung dokumentiert, Folgeticket API-21 vorgeschlagen) — die Laufzeitsperre ist bereits wirksam.

Pruefungen auf 204 (Wegwerf-Cluster, archivdms unberuehrt)

  • go build/go vet Core+Archive: sauber.
  • Neue/betroffene Pakete (apierror, svcauth, auth, moduletrust, audit, httpharden, Archive-Pendants): alle Tests gruen.
  • scripts/e2e-core-dms.sh: 10/10.
  • scripts/e2e-module-keys.sh: PASS, Neustart-Persistenz (gleiche KID) bestaetigt.
  • scripts/gesamt-token-smoke.sh: 60/60 Pruefungen bestanden, Rueckbau-Snapshot identisch.

Kein Merge, kein Deploy.

🤖 Generated with Claude Code

Setzt die drei verbleibenden QA-15-Kind-Tickets um: **AUD-08** (F-09), **IAM-23** (F-10), **API-20** (F-14). Details und Entscheidungen in `docs/QA-15-PHASE2C-PRUEFPROTOKOLL.md`. ## AUD-08 — Audit-Export ohne Token in der URL - Token per Header (`X-Service-Token`) statt Query; altes URL-Token wird mit 401 abgewiesen und protokolliert. - CORS nur fuer konfigurierte Herkunft (`internal/svcauth`). - `web/audit-log`: Download per Header-Fetch + Blob statt `window.open(url)`. ## IAM-23 — Sitzungssignatur asymmetrisch - Neuer Ed25519-Schluesselsatz fuer Sitzungstokens (`session_signing_keys`, Migration 0010), getrennt von Modul-Signaturschluesseln. - `account-api` signiert, `rbac-admin-api`/`notifyprefs-api` pruefen nur noch per JWKS (kein geteiltes Geheimnis mehr noetig). - HS256 bleibt optionaler Uebergangspfad; `MinHS256SecretLen`/`ValidateHS256Secret` an den drei Diensthauptprogrammen erzwungen. ## API-20 — Einheitliche Fehlerantworten mit Korrelations-ID - `internal/apierror` (Core) und `archive/internal/apierror`: 5xx-Antworten verlieren jeden Handler-Text, stattdessen generische Meldung + Korrelations-ID; 4xx bleibt fachlich verstaendlich. - Eingehaengt in `httpharden.ListenAndServe`/`ListenAndServeStreaming` (Core 14/15, Archive 5/5 HTTP-Dienste) statt an 116 Einzelstellen. - Statischer Architekturtest ueber alle 116 Stellen NICHT umgesetzt (Entscheidung dokumentiert, Folgeticket `API-21` vorgeschlagen) — die Laufzeitsperre ist bereits wirksam. ## Pruefungen auf 204 (Wegwerf-Cluster, archivdms unberuehrt) - `go build`/`go vet` Core+Archive: sauber. - Neue/betroffene Pakete (`apierror`, `svcauth`, `auth`, `moduletrust`, `audit`, `httpharden`, Archive-Pendants): alle Tests gruen. - `scripts/e2e-core-dms.sh`: 10/10. - `scripts/e2e-module-keys.sh`: PASS, Neustart-Persistenz (gleiche KID) bestaetigt. - `scripts/gesamt-token-smoke.sh`: 60/60 Pruefungen bestanden, Rueckbau-Snapshot identisch. Kein Merge, kein Deploy. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
patrick added 6 commits 2026-09-22 10:54:17 +02:00
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
API-20: einheitliche fehlerantworten mit korrelations-id (Core, Archive)
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
e3b795633f
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
IAM-23: e2e-Skripte auf Sitzungsschluessel-Konfiguration nachgezogen
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
83de555af4
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
QA-15 Phase 2c: Protokoll-Commit-Hash nachgetragen
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
Archive-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
2b547ff122
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
patrick closed this pull request 2026-09-25 23:30:40 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: scripte/nexarch#121