Add docs/vs-nfd/: the analysis brief, the as-is assessment (42 findings, all verified against the code), the prioritized action plan rev. 2 with issue references written back to every checkbox, the two-stage issue/ADR brief, and the full reviewed draft used to create the forge state. Add eight proposed ADRs 0019-0026 covering the VS-NfD architecture decisions: no security base functions (par. 52 VSA anchor), HKDF token key separation, external authentication, page classification, read-access audit trail (variant A), reproducible offline deployment, plugin trust model, and backup target restriction. Forge state created alongside this commit: 11 labels, milestones M24-M31, issues #188-#236 (docs-only change, no code touched). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168Ph5uBmHm8X28CSVpbpnJ
5.8 KiB
Analyse-Auftrag: VS-NfD-Ist-Aufnahme Dorfteich
Diese Datei in das Repo legen (z. B.
docs/vs-nfd/00-analyse-auftrag.md) und Claude Code anweisen: „Arbeitedocs/vs-nfd/00-analyse-auftrag.mdab."
Rahmen
Ziel des Vorhabens: Dorfteich soll in einer nach VSA freigegebenen IT-Umgebung einer Bundesbehörde betrieben werden können — Einstufung VS-NfD. Es wird keine eigene BSI-Zulassung angestrebt.
Leitprinzip, an dem alles zu messen ist: Dorfteich darf keine Sicherheitsgrundfunktion im Sinne von §52 VSA selbst implementieren. Verschlüsselung, Authentisierung, Netzabschluss und Datenträgerschutz gehören auf die Plattform der Behörde. Jede Stelle, an der die Anwendung selbst schützt statt zu delegieren, ist ein Befund.
Diese Analyse ist read-only. Keine Codeänderungen, keine Refactorings, keine Bugfixes. Nur Befunde.
Arbeitsweise
- Jeder Befund braucht einen Fundort:
pfad/zur/datei.ts:123. - Wo du unsicher bist, schreib „unklar" statt zu raten. Eine ehrliche Wissenslücke ist brauchbar, eine erfundene Antwort ist gefährlich.
- Keine Verbesserungsvorschläge im Fließtext — dafür gibt es die Spalte „Handlungsbedarf".
- Bewertungsskala pro Befund:
- OK — unkritisch, keine Anpassung nötig
- ANPASSEN — muss geändert werden, aber überschaubar
- BLOCKIEREND — verhindert den Einsatz, bis es gelöst ist
- UNKLAR — nicht abschließend bewertbar
1. Sicherheitsgrundfunktionen (höchste Priorität)
Beantworte präzise, was die Anwendung selbst tut:
- Authentisierung — Gibt es eine eigene Benutzer-/Passwortdatenbank? Welches Hashing-Verfahren? Existiert bereits OIDC-/SAML-/LDAP-Anbindung oder Unterstützung für Client-Zertifikate / Reverse-Proxy-Header?
- Session-Verwaltung — Eigene Implementierung oder Framework? Wo liegen Sessions (Cookie, Server, Redis)? Wie lange gültig?
- Kryptographie — Wird irgendwo im Code selbst ver-/entschlüsselt oder signiert? Suche nach eigenen Krypto-Aufrufen, nicht nur nach Bibliotheken. Falls ja: Was, womit, warum?
- Zugriffskontrolle — Wie ist das Berechtigungsmodell aufgebaut? Wo wird es durchgesetzt (zentral im Middleware-Layer oder verstreut)? Gibt es Pfade, die es umgehen (API, Suche, Export, Anhänge)?
- Integrität — Gibt es Prüfsummen, Signaturen, Manipulationsschutz?
2. Datenhaltung
- Wo liegen Seiteninhalte — Datenbank, Filesystem, beides?
- Wo liegen Anhänge und hochgeladene Dateien?
- Existiert ein Volltextsuchindex? Welche Technologie, wo persistiert er, und enthält er Klartext der Seiteninhalte?
- Welche weiteren Kopien der Inhalte entstehen im Betrieb — Caches, Thumbnails, Vorschaubilder, Render-Artefakte, Temp-Dateien?
- Wie ist die Revisions-/Versionshistorie abgelegt?
3. Löschen und Vernichtung
- Was passiert beim Löschen einer Seite — Soft- oder Hard-Delete?
- Werden dabei erfasst: Revisionen, Anhänge, Suchindex, Caches, Thumbnails, Papierkorb, Backlinks?
- Gibt es einen Weg, eine Seite samt aller Spuren rückstandsfrei zu entfernen? Falls nein: Was bleibt konkret übrig und wo?
4. Ausgehende Verbindungen
- Liste jede Stelle, an der die Anwendung eine Verbindung nach außen aufbaut oder aufbauen könnte: Update-Checks, Telemetrie, Analytics, Crash-Reporting, Lizenzprüfung, Link-Vorschauen, oEmbed, Avatar-Dienste, Karten, externe Schriften, Icons, Skripte.
- Prüfe auch die gepinnten Fremdmodule (Editor, Flowchart) — laden diese zur Laufzeit etwas nach?
- Backups: Wohin kann konfiguriert werden? Gibt es eine Einschränkung oder ist jedes Ziel erlaubt? Werden Backups verschlüsselt, und wenn ja, wie?
- Läuft die Anwendung vollständig ohne Internetzugang? Was bricht?
5. Ausgabekanäle (für die Kennzeichnungspflicht)
- Liste alle Wege, auf denen Inhalte die Anwendung verlassen: Web-Ansicht, Druck, PDF-/DOCX-Export, API, Feeds, Suchergebnisse, Anhang-Download, Backup.
- Gibt es bereits ein Metadatenmodell pro Seite, in das eine Einstufung aufgenommen werden könnte? Wie ist es strukturiert, und wird es an die Ausgabekanäle durchgereicht?
- Wo genau müsste eingegriffen werden, damit ein Kopf-/Fußaufdruck in allen Ausgaben erscheint? Nenne die konkreten Stellen.
6. Protokollierung
- Was wird heute protokolliert — nur Änderungen oder auch Lesezugriffe?
- Wohin (Datei, stdout, DB)? Ist Syslog-/SIEM-Export möglich?
- Ist die Aufbewahrungsdauer konfigurierbar?
- Landen Inhalte oder personenbezogene Daten in Logs, die dort nicht hingehören?
7. Lieferkette
- Erzeuge eine vollständige Abhängigkeitsliste mit Versionen und Lizenzen.
- Welche Abhängigkeiten sind nicht aus EU-/DACH-Quellen oder haben einen unklaren Maintainer-Status?
- Sind alle Versionen tatsächlich gepinnt — auch transitiv (Lockfiles)?
- Wie läuft das Deployment: Container-Images (welche Basis?), Pakete, Quellcode? Wäre eine Offline-Installation möglich?
8. Betriebsmodell
- Ist die Anwendung mandantenfähig oder Single-Tenant?
- Welche Konfiguration ist zur Laufzeit änderbar, welche nur beim Deploy?
- Gibt es Funktionen, die ein Betreiber hart abschalten kann (Feature-Flags)?
Ergebnis
Schreibe das Resultat nach docs/vs-nfd/10-ist-aufnahme.md mit folgendem
Aufbau:
- Management-Zusammenfassung — max. 15 Zeilen. Wie weit ist Dorfteich vom Ziel entfernt? Was sind die drei größten Brocken?
- Befundtabelle — je Zeile: Nr. | Thema | Fundort | Ist-Zustand | Bewertung | Handlungsbedarf | grobe Aufwandsschätzung (S/M/L)
- Detailbefunde — pro Kapitel oben, mit Codeauszügen wo hilfreich
- Offene Punkte — was du nicht klären konntest und warum
Sortiere die Befundtabelle nach Bewertung: BLOCKIEREND zuerst.