CDP 35948520: Web Application #25
Reference in New Issue
Block a user
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?
CDP Control ID:
35948520Category: Secure Application Development
Frequency: Biannually
Owner: h.noerenberg
Parent: #1
Requirement & Guidance
Secure Application Development Requirement: Complete ADM and CDP requirements for Web Application Security. Guidance: Confirm compliance through control validation questions. Additional information can be found on CDP website Secure Application Development
Sub-Validation Questions (Compliance-Status pro Frage markieren)
✅ PostgreSQL nur im Docker-Netz, keine Internet-Exposition (Compliance EAPPS 3.2.1.02/03).
⚪ Interne App, nicht Accenture-hosted — Credentials + TOTP MFA statt ADFS/SAML.
⚪ Kein SOAP/WSDL — ausschließlich tRPC/REST.
⚪ Keine Windows Active Directory-Integration — PostgreSQL-User mit ENV-Passwort.
✅ DB-Credentials in ENV (
DATABASE_URL), nicht in Config-Files;.envin.gitignore.✅ Zod-Schemas auf allen tRPC-Input-Pfaden.
✅ Server-Validation via Zod; Prisma parameterized SQL verhindert Injection ohne Character-Rejection; DOMPurify sanitized Rich-Text.
✅ Typed I/O via Zod auf tRPC + Cookies als HttpOnly (kein Client-Write).
✅ Session-State server-only (Auth.js), URL-Params via Next.js typed routes + Zod.
✅ Zod
.min()/.max()auf relevanten Feldern (Compliance EAPPS 3.2.2.3.03).✅ DOMPurify auf Rich-Text; React escapt automatisch; Prisma parameterized SQL.
✅ React auto-escape in JSX; Sensitive Daten nicht in Cookies (HttpOnly Session-only).
✅ DOMPurify auf User-Markdown/Rich-Text; React escapt alle String-Werte.
✅ nginx Reverse Proxy, keine WebDAV-Konfiguration aktiviert.
✅ tRPC nutzt nur GET/POST; andere Methoden nicht exposed (Compliance EAPPS 3.3.1.5.01).
✅ Parent — siehe Sub-Items.
✅
auth.config.tssetzthttpOnly: true+secure: production+sameSite: strictauf allen Cookies.✅ Kein
domainParameter gesetzt (Default = current host only).✅
path: '/'— passend für Single-App-Deployment.✅ Informational — nicht anwendbar bei Root-Deployment.
✅
maxAge: 28800(8h absolute), Session-basiert (kein persistent Cookie).✅ Parent — siehe Sub-Items.
✅ HttpOnly verhindert Client-Write; Server-Side liest nur getypte JWT-Claims.
✅ Auth.js JWT-Signature (HMAC-SHA256 mit
AUTH_SECRET); Mismatch → Session ungültig.🟡 Session-Cookie ist signed (JWT), nicht encrypted. HttpOnly verhindert Einsicht via JS. Follow-up: Auth.js Encrypted-JWE evaluieren, falls sensitive Claims hinzukommen.
✅ Keine User-IDs/Session-IDs in URLs; tRPC nutzt POST-Body + Cookie-Session.
⚪ Kein Silverlight / Flash im Einsatz.
✅
Cache-Control: no-storeglobal + auf Auth-Seiten (Compliance EAPPS 3.3.1.7.01).✅ Auth.js
callbackUrlwird gegen konfigurierte Base-URL validiert; keine Open-Redirects.✅ Login und Mutations über POST (tRPC + Auth.js); keine Credentials in Query-Strings.
🟡 Zod-Schemas sind im Code (einheitliche Quelle), aber kein aggregiertes Test-Input-Inventory-Dokument. Follow-up: Skript, das alle Zod-Schemas extrahiert und als Security-Test-Matrix ausgibt.
🟡 Parent — siehe Sub-Items zu Change-Control-Prozess.
🟡 PR-Review + CI-Checks vorhanden (1 Layer). TODO: 2. Review-Layer für sicherheitskritische Änderungen (z. B. Auth, RBAC) dokumentieren.
🟡
docs/sdlc.mddokumentiert PR-Prozess. TODO: Explizite Security-Change-Review-Sektion ergänzen.🟡 Repo-Owner ist de-facto Final-Approver (CODEOWNERS). TODO: Formal dokumentieren.
🟡 Kleines Team ohne dediziertes Security-Team. TODO: Bei Security-relevanten PRs externen Review einplanen (z. B. Accenture Security-Kontakt).
CapaKraken Action Plan — 35948520 Web Application Security
Scope: Kompletter ADM/CDP-Katalog für Web-Apps (36 Sub-Validation-Fragen siehe Checkbox-Liste unten).
Aktueller Stand (Auszug aus
docs/acn-security-compliance-status.md, 3.3.1 Web Standards — 20+ Controls OK):Mapping der 36 Sub-Validation-Fragen auf vorhandene Nachweise:
docker-compose.prod.yml(3.2.4.01 OK)Todos:
samples/CDP/attestations/webapp.pdfCapaKraken Compliance-Status
EAPPS-Mapping:
3.3.1.x (Web Application Standard)Status: 🟡 PARTIAL / TODO — konkrete Schritte unten
Zusammenfassung
Web-App-Sicherheit ist überwiegend umgesetzt. Die 36 Sub-Validation-Questions in diesem Ticket + 5 Detail-Checklisten decken den vollen Scope ab.
Aktuelle Evidenz
apps/web/next.config.tspackages/api/src/middleware/rate-limit.tsOffene Aufgaben
Ticket bleibt offen bis alle Aufgaben abgehakt sind.
Review-Ergebnis: 36 Sub-Validation-Questions
Detail-Evidenz inline in jedem Check-Item vermerkt.
🟡 Partial-Items (Follow-ups)
⚪ N/A-Items
Q2 (ADFS/SAML), Q3 (WSDL), Q4 (AD account), Q13 (Silverlight/Flash) — Technologien werden in CapaKraken nicht verwendet.
Verwandte Tickets
Empfehlung
Die 4 Partials in Q18.x hängen am Change-Management-Prozess — das läuft als Doku-TODO in Parent-Ticket #1 (Epic). Die 2 anderen Partials (Q11.3 Cookie-JWE, Q17 Input-Inventory) sind kleine Follow-ups.
Keine echten Gaps in den 36 Fragen. Ticket kann nach Abarbeitung von #31 (enthält die 4 Gaps für Password-Handling) geschlossen werden.