@aegis-scan/skills 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ATTRIBUTION.md +93 -0
- package/package.json +1 -1
- package/sbom.cdx.json +1 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/.claude-plugin/plugin.json +108 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/CHANGELOG.md +878 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/HANDOVER-LO-LIVE-VERIFICATION-2026-05-15.md +187 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/README.md +9 -3
- package/skills/compliance/aegis-native/brutaler-anwalt/SKILL.md +93 -14
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/audit.md +193 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/avv-redline.md +246 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/az-verify.md +155 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/cold-start.md +157 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/dsar-respond.md +180 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/health.md +50 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/simulate.md +158 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/post_write.py +315 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/prompt_submit.py +144 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/session_start.py +57 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/triggers.json +191 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/INDEX.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/abmahn-templates.md +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/aegis-integration.md +60 -5
- package/skills/compliance/aegis-native/brutaler-anwalt/references/audit-patterns.md +745 -11
- package/skills/compliance/aegis-native/brutaler-anwalt/references/az-auffuellung-batch1.md +468 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/bgh-urteile.md +106 -30
- package/skills/compliance/aegis-native/brutaler-anwalt/references/branchenrecht.md +247 -2
- package/skills/compliance/aegis-native/brutaler-anwalt/references/checklisten.md +75 -2
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-aufsichtsbehoerden-taetigkeitsberichte-2024.md +310 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-bussgeld-argumentations-layer.md +598 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-dsk-beschluesse.md +346 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/audit-relevance.md +76 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/paragraphs.md +115 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/audit-relevance.md +58 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/paragraphs.md +95 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/audit-relevance.md +60 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/paragraphs.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/audit-relevance.md +73 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/paragraphs.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/audit-relevance.md +72 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/paragraphs.md +103 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/audit-relevance.md +65 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/audit-relevance.md +66 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/paragraphs.md +108 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/audit-relevance.md +80 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/audit-relevance.md +89 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/paragraphs.md +107 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/paragraphs.md +119 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/audit-relevance.md +70 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/paragraphs.md +125 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/audit-relevance.md +70 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/paragraphs.md +116 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/INDEX.md +152 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/audit-relevance.md +64 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/paragraphs.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/audit-relevance.md +63 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/paragraphs.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/audit-relevance.md +61 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/paragraphs.md +96 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/audit-relevance.md +54 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/paragraphs.md +82 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/audit-relevance.md +76 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/paragraphs.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/audit-relevance.md +84 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/paragraphs.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/audit-relevance.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/paragraphs.md +91 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/audit-relevance.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/paragraphs.md +166 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/audit-relevance.md +71 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VERIFICATION-NOTES.md +111 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/audit-relevance.md +65 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/paragraphs.md +101 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/paragraphs.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/audit-relevance.md +64 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/paragraphs.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/audit-relevance.md +68 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/paragraphs.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/dsgvo.md +55 -8
- package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-edpb-guidelines.md +505 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-eugh-dsgvo-schadensersatz.md +223 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/audit-relevance.md +31 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/audit-relevance.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/audit-relevance.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/audit-relevance.md +28 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/audit-relevance.md +35 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/articles.md +4 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/audit-relevance.md +139 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/gpai-pflichten.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/hochrisiko-annex-iii.md +134 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/sanktionen-art-99.md +97 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/transparenz-art-50.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/uebergangsfristen.md +109 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CER-2022-2557/articles.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CRA-2024-2847/articles.md +87 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSDDD-2024-1760/articles.md +43 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSRD-2022-2464/articles.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DGA-2022-868/articles.md +53 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DMA-2022-1925/articles.md +55 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/articles.md +164 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/audit-relevance.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/articles.md +3 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/audit-relevance.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/notice-and-action.md +138 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/small-platform-pflichten.md +109 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/trusted-flaggers.md +77 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/vlop-vlose.md +130 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/articles.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/audit-relevance.md +77 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/articles.md +124 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/audit-relevance.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/NIS2-2022-2555/articles.md +101 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/ProdHaftRL-2024-2853/articles.md +68 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/eIDAS-2024-1183/articles.md +43 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/KWG.md +52 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/PSD2.md +67 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/ZAG.md +50 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/GlueStV/articles.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/audit-relevance.md +27 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HinSchG/articles.md +96 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/JuSchG-JMStV/articles.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/KritisDachG/articles.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/LkSG/articles.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/DiGAV.md +60 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/IVDR-2017-746.md +51 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/MDR-2017-745.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/NIS2UmsuCG-BSIG/articles.md +53 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/StGB/relevante-paragraphen.md +157 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/audit-relevance.md +33 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/paragraphs.md +3 -2
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TKG/articles.md +73 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/audit-relevance.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/paragraphs.md +71 -3
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VERIFICATION-STATUS.md +266 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/audit-relevance.md +37 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/articles.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/it-recht.md +115 -9
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/INDEX.md +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/anthropic-dpa.md +87 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/cookie-banner-pattern.md +202 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/dse-section-pattern.md +198 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/tracking-server-endpoint.md +193 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/auth0-tom.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/clerk-tom.md +84 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/auth-cookies-pattern.md +295 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/cookie-banner-pattern.md +318 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/gdpr-cleanup-celery.md +339 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/cookie-banner-pattern.md +237 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/gdpr-routes-pattern.md +256 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/helmet-csp-pattern.md +207 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/agb-versioning-pattern.md +305 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/cookie-banner-pattern.md +287 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/gdpr-models-pattern.md +290 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/tracking-config-pattern.md +263 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/auth-pattern.md +265 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/cookie-banner-pattern.md +255 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/gdpr-cleanup-cron.md +244 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/tracking-interceptor.md +239 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/api-route-bearer-auth.md +103 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/dynamic-rendering-headers.md +83 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/env-driven-tracking.md +135 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/cookie-banner-pattern.md +294 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/devise-dsgvo-pattern.md +262 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/gdpr-anonymization-pattern.md +283 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/consent-gate-pattern.md +99 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/cookie-banner-pattern.md +204 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/cms-pii-pattern.md +301 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/notice-and-action-plugin.md +371 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/cookie-banner-pattern.md +234 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/dse-section-pattern.md +231 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/sveltekit-server-hooks-pattern.md +217 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/google-analytics-consent.md +129 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/posthog-consent.md +79 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/cookie-banner-pattern.md +208 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/dse-i18n-pattern.md +204 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/nuxt-vs-vue-only-pattern.md +197 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/tracking-pinia-pattern.md +211 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/strafrecht-steuer.md +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/streitwerte.json +176 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSFA-template.md +80 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template-file-upload.md +98 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-EN-international.md +267 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Audit-Klausel-Varianten.md +148 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-CH-revDSG.md +127 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module2-controller-processor.md +180 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module3-processor-subprocessor.md +144 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Sub-Processor-List.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-TOMs.md +197 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-UK-IDTA.md +131 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-standard-DE.md +288 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/Joint-Controller-Vertrag-Art-26.md +265 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/scripts/health-check.sh +190 -48
- package/skills/compliance/aegis-native/brutaler-anwalt/scripts/test-triggers.sh +145 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/settings.json +90 -0
- package/skills/defensive/permoon-fork/README.md +40 -0
- package/skills/defensive/permoon-fork/multi-model-consolidation/SKILL.md +47 -0
- package/skills/defensive/permoon-fork/multi-model-severity/SKILL.md +34 -0
- package/skills/defensive/permoon-fork/multi-model-system-prompt/SKILL.md +40 -0
- package/skills/foundation/aegis-native/aegis-handover-writer/SKILL.md +1 -1
- package/skills/foundation/aegis-native/aegis-quality-gates/SKILL.md +1 -1
- package/skills/offensive/airecon-fork/ctf-crypto/SKILL.md +260 -0
- package/skills/offensive/airecon-fork/ctf-crypto-modern-ciphers/SKILL.md +688 -0
- package/skills/offensive/airecon-fork/ctf-forensics/SKILL.md +253 -0
- package/skills/offensive/airecon-fork/ctf-forensics-network/SKILL.md +480 -0
- package/skills/offensive/airecon-fork/ctf-heap-advanced/SKILL.md +336 -0
- package/skills/offensive/airecon-fork/ctf-pwn/SKILL.md +294 -0
- package/skills/offensive/airecon-fork/ctf-pwn-rop-and-shellcode/SKILL.md +392 -0
- package/skills/offensive/airecon-fork/ctf-reversing/SKILL.md +284 -0
- package/skills/offensive/airecon-fork/frameworks-django/SKILL.md +268 -0
- package/skills/offensive/airecon-fork/frameworks-dotnet/SKILL.md +280 -0
- package/skills/offensive/airecon-fork/frameworks-express/SKILL.md +266 -0
- package/skills/offensive/airecon-fork/frameworks-fastapi/SKILL.md +193 -0
- package/skills/offensive/airecon-fork/frameworks-flask/SKILL.md +297 -0
- package/skills/offensive/airecon-fork/frameworks-laravel/SKILL.md +260 -0
- package/skills/offensive/airecon-fork/frameworks-nextjs/SKILL.md +230 -0
- package/skills/offensive/airecon-fork/frameworks-php/SKILL.md +271 -0
- package/skills/offensive/airecon-fork/frameworks-rails/SKILL.md +269 -0
- package/skills/offensive/airecon-fork/frameworks-spring/SKILL.md +245 -0
- package/skills/offensive/airecon-fork/frameworks-wordpress/SKILL.md +348 -0
- package/skills/offensive/airecon-fork/payloads-command-injection/SKILL.md +459 -0
- package/skills/offensive/airecon-fork/payloads-http-parameter-pollution/SKILL.md +129 -0
- package/skills/offensive/airecon-fork/payloads-ldap-injection/SKILL.md +100 -0
- package/skills/offensive/airecon-fork/payloads-lfi/SKILL.md +485 -0
- package/skills/offensive/airecon-fork/payloads-sqli/SKILL.md +419 -0
- package/skills/offensive/airecon-fork/payloads-ssrf/SKILL.md +125 -0
- package/skills/offensive/airecon-fork/payloads-ssti/SKILL.md +443 -0
- package/skills/offensive/airecon-fork/payloads-xss/SKILL.md +447 -0
- package/skills/offensive/airecon-fork/payloads-xxe/SKILL.md +172 -0
- package/skills/offensive/airecon-fork/postexploit-ad-credential-attacks/SKILL.md +306 -0
- package/skills/offensive/airecon-fork/postexploit-container-escape/SKILL.md +299 -0
- package/skills/offensive/airecon-fork/postexploit-credential-dumping/SKILL.md +249 -0
- package/skills/offensive/airecon-fork/postexploit-lateral-movement/SKILL.md +194 -0
- package/skills/offensive/airecon-fork/postexploit-linux-privesc/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/postexploit-netexec-workflow/SKILL.md +302 -0
- package/skills/offensive/airecon-fork/postexploit-pivoting/SKILL.md +205 -0
- package/skills/offensive/airecon-fork/postexploit-windows-privesc/SKILL.md +210 -0
- package/skills/offensive/airecon-fork/protocols-active-directory/SKILL.md +314 -0
- package/skills/offensive/airecon-fork/protocols-dns/SKILL.md +203 -0
- package/skills/offensive/airecon-fork/protocols-ftp/SKILL.md +159 -0
- package/skills/offensive/airecon-fork/protocols-graphql/SKILL.md +648 -0
- package/skills/offensive/airecon-fork/protocols-kerberos/SKILL.md +168 -0
- package/skills/offensive/airecon-fork/protocols-ldap/SKILL.md +245 -0
- package/skills/offensive/airecon-fork/protocols-rdp/SKILL.md +186 -0
- package/skills/offensive/airecon-fork/protocols-smb/SKILL.md +191 -0
- package/skills/offensive/airecon-fork/protocols-smtp-imap/SKILL.md +263 -0
- package/skills/offensive/airecon-fork/protocols-snmp/SKILL.md +147 -0
- package/skills/offensive/airecon-fork/protocols-ssh/SKILL.md +287 -0
- package/skills/offensive/airecon-fork/reconnaissance-asn-whois-osint/SKILL.md +236 -0
- package/skills/offensive/airecon-fork/reconnaissance-ctf-methodology/SKILL.md +435 -0
- package/skills/offensive/airecon-fork/reconnaissance-dorking/SKILL.md +182 -0
- package/skills/offensive/airecon-fork/reconnaissance-exposed-devtools-detection/SKILL.md +513 -0
- package/skills/offensive/airecon-fork/reconnaissance-full-recon/SKILL.md +305 -0
- package/skills/offensive/airecon-fork/reconnaissance-internal-pentest/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/reconnaissance-javascript-analysis/SKILL.md +167 -0
- package/skills/offensive/airecon-fork/reconnaissance-js-internal-hostname-intelligence/SKILL.md +391 -0
- package/skills/offensive/airecon-fork/reconnaissance-monitoring-secrets-exposure/SKILL.md +394 -0
- package/skills/offensive/airecon-fork/reconnaissance-shodan-censys/SKILL.md +279 -0
- package/skills/offensive/airecon-fork/reconnaissance-subdomain-enum/SKILL.md +952 -0
- package/skills/offensive/airecon-fork/technologies-cicd-attacks/SKILL.md +283 -0
- package/skills/offensive/airecon-fork/technologies-cloud-security/SKILL.md +299 -0
- package/skills/offensive/airecon-fork/technologies-docker-container/SKILL.md +266 -0
- package/skills/offensive/airecon-fork/technologies-elasticsearch/SKILL.md +226 -0
- package/skills/offensive/airecon-fork/technologies-firebase-firestore/SKILL.md +213 -0
- package/skills/offensive/airecon-fork/technologies-frida-hooking/SKILL.md +387 -0
- package/skills/offensive/airecon-fork/technologies-gitlab-github/SKILL.md +259 -0
- package/skills/offensive/airecon-fork/technologies-jenkins/SKILL.md +256 -0
- package/skills/offensive/airecon-fork/technologies-kubernetes-pentest/SKILL.md +281 -0
- package/skills/offensive/airecon-fork/technologies-memcached/SKILL.md +230 -0
- package/skills/offensive/airecon-fork/technologies-mobile-app-pentesting/SKILL.md +105 -0
- package/skills/offensive/airecon-fork/technologies-mongodb/SKILL.md +257 -0
- package/skills/offensive/airecon-fork/technologies-nginx-apache/SKILL.md +280 -0
- package/skills/offensive/airecon-fork/technologies-observability-stack-attacks/SKILL.md +501 -0
- package/skills/offensive/airecon-fork/technologies-redis/SKILL.md +236 -0
- package/skills/offensive/airecon-fork/technologies-supabase/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/technologies-tomcat/SKILL.md +232 -0
- package/skills/offensive/airecon-fork/tools-advanced-fuzzing/SKILL.md +351 -0
- package/skills/offensive/airecon-fork/tools-browser-automation/SKILL.md +300 -0
- package/skills/offensive/airecon-fork/tools-caido/SKILL.md +776 -0
- package/skills/offensive/airecon-fork/tools-code-review/SKILL.md +71 -0
- package/skills/offensive/airecon-fork/tools-dalfox/SKILL.md +189 -0
- package/skills/offensive/airecon-fork/tools-hashcat-john/SKILL.md +258 -0
- package/skills/offensive/airecon-fork/tools-impacket/SKILL.md +227 -0
- package/skills/offensive/airecon-fork/tools-install/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/tools-metasploit/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/tools-nmap/SKILL.md +211 -0
- package/skills/offensive/airecon-fork/tools-nuclei/SKILL.md +175 -0
- package/skills/offensive/airecon-fork/tools-reporting/SKILL.md +47 -0
- package/skills/offensive/airecon-fork/tools-scripting/SKILL.md +1939 -0
- package/skills/offensive/airecon-fork/tools-semgrep/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/tools-source-audit/SKILL.md +308 -0
- package/skills/offensive/airecon-fork/tools-sqlmap/SKILL.md +137 -0
- package/skills/offensive/airecon-fork/tools-tool-catalog/SKILL.md +320 -0
- package/skills/offensive/airecon-fork/tools-wapiti/SKILL.md +293 -0
- package/skills/offensive/airecon-fork/vulnerabilities-2fa-bypass/SKILL.md +219 -0
- package/skills/offensive/airecon-fork/vulnerabilities-account-takeover/SKILL.md +223 -0
- package/skills/offensive/airecon-fork/vulnerabilities-api-schema-exposure/SKILL.md +849 -0
- package/skills/offensive/airecon-fork/vulnerabilities-api-testing/SKILL.md +278 -0
- package/skills/offensive/airecon-fork/vulnerabilities-auth-workflow/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/vulnerabilities-authentication-jwt/SKILL.md +158 -0
- package/skills/offensive/airecon-fork/vulnerabilities-bfla/SKILL.md +156 -0
- package/skills/offensive/airecon-fork/vulnerabilities-blind-xss/SKILL.md +111 -0
- package/skills/offensive/airecon-fork/vulnerabilities-business-logic/SKILL.md +313 -0
- package/skills/offensive/airecon-fork/vulnerabilities-cors/SKILL.md +242 -0
- package/skills/offensive/airecon-fork/vulnerabilities-crlf-injection/SKILL.md +146 -0
- package/skills/offensive/airecon-fork/vulnerabilities-csrf/SKILL.md +200 -0
- package/skills/offensive/airecon-fork/vulnerabilities-csrf-advanced-bypass/SKILL.md +536 -0
- package/skills/offensive/airecon-fork/vulnerabilities-deserialization/SKILL.md +363 -0
- package/skills/offensive/airecon-fork/vulnerabilities-dom-based-vulnerabilities/SKILL.md +105 -0
- package/skills/offensive/airecon-fork/vulnerabilities-exploitation/SKILL.md +286 -0
- package/skills/offensive/airecon-fork/vulnerabilities-grpc/SKILL.md +123 -0
- package/skills/offensive/airecon-fork/vulnerabilities-host-header-injection/SKILL.md +169 -0
- package/skills/offensive/airecon-fork/vulnerabilities-http-smuggling/SKILL.md +411 -0
- package/skills/offensive/airecon-fork/vulnerabilities-idor/SKILL.md +705 -0
- package/skills/offensive/airecon-fork/vulnerabilities-information-disclosure/SKILL.md +867 -0
- package/skills/offensive/airecon-fork/vulnerabilities-insecure-file-uploads/SKILL.md +190 -0
- package/skills/offensive/airecon-fork/vulnerabilities-jwt-attacks/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/vulnerabilities-kubernetes/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/vulnerabilities-mass-assignment/SKILL.md +788 -0
- package/skills/offensive/airecon-fork/vulnerabilities-nosql-injection/SKILL.md +204 -0
- package/skills/offensive/airecon-fork/vulnerabilities-oauth-misconfig/SKILL.md +220 -0
- package/skills/offensive/airecon-fork/vulnerabilities-oauth-saml/SKILL.md +163 -0
- package/skills/offensive/airecon-fork/vulnerabilities-open-redirect/SKILL.md +167 -0
- package/skills/offensive/airecon-fork/vulnerabilities-password-reset-poisoning/SKILL.md +66 -0
- package/skills/offensive/airecon-fork/vulnerabilities-path-traversal/SKILL.md +192 -0
- package/skills/offensive/airecon-fork/vulnerabilities-privilege-escalation/SKILL.md +320 -0
- package/skills/offensive/airecon-fork/vulnerabilities-prototype-pollution/SKILL.md +242 -0
- package/skills/offensive/airecon-fork/vulnerabilities-race-conditions/SKILL.md +192 -0
- package/skills/offensive/airecon-fork/vulnerabilities-rce/SKILL.md +240 -0
- package/skills/offensive/airecon-fork/vulnerabilities-sensitive-file-pii-exposure/SKILL.md +589 -0
- package/skills/offensive/airecon-fork/vulnerabilities-spring4shell/SKILL.md +86 -0
- package/skills/offensive/airecon-fork/vulnerabilities-sql-injection/SKILL.md +313 -0
- package/skills/offensive/airecon-fork/vulnerabilities-ssrf/SKILL.md +183 -0
- package/skills/offensive/airecon-fork/vulnerabilities-ssti/SKILL.md +344 -0
- package/skills/offensive/airecon-fork/vulnerabilities-subdomain-takeover/SKILL.md +160 -0
- package/skills/offensive/airecon-fork/vulnerabilities-supply-chain/SKILL.md +125 -0
- package/skills/offensive/airecon-fork/vulnerabilities-unhandled-exception-differential/SKILL.md +742 -0
- package/skills/offensive/airecon-fork/vulnerabilities-waf-detection/SKILL.md +90 -0
- package/skills/offensive/airecon-fork/vulnerabilities-web-cache-poisoning/SKILL.md +233 -0
- package/skills/offensive/airecon-fork/vulnerabilities-websocket/SKILL.md +180 -0
- package/skills/offensive/airecon-fork/vulnerabilities-xss/SKILL.md +316 -0
- package/skills/offensive/airecon-fork/vulnerabilities-xxe/SKILL.md +222 -0
|
@@ -6,6 +6,97 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## Phase 0: URL-INVENTORY (V4-Pattern, post-DACH-Studio-Audit 2026-05-02)
|
|
10
|
+
|
|
11
|
+
> **PFLICHT vor Phase 1.** Ohne systematische URL-Enumeration uebersieht der
|
|
12
|
+
> Auditor Subsites — und genau dort sitzen oft die kritischen Findings
|
|
13
|
+
> (Pricing-Page → § 312k Kuendigungsbutton; Konfigurator → DSE-Hinweis-Block;
|
|
14
|
+
> /scan → Phase 5f-Surface). Lesson aus DACH-Studio-Audit Round 1: ohne
|
|
15
|
+
> URL-First haetten 4 von 8 Findings gefehlt.
|
|
16
|
+
|
|
17
|
+
### DEFAULT-SCOPE — „Audit alle gefundenen URLs"
|
|
18
|
+
|
|
19
|
+
**Wenn der User nicht explizit eingrenzt** („Audit nur /datenschutz") gilt:
|
|
20
|
+
- ALLE Pages des Repos werden enumeriert.
|
|
21
|
+
- ALLE API-Routes werden enumeriert.
|
|
22
|
+
- ALLE in `<Footer>` + `<Navigation>` verlinkten URLs werden gepruefft.
|
|
23
|
+
- Cross-Page-Konsistenz-Pruefungen (Phase 4 + neue) werden auf den vollen Set angewandt.
|
|
24
|
+
|
|
25
|
+
**Wenn User explizit „nur X" sagt**: nur X auditieren, aber im Output **eine Section „nicht-auditierte URLs"** auflisten — Auditor traegt keine Verantwortung fuer das, was er nicht gesehen hat.
|
|
26
|
+
|
|
27
|
+
### Discovery-Patterns
|
|
28
|
+
|
|
29
|
+
#### Static-Site / Code-Repo
|
|
30
|
+
|
|
31
|
+
| Stack | Pattern |
|
|
32
|
+
|---|---|
|
|
33
|
+
| Next.js App-Router (15/16) | `find src/app -type f -name "page.tsx" -o -name "page.ts"` |
|
|
34
|
+
| Next.js Pages-Router | `find src/pages -type f -name "*.tsx" -o -name "*.ts"` |
|
|
35
|
+
| Next.js API-Routes | `find src/app/api -type f -name "route.tsx" -o -name "route.ts"` |
|
|
36
|
+
| Remix / React-Router | `find app/routes -type f -name "*.tsx" -o -name "*.ts"` |
|
|
37
|
+
| Astro | `find src/pages -type f -name "*.astro"` |
|
|
38
|
+
| Vue / Nuxt | `find pages -type f -name "*.vue"` |
|
|
39
|
+
| WordPress | DB-Query: `wp post list --post_type=page --field=post_name` |
|
|
40
|
+
|
|
41
|
+
#### Live-Site (Black-Box-Audit)
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# 1. Sitemap
|
|
45
|
+
curl -s https://example.com/sitemap.xml | grep -oE "https?://[^<]+" | sort -u
|
|
46
|
+
|
|
47
|
+
# 2. robots.txt
|
|
48
|
+
curl -s https://example.com/robots.txt
|
|
49
|
+
|
|
50
|
+
# 3. Footer + Nav crawl
|
|
51
|
+
curl -s https://example.com | grep -oE 'href="(/[^"]*)"' | sed 's/href="//;s/"//' | sort -u
|
|
52
|
+
|
|
53
|
+
# 4. Common DE-Pflicht-Pfade probe
|
|
54
|
+
for slug in impressum datenschutz agb widerruf widerrufsformular kuendigung scanner-haftungsausschluss erklaerung-zur-barrierefreiheit cookies kontakt; do
|
|
55
|
+
curl -sI "https://example.com/$slug" | head -1
|
|
56
|
+
done
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Pflicht-DE-Subsites-Set
|
|
60
|
+
|
|
61
|
+
Bei DE/EU-Compliance-Audit MUSS der Auditor pruefen, welche dieser Pages
|
|
62
|
+
existieren bzw. Pflicht waeren:
|
|
63
|
+
|
|
64
|
+
| Page | Pflicht wenn | Az. / § |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `/impressum` | IMMER (DE-Anbieter) | § 5 DDG |
|
|
67
|
+
| `/datenschutz` | IMMER (Datenverarbeitung) | Art. 13/14 DSGVO |
|
|
68
|
+
| `/agb` | bei Vertragsanbahnung / B2B/B2C | § 305 ff. BGB |
|
|
69
|
+
| `/widerruf` + `/widerrufsformular` | B2C-Online-Vertrag (Fernabsatz) | § 312g + § 357 BGB |
|
|
70
|
+
| `/kuendigung` | Online-abgeschlossenes B2C-Dauerschuldverhaeltnis | § 312k BGB (BGH I ZR 161/24) |
|
|
71
|
+
| `/scanner-haftungsausschluss` o.ae. | wenn Site Scanner/Audit-Tool als Service anbietet | RDG § 2 (BGH I ZR 113/20) |
|
|
72
|
+
| `/erklaerung-zur-barrierefreiheit` | B2C-Online-Anbieter ab BFSG-Geltung | BFSG seit 28.06.2025 (Mikrounternehmen-Disclosure auch wenn ausgenommen) |
|
|
73
|
+
| Cookie-Settings (Re-Open) | wenn Tracking-Cookies | § 25 TDDDG |
|
|
74
|
+
|
|
75
|
+
### URL-Inventory-Output (Pflicht-Format im Skill-Output)
|
|
76
|
+
|
|
77
|
+
```markdown
|
|
78
|
+
## Audit-Surface (Phase 0)
|
|
79
|
+
|
|
80
|
+
**Pages (N)**: /, /agb, /datenschutz, ...
|
|
81
|
+
**API-Routes (M)**: /api/scan, /api/chat, ...
|
|
82
|
+
**Pflicht-Pages-Konformitaet**:
|
|
83
|
+
- ✅ /impressum vorhanden
|
|
84
|
+
- ✅ /datenschutz vorhanden
|
|
85
|
+
- ❌ /kuendigung FEHLT (KRITISCH bei B2C-Dauerschuldverhaeltnis — siehe Phase 3)
|
|
86
|
+
- ⚠ /erklaerung-zur-barrierefreiheit vorhanden (BFSG-Mikrounternehmen-Disclosure pruefen)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Halt-Condition fuer Phase 0
|
|
90
|
+
|
|
91
|
+
Phase 0 ist erst **abgeschlossen** wenn:
|
|
92
|
+
1. URL-Liste mit min. 5 Pflicht-Pages-Coverage gepruefft (impressum, datenschutz, agb, widerruf, kontakt)
|
|
93
|
+
2. API-Routes enumeriert (wenn Code-Repo verfuegbar)
|
|
94
|
+
3. Output enthaelt explizit „nicht-auditierte URLs" wenn User Scope eingegrenzt hat
|
|
95
|
+
|
|
96
|
+
NICHT in Phase 1 wechseln, bevor Phase 0 sauber.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
9
100
|
## Phase 1: HEADER-AUDIT (curl -sSI)
|
|
10
101
|
|
|
11
102
|
### CSP-Anti-Patterns (sofort 🔴 KRITISCH)
|
|
@@ -27,14 +118,14 @@ Pruefe ob folgende Domains in CSP `script-src`, `style-src`, `font-src`, `connec
|
|
|
27
118
|
|---------------|--------------|
|
|
28
119
|
| `fonts.googleapis.com` | 🔴 KRITISCH — LG Muenchen I 3 O 17493/20, Schadensersatz 100€/Visitor, Massen-Abmahn-Pattern |
|
|
29
120
|
| `fonts.gstatic.com` | 🔴 KRITISCH — siehe oben |
|
|
30
|
-
| `googletagmanager.com` | 🟡 HOCH wenn aktiv — § 25
|
|
31
|
-
| `google-analytics.com` | 🟡 HOCH wenn aktiv — § 25
|
|
121
|
+
| `googletagmanager.com` | 🟡 HOCH wenn aktiv — § 25 TDDDG Consent-Pflicht, EuGH C-673/17 |
|
|
122
|
+
| `google-analytics.com` | 🟡 HOCH wenn aktiv — § 25 TDDDG + Drittlandtransfer USA |
|
|
32
123
|
| `connect.facebook.net` / `*.facebook.com` | 🔴 KRITISCH — Fashion-ID-Mit-Verantwortlichkeit, EuGH C-40/17 |
|
|
33
|
-
| `*.linkedin.com` (Insight Tag) | 🟡 HOCH — § 25
|
|
124
|
+
| `*.linkedin.com` (Insight Tag) | 🟡 HOCH — § 25 TDDDG Consent |
|
|
34
125
|
| `*.x.com` / `*.twitter.com` (Embeds) | 🟡 HOCH — Fashion-ID-Pattern |
|
|
35
126
|
| `*.tiktok.com` / `tiktokapis.com` | 🟡 HOCH — China-Drittland-Layer; CCP-Datenzugriff-Risiko |
|
|
36
127
|
| `*.stripe.com` | 🟢 MITTEL — US-Drittland; Stripe ist DSGVO-konform aber Erwaehnung in DSE Pflicht |
|
|
37
|
-
| `*.youtube.com` | 🟡 HOCH — wenn nicht youtube-nocookie.com → § 25
|
|
128
|
+
| `*.youtube.com` | 🟡 HOCH — wenn nicht youtube-nocookie.com → § 25 TDDDG |
|
|
38
129
|
| `youtube-nocookie.com` | 🟢 NIEDRIG (akzeptiert, DSE-Erwaehnung trotzdem) |
|
|
39
130
|
| `vimeo.com` / `player.vimeo.com` | 🟡 HOCH — Drittland + Tracking-Cookies |
|
|
40
131
|
| `*.openstreetmap.org` / `nominatim.openstreetmap.org` | 🟢 MITTEL — UK-Foundation; Drittland-Hinweis in DSE noetig |
|
|
@@ -171,7 +262,7 @@ Externer CAPTCHA-Service = Drittland-Transfer + Cookie-Setzung. Pruefe:
|
|
|
171
262
|
|
|
172
263
|
| Provider | Drittland | Consent noetig? |
|
|
173
264
|
|----------|-----------|-----------------|
|
|
174
|
-
| Google reCAPTCHA v2/v3 (`www.google.com/recaptcha`) | US | ✅ ja — § 25
|
|
265
|
+
| Google reCAPTCHA v2/v3 (`www.google.com/recaptcha`) | US | ✅ ja — § 25 TDDDG, da der Score auf Geraet/Browser-Daten basiert |
|
|
175
266
|
| hCaptcha (`hcaptcha.com`) | US | ✅ ja |
|
|
176
267
|
| Cloudflare Turnstile (`challenges.cloudflare.com`) | US | 🟡 strittig — minimal-invasiv, aber Drittland-Hinweis in DSE Pflicht |
|
|
177
268
|
| Friendly Captcha (`friendlycaptcha.com`) | EU (DE) | 🟢 niedrig — DSE-Eintrag empfohlen |
|
|
@@ -183,7 +274,7 @@ grep -rEn 'recaptcha|hcaptcha|turnstile|friendlycaptcha' src/
|
|
|
183
274
|
```
|
|
184
275
|
|
|
185
276
|
Finding-Pattern: Google reCAPTCHA ohne ConsentGate auf Public-Form
|
|
186
|
-
(Login, Signup, Newsletter, Kontakt) → 🔴 KRITISCH § 25
|
|
277
|
+
(Login, Signup, Newsletter, Kontakt) → 🔴 KRITISCH § 25 TDDDG +
|
|
187
278
|
Drittland (DPF zertifiziert, aber Erwaehnung in DSE Pflicht).
|
|
188
279
|
|
|
189
280
|
### DNS-Prefetch / Preconnect Audit
|
|
@@ -192,7 +283,7 @@ Drittland (DPF zertifiziert, aber Erwaehnung in DSE Pflicht).
|
|
|
192
283
|
loesen DNS-Resolution / TCP-Handshake VOR dem ersten Asset-Request aus.
|
|
193
284
|
Wenn Ziel ein Tracker / Drittland-Service ist, sendet der Browser
|
|
194
285
|
Daten (mind. IP an DNS-Resolver, ggf. TCP-SYN an Drittland) BEVOR
|
|
195
|
-
Consent erteilt ist. § 25
|
|
286
|
+
Consent erteilt ist. § 25 TDDDG-relevant fuer Tracker-Domains.
|
|
196
287
|
|
|
197
288
|
```bash
|
|
198
289
|
# Live-HTML:
|
|
@@ -270,7 +361,7 @@ extrahierbar → KRITISCH-Finding: Anbieter unklar identifizierbar.
|
|
|
270
361
|
|
|
271
362
|
## Phase 4: DSE-AUDIT
|
|
272
363
|
|
|
273
|
-
### Stand-Datum-Hygiene-Check (post-V3.1-Audit 2026-05-01)
|
|
364
|
+
### Stand-Datum-Hygiene-Check (post-V3.1-Audit 2026-05-01, V4-Erweiterung post-DACH-Studio-Audit 2026-05-02)
|
|
274
365
|
|
|
275
366
|
Nach jedem Compliance-Sweep ist das Stand-Datum auf DSE + AGB zu aktualisieren PLUS Versionshistorie zu pflegen. Fehlendes Update = Drift-Style-2 (Behauptung "Stand vom X" ist veraltet).
|
|
276
367
|
|
|
@@ -281,7 +372,166 @@ curl -sS https://<site>/datenschutz | grep -oE 'Stand:[^<]{0,30}' | head -1
|
|
|
281
372
|
curl -sS https://<site>/agb | grep -oE 'Stand:[^<]{0,30}' | head -1
|
|
282
373
|
```
|
|
283
374
|
|
|
284
|
-
**Finding-Pattern:** Stand-Datum > 3 Monate alt UND letzter Compliance-Commit nach Stand-Datum →
|
|
375
|
+
**Finding-Pattern Drift-Style-2:** Stand-Datum > 3 Monate alt UND letzter Compliance-Commit nach Stand-Datum → Wahrsch. 5%, €-Range 0–500. Fix: Stand auf aktuellen Monat + Versions-Bump (v2.0 → v2.1) + Versionshistorie-Sektion in DSE + AGB ergaenzen.
|
|
376
|
+
|
|
377
|
+
#### Stand-Datum-DRIFT-STYLE-3 (Code-Layer, V4-Pattern, post-DACH-Studio-Audit 2026-05-02)
|
|
378
|
+
|
|
379
|
+
**Lesson aus DACH-Studio-Audit Round 1**: bei einem React/Next.js-Repo wurde
|
|
380
|
+
in 6 von 6 Pflicht-Pages `new Date().toLocaleDateString('de-DE', ...)` als
|
|
381
|
+
Stand-Datum-Quelle gefunden. Bedeutet: bei JEDEM Page-Load wird das HEUTIGE
|
|
382
|
+
Datum als „Stand" angezeigt — egal wann die letzte redaktionelle
|
|
383
|
+
Anwalts-Pruefung war.
|
|
384
|
+
|
|
385
|
+
**Juristisches Risiko**:
|
|
386
|
+
- DSGVO Art. 13 Abs. 3: Bei wesentlichen Aenderungen muss Betroffener informiert werden — wenn das Stand-Datum bei jedem Refresh neu ist, gibt es keine reproduzierbare Basis.
|
|
387
|
+
- Beweisproblem: Bei einer Klage „die DSE hatte am X.Y.2025 keine Mistral-AI-Section" kann der Anbieter nicht beweisen, was damals drinstand — `new Date()`-Pattern liefert immer das heutige Datum.
|
|
388
|
+
- AGB § 305 Abs. 2 BGB: Aenderungen muessen klar zeitlich verortbar sein.
|
|
389
|
+
|
|
390
|
+
**Code-Layer Detection (Pflicht-Check fuer Code-Repo-Audit)**:
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
# Im Pflicht-Pages-Set NIE `new Date()` als Stand-Datum-Quelle:
|
|
394
|
+
grep -rEn "new Date\(\)|toLocaleDateString" \
|
|
395
|
+
src/app/{impressum,datenschutz,agb,widerruf,widerrufsformular,scanner-haftungsausschluss,erklaerung-zur-barrierefreiheit}/page.tsx
|
|
396
|
+
# Erwartung: 0 Hits
|
|
397
|
+
# Bei Hits: KRITISCH — Drift-Style-3 — Stand-Datum-Code-Drift
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**Korrektur-Pattern** (vorbildlich, immer als FIXED Constant):
|
|
401
|
+
|
|
402
|
+
```tsx
|
|
403
|
+
// File: src/app/datenschutz/page.tsx (oder /agb, /impressum, ...)
|
|
404
|
+
const STAND = '01. Mai 2026'; // FIX, manuell gepflegt bei redaktioneller Pruefung
|
|
405
|
+
const VERSION = '2.1';
|
|
406
|
+
|
|
407
|
+
return (
|
|
408
|
+
<p>Stand: {STAND} · Version {VERSION}</p>
|
|
409
|
+
);
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
**Wahrscheinlichkeit / Schadens-Range Drift-Style-3**:
|
|
413
|
+
- Erstabmahn-Risiko: 30% (low-to-medium, kritisch wenn ausgeloest)
|
|
414
|
+
- Schaden: 500–2.500 EUR (UWG-Abmahnung) + 5.000–15.000 EUR Klagefall (Beweisnot)
|
|
415
|
+
- Az.-Kontext: BGH VI ZR 1370/20 (Beweispflicht des Verantwortlichen Art. 5 Abs. 2 DSGVO)
|
|
416
|
+
|
|
417
|
+
**Skill-Output bei Drift-Style-3-Finding**:
|
|
418
|
+
```
|
|
419
|
+
🔴 Stand-Datum-Code-Drift in N Pflicht-Pages (KRITISCH)
|
|
420
|
+
- Datei X.tsx Z. N: `new Date().toLocaleDateString(...)`
|
|
421
|
+
- Fix: ersetze mit `const STAND = 'TT. Monat YYYY'`-Konstante
|
|
422
|
+
- Gilt fuer: impressum/datenschutz/agb/widerruf/widerrufsformular/scanner-haftungsausschluss
|
|
423
|
+
- Schadensrange: 500–2.500 EUR Erstabmahnung
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
#### Drift-Style 4 (AGB-vs-DSE-Tech-Stack-Inkonsistenz, V4-Pattern, post-File-Upload-Sprint 2026-05-03)
|
|
427
|
+
|
|
428
|
+
Wenn AGB einen „Liefer-Stack" oder „Tech-Stack" auflisten (z.B. § 3a) und DSE
|
|
429
|
+
parallel die Datenverarbeitung beschreibt — beide MUESSEN konsistent sein.
|
|
430
|
+
Klassische Drift-Ausloeser:
|
|
431
|
+
|
|
432
|
+
- DSE wird wegen DSGVO-Pflicht aktualisiert (z.B. nach Sprint), AGB nicht
|
|
433
|
+
- AGB-Refactor benennt Tech-Stack-Komponenten, DSE schweigt
|
|
434
|
+
- Storage-Migration (z.B. local Disk → Object Storage) wird in einem Doc dokumentiert, im anderen nicht
|
|
435
|
+
|
|
436
|
+
**Pflicht-Audit:**
|
|
437
|
+
|
|
438
|
+
| Audit-Frage | Verify |
|
|
439
|
+
|-------------|--------|
|
|
440
|
+
| AGB §X-Liefer-Stack-Sektion identifiziert? | grep fuer „Liefer-Stack", „Tech-Stack", „Sub-Verarbeiter" in /agb-Page |
|
|
441
|
+
| DSE §-Sub-Verarbeiter-Sektion identifiziert? | grep fuer „Auftragsverarbeiter", „Sub-Verarbeiter" in /datenschutz-Page |
|
|
442
|
+
| Sind die Komponenten-Listen identisch? | side-by-side diff der Tech-Stack-Listen |
|
|
443
|
+
| Fehlt eine Komponente in einem von beiden? | UWG §5a-Hebel — ergaenzen beide Seiten parallel |
|
|
444
|
+
|
|
445
|
+
**Storage-Implementation-Drift-Verifikation (3 Spezial-Verify-Patterns):**
|
|
446
|
+
|
|
447
|
+
| Behauptung in DSE | Verify-Command | Bei Drift |
|
|
448
|
+
|-------------------|----------------|-----------|
|
|
449
|
+
| „Daten landen in <Object-Storage-Endpoint>" (fuer Customer-Uploads) | Code-grep nach `aws-sdk` / `s3.putObject` ODER `fs.writeFile`-Pfad — was wird wirklich genutzt? | Wenn Code lokale Disk nutzt → DSE-Aussage anpassen (lokale-Disk + Object-Storage-Differenzierung pro Daten-Typ) |
|
|
450
|
+
| „Verschluesselung at-rest (LUKS-Volume)" fuer VPS-Disk | `ssh prod 'lsblk -f' && cryptsetup status` — `crypto_LUKS`-Filesystem auf relevanter Mount? | Wenn nicht aktiv: ENTWEDER LUKS einrichten ODER DSE-Aussage relativieren auf „Disk-Verschluesselung gem. Server-Setup" |
|
|
451
|
+
| „Bytes nur in Datenbank, nicht in Filesystem" — wenn Direct-File-Upload aktiv ist | Code-grep nach `fs.writeFile` fuer Customer-Daten + container-volumes | Wenn Filesystem-Persistenz tatsaechlich aktiv: DSE-Aussage anpassen, Filesystem-Storage-Pfad mit Retention + TOMs ergaenzen |
|
|
452
|
+
|
|
453
|
+
**Schadens-Klasse Drift-Style 4:** identisch mit Drift-Style-2 (1.000-3.000 EUR Bussgeld + UWG-§3a/5a-Hebel)
|
|
454
|
+
|
|
455
|
+
### § 312k BGB Kuendigungsbutton-Check (V4-Pattern, post-DACH-Studio-Audit 2026-05-02)
|
|
456
|
+
|
|
457
|
+
**Trigger**: Site bietet wiederkehrendes Online-Abonnement / Dauerschuldverhaeltnis (Pricing mit „monatlich kuendbar", „/Monat", „Mitgliedschaft", „Subscription") + B2C-Käufer moeglich.
|
|
458
|
+
|
|
459
|
+
**Pflicht** nach BGH I ZR 161/24 (22.05.2025) + § 312k BGB:
|
|
460
|
+
- „Jetzt-kuendigen"-Button auf oeffentlich erreichbarer URL (NICHT nur im Login-Bereich) — OLG Nuernberg 3 U 2214/23
|
|
461
|
+
- Pfad ohne Login durchlaufbar — OLG Duesseldorf I-20 UKl 3/23
|
|
462
|
+
- Button-Beschriftung: „Jetzt kuendigen" o.ae. eindeutig — OLG Hamburg 5 UKl 1/23
|
|
463
|
+
- Bestaetigungsseite + Eingangsbestaetigung-Email
|
|
464
|
+
- Funktioniert auch bei Dauerschuldverhaeltnissen mit fester Laufzeit (Probe-Abos, Punkte-Pakete) — BGH I ZR 161/24 explizit klarstellt
|
|
465
|
+
|
|
466
|
+
**Detection**:
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
# 1. Pricing-Page enumerate
|
|
470
|
+
find src/app -path "*/preise/page.tsx" -o -path "*/pricing/page.tsx"
|
|
471
|
+
|
|
472
|
+
# 2. Wiederkehrungs-Indikator?
|
|
473
|
+
grep -rEn "/Monat|/Mo |monatlich kündbar|monatlich kuendbar|Subscription|Abo|Mitgliedschaft" src/app/preise/page.tsx
|
|
474
|
+
|
|
475
|
+
# 3. Kuendigungs-Page existiert?
|
|
476
|
+
find src/app -name "kuendigung*" -o -name "kündigung*"
|
|
477
|
+
# Erwartung: existiert auf oeffentlicher URL (kein Login).
|
|
478
|
+
|
|
479
|
+
# 4. Footer-Link "Vertrag kuendigen" / "Kuendigung"?
|
|
480
|
+
grep -rE "kuendigung|kündigung|jetzt kündigen|jetzt kuendigen" src/components/Footer.tsx src/components/Navigation.tsx
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
**Finding-Pattern**:
|
|
484
|
+
- 🔴 KRITISCH — Pricing zeigt „monatlich kuendbar" + B2C moeglich + KEINE /kuendigung-Page → Wahrsch. 70%, €-Range 1.500–4.000 EUR Erstabmahnung + 5.000–25.000 EUR Vertragsstrafe-Risiko
|
|
485
|
+
- 🟡 HOCH — /kuendigung existiert nur im Login-Bereich → 50%, 1.500–4.000 EUR
|
|
486
|
+
- 🟡 HOCH — /kuendigung-Button heisst „Vertrag beenden" / „Mitgliedschaft kuendigen" statt „Jetzt kuendigen" → 30%, 500–2.000 EUR (OLG Hamburg-Linie)
|
|
487
|
+
|
|
488
|
+
**Fix-Pattern** (Pflicht-Skelett):
|
|
489
|
+
|
|
490
|
+
```tsx
|
|
491
|
+
// File: src/app/kuendigung/page.tsx (oeffentlich, kein Login)
|
|
492
|
+
export default function KuendigungPage() {
|
|
493
|
+
return (
|
|
494
|
+
<main>
|
|
495
|
+
<h1>Vertrag kuendigen.</h1>
|
|
496
|
+
<p>Hier koennen Sie Ihren Vertrag online kuendigen — ohne Login, sofort.</p>
|
|
497
|
+
<form action="/api/kuendigung" method="POST">
|
|
498
|
+
{/* Pflicht-Felder: Kunden-ID, Email, Vertrag-Art, Kuendigungsart (ordentlich / ausserordentlich), Kuendigungsdatum */}
|
|
499
|
+
<button type="submit" name="action" value="ordentlich">
|
|
500
|
+
Jetzt ordentlich kuendigen
|
|
501
|
+
</button>
|
|
502
|
+
<button type="submit" name="action" value="ausserordentlich">
|
|
503
|
+
Jetzt ausserordentlich kuendigen
|
|
504
|
+
</button>
|
|
505
|
+
</form>
|
|
506
|
+
</main>
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
```tsx
|
|
512
|
+
// Plus: Footer-Link "Vertrag kuendigen" sichtbar wie /widerruf
|
|
513
|
+
// In src/components/Footer.tsx LEGAL_LINKS:
|
|
514
|
+
{ label: 'Vertrag kuendigen', href: '/kuendigung' }
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
**ALTERNATIV (rechts-sicher fuer reine B2B-Anbieter)**: AGB B2B-only festschreiben + auf /preise klar B2B-Indikator („Nur fuer Unternehmer i.S.d. § 14 BGB. Keine Verbraucher-Vertraege.") setzen → § 312k entfaellt. Aber: Conversion-Verlust bei Solo-Selbststaendige (Coach, Yoga-Lehrer, Heilpraktiker), die teils als Verbraucher einordnungsfaehig sind.
|
|
518
|
+
|
|
519
|
+
### PAngV / MwSt-Compliance-Check (V4-Pattern, post-DACH-Studio-Audit 2026-05-02)
|
|
520
|
+
|
|
521
|
+
**Trigger**: Pricing-Page mit konkreten Euro-Beträgen ohne klare MwSt-Indikation.
|
|
522
|
+
|
|
523
|
+
**Pflicht** (Preisangabenverordnung — PAngV):
|
|
524
|
+
- B2C: Endpreis MUSS inkl. MwSt sein, mit klarem Hinweis „inkl. 19% MwSt."
|
|
525
|
+
- B2B: kann netto sein, ABER mit klarem Hinweis „zzgl. 19% MwSt."
|
|
526
|
+
|
|
527
|
+
**Detection**:
|
|
528
|
+
|
|
529
|
+
```bash
|
|
530
|
+
grep -nE "MwSt|netto|brutto|inkl\.|zzgl\.|mehrwertsteuer|umsatzsteuer" src/app/preise/page.tsx
|
|
531
|
+
# Bei 0 Hits + Pricing mit €-Betraegen: 🟡 HOCH-Finding (PAngV-Drift)
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
**Schadens-Range**: 500–1.500 EUR Wettbewerbszentrale-Erstabmahnung.
|
|
285
535
|
|
|
286
536
|
### Pflicht-Sektionen (Art. 13 DSGVO)
|
|
287
537
|
|
|
@@ -335,6 +585,36 @@ nicht eingerichtet ist oder anders laeuft. Beispiele:
|
|
|
335
585
|
laeuft ueber externen Provider-SMTP (Drift-Beispiel V3.1-Audit-Vorfall
|
|
336
586
|
2026-04-30)
|
|
337
587
|
|
|
588
|
+
**Drift-Style 3 (Inkonsistenz innerhalb desselben Dokuments — V3.3-Lesson 2026-05-05)**:
|
|
589
|
+
DSE widerspricht sich selbst. Header sagt eine Versions-Nummer, ein
|
|
590
|
+
spaeterer Abschnitt sagt eine andere; Code-Konstante (z.B. CONSENT_VERSION)
|
|
591
|
+
hat eine dritte. Verstoss gegen Art. 5 Abs. 1 lit. a DSGVO (Transparenz)
|
|
592
|
+
auch wenn alle drei „technisch korrekt" sind — Inkonsistenz untergraebt
|
|
593
|
+
die Glaubwuerdigkeit aller Angaben und ist abmahnfaehig. Beispiele:
|
|
594
|
+
|
|
595
|
+
- DSE-Header sagt „Version 3.2", Section „Aktualitaet" sagt „Version 3.1"
|
|
596
|
+
- DSE behauptet 12 Monate Retention, AGB nennt 6 Monate
|
|
597
|
+
- DSE-Drittland-Tabelle nennt 4 Dienste, im AVV-Listing in Section X
|
|
598
|
+
stehen 6
|
|
599
|
+
- DSE in DE-Footer-Datum „April 2026", englische /en/datenschutz-Variante
|
|
600
|
+
hat „January 2026" (Mehrsprachigkeit-Drift)
|
|
601
|
+
|
|
602
|
+
**Verify-Command Drift-Style 3**:
|
|
603
|
+
```bash
|
|
604
|
+
# Versionsnummern in DSE einsammeln + counten:
|
|
605
|
+
curl -sS https://<brand>/datenschutz | \
|
|
606
|
+
grep -oE 'Version [0-9]+\.[0-9]+' | sort -u
|
|
607
|
+
|
|
608
|
+
# Cookie-Banner-Revision aus Code:
|
|
609
|
+
grep -oE 'CONSENT_VERSION = [0-9]+' src/lib/consent-config.ts
|
|
610
|
+
grep -oE 'revision: [0-9]+' src/components/CookieBanner.tsx
|
|
611
|
+
|
|
612
|
+
# Drei verschiedene Werte = Drift-Style 3 → fix.
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
Fix-Risiko-Klassifikation: LOW (typisch 1 Edit + 1 Commit, aber Pflicht-Audit
|
|
616
|
+
bei jedem Audit-Lauf).
|
|
617
|
+
|
|
338
618
|
**Pflicht-Audit-Matrix** (beide Richtungen, jede DSE-Aussage):
|
|
339
619
|
|
|
340
620
|
| Drift-Style | Audit-Frage | Verify-Command (Beispiel) |
|
|
@@ -383,7 +663,7 @@ Retention-Frist, Self-Hosting-Standort, AVV-Liste, Datenstandort):
|
|
|
383
663
|
|
|
384
664
|
## Phase 5: COOKIE-/CONSENT-AUDIT
|
|
385
665
|
|
|
386
|
-
### Pflicht-Checks (§ 25
|
|
666
|
+
### Pflicht-Checks (§ 25 TDDDG)
|
|
387
667
|
|
|
388
668
|
```
|
|
389
669
|
1. Cookie-Banner sichtbar bei Erstbesuch?
|
|
@@ -512,7 +792,7 @@ in localStorage/state liegt.
|
|
|
512
792
|
| Folder-/Slug-Sanitization | Path-Traversal-Schutz, kein User-Input direkt in `fs.writeFile`-Pfad | KRITISCH (RCE / Pfad-Escape) |
|
|
513
793
|
| File-Storage in Production-Container (V3.4-Lesson, post-2026-05-01) | Persistente File-Writes via `process.cwd()` funktionieren lokal, **failen aber in Docker-Production-Container** wenn der unprivilegierte User (z.B. `nextjs`) keine write-Permissions auf working-dir hat. Folge: Endpoint wirft HTTP 500 unter Last, lokale Tests sehen es nie. **Pflicht-Pattern**: Default-Path mit `os.tmpdir()` als Production-Fallback (ENV `NODE_ENV === 'production'`) + ENV-Override (`NEWSLETTER_PENDING_DIR`, `INQUIRIES_DIR`) fuer persistent volume wenn Container-Restart-Tolerance nicht akzeptabel. Verify: `docker run --user 1001 -v /readonly ... && curl /api/<form-submit>` muss 200 liefern. Anti-Pattern: blind `await fs.writeFile(path.join(process.cwd(), '.foo', ...))` ohne writable-Check. | HOCH (Production-Outage, von lokal-Tests nicht erkennbar) |
|
|
514
794
|
| File-Upload (wenn Logo etc.): MIME-Type + Magic-Bytes + Size-Cap + Content-Disposition: attachment | wenn User Files hochladen kann | HOCH (XSS via SVG, RCE via Polyglot) |
|
|
515
|
-
| PII-Pre-Submit-Hygiene | KEIN Analytics-Tracking auf Form-Felder waehrend User tippt; KEIN Auto-Save mit PII zu 3rd-party | HOCH (Werbungs-Datenschutz § 25
|
|
795
|
+
| PII-Pre-Submit-Hygiene | KEIN Analytics-Tracking auf Form-Felder waehrend User tippt; KEIN Auto-Save mit PII zu 3rd-party | HOCH (Werbungs-Datenschutz § 25 TDDDG) |
|
|
516
796
|
| Auto-Save-Indikator | User sieht "Daten werden zwischengespeichert" — kein verstecktes localStorage von PII | MITTEL (Transparenz Art. 13 DSGVO) |
|
|
517
797
|
| DSE-Konfigurator-Block | Datenschutzerklaerung beschreibt Konfigurator-Daten-Fluss konkret (Welche Daten, Zweck, Speicherdauer, Empfaenger) | KRITISCH (Art. 13 DSGVO) |
|
|
518
798
|
| Aufbewahrungs-Loesch-Konzept | Eingehende Briefings haben definiertes TTL (z.B. 30/90/180 Tage) wenn nicht in Customer-Onboarding ueberfuehrt | HOCH (Art. 5 lit. e DSGVO) |
|
|
@@ -577,6 +857,94 @@ curl -X POST https://example.com/api/configurator/upload \
|
|
|
577
857
|
- Origin-Bypass + RCE via Path-Traversal = potentiell unbegrenzt (Datenpanne Art. 33+34 + Schadensersatz Art. 82 pro Betroffenem)
|
|
578
858
|
- Pricing-Manipulation = Vermoegensschaden + § 263a StGB (Computerbetrug) wenn vorsaetzlich
|
|
579
859
|
|
|
860
|
+
### 5d.1 DIRECT-FILE-UPLOAD-COMPLIANCE (V4-Sub-Pattern, post-File-Upload-Sprint 2026-05-03)
|
|
861
|
+
|
|
862
|
+
**Anlass:** Multi-Step-Forms (Konfigurator, Onboarding, Quoting) implementieren
|
|
863
|
+
zunehmend echte File-Uploads (Logos, Bilder, PDFs, Mood-Boards) statt nur
|
|
864
|
+
Filename-Stubs. Echter Upload-Pfad oeffnet 8 distincte Risiko-Klassen die der
|
|
865
|
+
allgemeine „MIME + Magic + Size + Disposition"-Liner nicht abdeckt. Pflicht-
|
|
866
|
+
Erweiterung wenn Site File-Upload neu einfuehrt oder Schema migriert.
|
|
867
|
+
|
|
868
|
+
**Pflicht-Checks:**
|
|
869
|
+
|
|
870
|
+
| Check | Pattern | Bei Fehlen | Rechts-Anker |
|
|
871
|
+
|-------|---------|------------|--------------|
|
|
872
|
+
| Schema-Migration-Type-Drift | Wenn Datenmodell von `string[]` (Filename-Stub) auf `Object[]` (Metadata-Ref) wechselt: Server-Schema, Client-Types, alle Konsumenten (md-generators, JSON-exports, Personas/Fixtures) atomar migrieren. Andernfalls Submit-400 oder silent-corruption. | KRITISCH (Submit blockiert; Daten-Korruption) | Art. 25 DSGVO (Privacy by Design — falsche Defaults korrumpieren Schema) |
|
|
873
|
+
| localStorage Schema-Bruch-Migration | Bei schemainkompatiblem WizardData-Type-Wechsel: Storage-Key-Bump (`v2`→`v3`) ODER Defensive-Migration auf Mount (Type-Check + Fallback auf Initial-State). Rueckkehrende User mit alter v2-Struktur duerfen NICHT silent-corrupted-State submitten. | HOCH (User verliert Wizard-Progress; bei silent corruption: 400 unverstaendlich) | UX/Treu+Glauben (BGB §242) |
|
|
874
|
+
| base64-Encoding Spread-Crash | `btoa(String.fromCharCode(...new Uint8Array(buf)))` crasht bei >256kB Files (Argument-Spread-Limit). Pflicht-Pattern: `FileReader.readAsDataURL(f)` + `dataUrl.split(',')[1]`. Test mit echter >5MB-Datei (kleine Test-Files croaken nicht). | KRITISCH (Submit failed silent fuer grosse Files; User sieht Generic-Error) | Art. 32 DSGVO (Verfuegbarkeit), §5a UWG (Funktion behauptet aber nicht eingehalten) |
|
|
875
|
+
| processFilesPayload Position | Server-side File-Save MUSS nach `generateProjectId()` gerufen werden, NICHT nach Zod-Validation alleine. Falsche Position → `.inquiries/undefined/uploads/` Folder-Path. | KRITISCH (Disk-Pollution + falsche Folder-Struktur) | Art. 5 lit. e (Speicherbegrenzung — falsche Folder-Pfade verfehlen Cleanup-Cron) |
|
|
876
|
+
| Path-Traversal-Schutz (3-Layer) | (1) `path.basename(item.name)` strippt Pfad-Segmente, (2) `replace(/[^a-zA-Z0-9._-]/g, '_')` whitelist sichert Filename, (3) UUID-Praefix verhindert Filename-Collisions. Layer 1 alleine ist NICHT ausreichend (Unicode-Normalize-Bypass moeglich). | KRITISCH (Filesystem-Escape, RCE wenn Folder im Web-Root) | § 202c StGB, Art. 32 DSGVO |
|
|
877
|
+
| SVG-XSS bei Operator-Open | SVG kann embedded JavaScript enthalten. Wenn Operator den Mail-Anhang im Browser oeffnet (download → click → browser opens .svg) → JS-Execution im file://-Origin. Mitigation: SVG aus Whitelist, ODER server-side Sanitize (DOMPurify-style), ODER Content-Disposition: attachment forced. | MITTEL (Operator-System-Angriff durch adversarial Customer) | Art. 32 DSGVO, §202c StGB (theoretisch) |
|
|
878
|
+
| Filename-PII in Server-Logs | `logger.warn('upload', 'rejected', { name: item.name })` landet in Logs mit Retention >180 Tage. Filenames koennen PII enthalten („max-mustermann-portrait.jpg"). Pflicht: SHA-256-Hash statt raw filename. | NIEDRIG (Datenminimierung Art. 5 lit. c) | Art. 5 lit. c + lit. e DSGVO |
|
|
879
|
+
| Customer-Receipt Upload-Summary | Customer-Bestaetigungs-Mail muss erwaehnen ob/wieviele Files angekommen sind, sonst hat Customer keinen Praxis-Pfad zu Art. 16 (Berichtigung) — er weiss nicht was gespeichert wurde. | MITTEL (Art. 16 praktisch behindert) | Art. 16 + Art. 13 DSGVO, BGB §242 |
|
|
880
|
+
| Disk-Quota / DoS-Vector | Per-IP rate-limit (z.B. 20 submissions/h × 15 MB) ergibt theoretisches Maximum (z.B. 300 MB/h) das bei N attackierenden IPs zur Disk-Fill fuehrt. Pflicht: `fs.statfs`-Check vor write (refuse wenn free <500 MB) ODER per-IP-Tagesbudget mit Redis-Counter. | HOCH (Verfuegbarkeits-Verstoss Art. 32) | Art. 32 Abs. 1 lit. b DSGVO |
|
|
881
|
+
| Email-Attachment Total-Cap | Wenn Files als SMTP-Attachment versendet: Total-Limit clientseitig (vor base64) UND serverseitig (vor `transporter.sendMail`) durchsetzen. Standard SMTP-Receiver-Limits: 15-25 MB. Ueber-Limit → Mail wird vom Receiver gebounct → Operator bekommt nichts. | HOCH (Lead-Verlust + DSGVO Art. 5 lit. f bei Bounces an Public-MTA-Logs) | Art. 32 DSGVO |
|
|
882
|
+
| VVT-Update-Pflicht | Direct-File-Upload ist eine **neue Verarbeitungstaetigkeit** im Sinne Art. 30 DSGVO. Auch bei KMU-Privileg (< 250 MA) ist VVT-Eintrag BayLDA-Best-Practice und Pflicht-Beleg bei Aufsichtsbehoerden-Audit. | MITTEL (Erschwerungsgrund bei Datenpanne; Stufe-1-Risiko) | Art. 30 + Art. 5 Abs. 2 DSGVO |
|
|
883
|
+
|
|
884
|
+
**Verify-Commands (Direct-File-Upload-spezifisch):**
|
|
885
|
+
|
|
886
|
+
```bash
|
|
887
|
+
# 1. base64-Spread-Crash-Test (grosser File)
|
|
888
|
+
dd if=/dev/urandom of=/tmp/big.png bs=1M count=8 # 8 MB Test-File
|
|
889
|
+
# Browser-Test: Upload via UI + DevTools-Network-Inspect
|
|
890
|
+
# Erwartung: Submit-200, kein RangeError im Console
|
|
891
|
+
|
|
892
|
+
# 2. Path-Traversal-Probe
|
|
893
|
+
curl -X POST https://example.com/api/configurator -H "Origin: https://example.com" \
|
|
894
|
+
-H "Content-Type: application/json" \
|
|
895
|
+
-d '{"filesPayload":{"logos":[{"name":"../../etc/passwd","type":"image/png","data":"AAAA"}]}}'
|
|
896
|
+
# Erwartung: 200 (Lead OK), Datei aber als sanitized name in uploads/ ODER skipped
|
|
897
|
+
|
|
898
|
+
# 3. SVG-XSS-Test
|
|
899
|
+
echo '<svg xmlns="http://www.w3.org/2000/svg"><script>alert(1)</script></svg>' | base64 > /tmp/svg.b64
|
|
900
|
+
curl -X POST https://example.com/api/configurator -H "Origin: https://example.com" \
|
|
901
|
+
-H "Content-Type: application/json" \
|
|
902
|
+
-d "{\"filesPayload\":{\"logos\":[{\"name\":\"test.svg\",\"type\":\"image/svg+xml\",\"data\":\"$(cat /tmp/svg.b64)\"}]}}"
|
|
903
|
+
# Erwartung-A (sicher): 200, aber SVG-Anhang gestrippt/sanitized in Operator-Mail
|
|
904
|
+
# Erwartung-B (akzeptabel): 200, SVG ist Anhang aber Operator-Mail mit Warnung
|
|
905
|
+
|
|
906
|
+
# 4. Disk-Quota-Probe (Stress-Test, NUR auf Staging)
|
|
907
|
+
for i in $(seq 1 25); do
|
|
908
|
+
curl -X POST https://staging.example.com/api/configurator ... &
|
|
909
|
+
done
|
|
910
|
+
# Erwartung: nach <500MB free disk → API antwortet 200 aber Files werden skipped
|
|
911
|
+
|
|
912
|
+
# 5. Type-Migration-Regression (Server-Schema akzeptiert beide?)
|
|
913
|
+
curl -X POST https://example.com/api/configurator -H "Origin: https://example.com" \
|
|
914
|
+
-H "Content-Type: application/json" \
|
|
915
|
+
-d '{"uploadedLogos":["legacy-string-format.svg"]}'
|
|
916
|
+
# Erwartung: 400 (Schema rejects old format). Wenn 200 → Schema permissiv = silent corruption-Risiko
|
|
917
|
+
|
|
918
|
+
# 6. localStorage v-bump-Test (manuell im Browser)
|
|
919
|
+
# DevTools Application → LocalStorage → Old-Key (v2) mit alter Struktur → Page reload
|
|
920
|
+
# Erwartung: alter Key geloescht, Wizard-Initial-State, keine Submit-Korruption
|
|
921
|
+
|
|
922
|
+
# 7. Customer-Receipt-Upload-Summary
|
|
923
|
+
# Manueller Test: 1 Logo + 0 Bilder hochladen, Submit
|
|
924
|
+
# Erwartung: Customer-Bestaetigungs-Mail enthaelt „1 Logo erhalten"
|
|
925
|
+
```
|
|
926
|
+
|
|
927
|
+
**Rechts-Anker (Direct-File-Upload-spezifisch):**
|
|
928
|
+
- Art. 5 Abs. 1 lit. c DSGVO — Datenminimierung (kein PII in Logs, MIME-Whitelist)
|
|
929
|
+
- Art. 5 Abs. 1 lit. e DSGVO — Speicherbegrenzung (Cleanup-Cron MUSS uploads/ erfassen)
|
|
930
|
+
- Art. 5 Abs. 1 lit. f DSGVO — Vertraulichkeit (TLS + at-rest-Verschluesselung; SVG-XSS-Schutz)
|
|
931
|
+
- Art. 13 DSGVO — Info-Pflicht (Datei-Typen + Speicher-Pfad + Empfaenger pre-Upload)
|
|
932
|
+
- Art. 16 DSGVO — Berichtigung (Customer-Receipt-Upload-Summary)
|
|
933
|
+
- Art. 25 DSGVO — Privacy by Design (Schema-Migration ohne Type-Drift)
|
|
934
|
+
- Art. 30 DSGVO — VVT-Update bei neuer Verarbeitungstaetigkeit
|
|
935
|
+
- Art. 32 Abs. 1 lit. a + lit. b DSGVO — Verschluesselung + Verfuegbarkeit
|
|
936
|
+
- § 202c StGB — Vorbereitung Datenausspaehung bei Path-Traversal-Vector
|
|
937
|
+
- BGB § 242 (Treu+Glauben) — base64-Crash + Customer-Receipt-Luecke = Funktions-Versprechen-Bruch
|
|
938
|
+
|
|
939
|
+
**Schadensschaetzung Direct-File-Upload-Klasse:**
|
|
940
|
+
- KRITISCH (Path-Traversal, base64-Crash) ohne Mitigation: 1.000-5.000 EUR Bussgeld + UWG-Abmahn-Risiko
|
|
941
|
+
- HOCH (Disk-DoS, Email-Attachment-Cap, Schema-Migration): 500-3.000 EUR + Operator-Pain (Lead-Verlust)
|
|
942
|
+
- MITTEL (Customer-Receipt, VVT, SVG-XSS): 0-1.500 EUR Bussgeld
|
|
943
|
+
- NIEDRIG (Filename-PII): 0-300 EUR Bussgeld (Hygiene-Empfehlung)
|
|
944
|
+
|
|
945
|
+
> Action-Liste: siehe `references/checklisten.md` Checkliste 12 (Direkt-File-Upload Compliance).
|
|
946
|
+
> VVT-Template: siehe `references/templates/VVT-template-file-upload.md`.
|
|
947
|
+
|
|
580
948
|
---
|
|
581
949
|
|
|
582
950
|
## Phase 5e: AI-CHATBOT-/LLM-DSGVO-AUDIT (V3.3-Pattern, post-2026-05-01)
|
|
@@ -664,6 +1032,33 @@ gleichzeitig als Verantwortlicher fuer die Scanner-Eingabe-Daten UND als
|
|
|
664
1032
|
potentieller Active-Probe-Akteur gegen Drittseiten — mit StGB-Implikation
|
|
665
1033
|
wenn nicht authorisiert.
|
|
666
1034
|
|
|
1035
|
+
### Anwendbarkeit-Klassifikation (V4.0-Lesson, post-Battle-Test-2026-05-02)
|
|
1036
|
+
|
|
1037
|
+
Phase 5f ist dual-skoped — fuer **SaaS-Scanner-Services** UND **OSS-CLI-Scanner-Tools**.
|
|
1038
|
+
Nicht alle Pflicht-Checks gelten fuer beide. Vor der Pruefung Target-Klasse identifizieren:
|
|
1039
|
+
|
|
1040
|
+
| Target-Klasse | Beispiele | Pflicht-Checks (von 14) |
|
|
1041
|
+
|---|---|---|
|
|
1042
|
+
| **SaaS-Scanner-Service** (oeffentlicher Audit-Endpoint) | securityscanner.io, Cookiebot-Audit, page-speed-tools | Alle 14 + AGB / DSE / Impressum aus Phasen 1-4 |
|
|
1043
|
+
| **OSS-CLI-Scanner-Tool** (Local-Code-Scan) | Semgrep, gitleaks, AEGIS, ESLint-Security | Reduzierter Set: SSRF/DNS-Rebinding/Rate-Limit/Eingabe-URL-Logging sind oft N/A |
|
|
1044
|
+
| **Hybrid (CLI + Active-Probe-Modus)** | nmap, Nuclei, AEGIS-pentest-Mode | Aktive-Probes-Authorisierung + Rate-Limit + User-Consent **PFLICHT**; SSRF N/A wenn Operator-Target |
|
|
1045
|
+
|
|
1046
|
+
**N/A-Bedingungen (anstelle von ❌)**:
|
|
1047
|
+
- **SSRF-Defense / DNS-Rebinding**: N/A wenn Tool keinen User-supplied-URL-Fetch macht (Static-Mode-CLI-Scanner).
|
|
1048
|
+
- **Rate-Limit auf Endpoint**: N/A wenn Tool kein Public-Endpoint hat (OSS-CLI-Local-Mode).
|
|
1049
|
+
- **Eingabe-URL-Logging**: N/A wenn Tool nur Local-Code scannt (kein URL-Input).
|
|
1050
|
+
- **Output-Sanitization (Brand-Hygiene)**: gilt fuer ALLE Klassen, weil Findings-Output an Operator geht.
|
|
1051
|
+
|
|
1052
|
+
Audit-Output-Format mit N/A-Spalte:
|
|
1053
|
+
|
|
1054
|
+
```markdown
|
|
1055
|
+
| Check | Status | Beleg |
|
|
1056
|
+
|---|---|---|
|
|
1057
|
+
| SSRF-Defense | ✅ N/A | Static-Mode-Tool, kein User-URL-Fetch |
|
|
1058
|
+
| Rate-Limit | ⚠ pruefen | Active-Probe-Mode existiert, Default-Rate unklar |
|
|
1059
|
+
| Active-Probes-Authorisierung | ✅ | --confirm-Flag dokumentiert |
|
|
1060
|
+
```
|
|
1061
|
+
|
|
667
1062
|
**Pflicht-Checks**:
|
|
668
1063
|
|
|
669
1064
|
| Check | Pattern | Bei Fehlen |
|
|
@@ -678,6 +1073,8 @@ wenn nicht authorisiert.
|
|
|
678
1073
|
| Output-Sanitization | Scanner-Result darf keine internen Codenames / Operator-Brand-Refs / private Cluster-Hostnames leaken | HOCH (Brand-Hygiene) |
|
|
679
1074
|
| Drittstellen-Hinweis | Scanner-AGB klart, ob Eingabe-URL an WHOIS/Reverse-DNS/Geo-IP-Provider weitergegeben wird | HOCH (Art. 13 DSGVO) |
|
|
680
1075
|
| FP-/FN-Tracking-Doku | Anbieter dokumentiert Test-Coverage + bekannte FP/FN-Klassen — Pflicht-Transparenz fuer Scanner-Glaubwuerdigkeit | MITTEL |
|
|
1076
|
+
| Rechtsform-aware Impressum-Check (V3.4-Lesson, post-2026-05-01) | Impressum-Vollstaendigkeits-Pruefer dürfen NICHT pauschal gegen alle 7 § 5 DDG Pflicht-Klassen messen — Class 4 (Vertretung) + Class 5 (Handelsregister) sind nur fuer **juristische Personen** Pflicht (§ 5 Abs. 1 Nr. 1 + Nr. 4 DDG). Fuer Einzelunternehmer/Freiberufler/Selbststaendige sind beide N/A. Anlass: Live-Audit-Run gegen ein Sole-Proprietor-Target (Einzelunternehmer mit vollstaendigem Impressum) zeigte 4/7 = FAIL als False-Positive, weil der Scanner die natuerliche-Person-Konstellation nicht erkannte. Pflicht-Logik: (1) Rechtsform-Suffix-Detektor (GmbH/AG/KG/UG/OHG/GbR/SE/e.K./e.V./Limited/Genossenschaft/...), (2) Legal-Person-Indicator-Detektor (HRB/HRA/Amtsgericht/Geschäftsführer/vertreten durch), (3) Scope-Trim auf Erst-Sektion (vor Berufshaftpflicht/EU-Streitschlichtung-Headers, weil Drittanbieter-AGs sonst false-classify). Bei 'natural' detected: Threshold sinkt auf 4 of 5 (Anschrift/PLZ/Email/USt/Telefon) und Output sagt explizit „natürliche Person/Einzelunternehmer". Plus: Class 3 Email-Regex muss eine Plain-Email-Fallback-Pattern haben — `mailto:`-Praefixe werden von cheerio.text() aus href-Attributen gestripped, daher matcht der primaere `mailto:|kontakt:|email:`-Pattern auf gerendertem Plain-Text nichts. | KRITISCH (False-Positive-Vermeidung — sonst Unrechts-FAIL gegen rechtskonforme Sole-Proprietor-Sites) |
|
|
1077
|
+
| Plain-Email-Supplemental fuer DDG-Kontaktklasse | § 5 DDG Abs. 1 Nr. 2 Pflicht-Email kann auf der gerenderten Page als „info@example.de" stehen — der HTML-Attribut-Praefix `mailto:` ist nach cheerio.text()-Extraction weg. Ein Scanner der nur `mailto:|kontakt:|e-mail:` matcht uebersehen die nackte Email. Pflicht-Pattern: Plain-Email-Regex `[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}` als Supplement. | HOCH (FN-Vermeidung) |
|
|
681
1078
|
| User-Consent-Hinweis Scanner | Bei oeffentlichen Scannern: Hinweis dass User nur eigene Domain pruefen darf; Erwerb-Form fuer Pen-Test-Authorisierung wenn Drittseiten erlaubt | KRITISCH (Strafrechts-Risiko) |
|
|
682
1079
|
| Scan-Output-Disclaimer pro Finding | Jede Empfehlung markiert mit „technisch-indikativ, anwaltliche Beratung empfohlen" | HOCH |
|
|
683
1080
|
|
|
@@ -826,6 +1223,242 @@ nc -zv -w 5 mail.example.com 25 # nur fuer Server-zu-Server, oft outbound-bloc
|
|
|
826
1223
|
- Bestaetigungs-Mail mit Werbung (LG Stendal) = 100-500 EUR Schadensersatz pro Empfaenger
|
|
827
1224
|
- 3rd-party-SMTP ohne AVV = Bussgeld 10.000-50.000 EUR (Art. 83 Stufe 2)
|
|
828
1225
|
|
|
1226
|
+
### 5g.4: EMAIL-TEMPLATE FONT-AUDIT (V3.3-Lesson 2026-05-05)
|
|
1227
|
+
|
|
1228
|
+
**Anlass**: bei einem operativen Audit (Webdesign-Solo-Buero) am 2026-05-05
|
|
1229
|
+
gefunden: E-Mail-HTML-Template laedt `<link href="https://fonts.googleapis.com/...">`.
|
|
1230
|
+
Outbound-Mails uebertragen damit potenziell die IP des Empfaengers an
|
|
1231
|
+
Google, sobald der E-Mail-Client externe Ressourcen laedt (Outlook blockt
|
|
1232
|
+
default, Apple-Mail seit iOS 15 mit Mail Privacy Protection, Gmail-Web
|
|
1233
|
+
proxiet — aber Drittanbieter-Clients oder Mobile-Mail-Apps koennen es
|
|
1234
|
+
weiterhin laden).
|
|
1235
|
+
|
|
1236
|
+
**Rechtlicher Hintergrund**:
|
|
1237
|
+
- LG Muenchen I 3 O 17493/20 (20.01.2022) — Google Fonts via dynamisches
|
|
1238
|
+
Embedding loest 100 EUR Schadensersatz nach Art. 82 DSGVO aus.
|
|
1239
|
+
- Analogie auf E-Mail-Outbound: streitig, aber **nicht ausgeschlossen**.
|
|
1240
|
+
Massen-Abmahn-Anwaelte koennten es testen, da E-Mail-Clients real
|
|
1241
|
+
IPs des Empfaengers an Google senden.
|
|
1242
|
+
|
|
1243
|
+
**Verify-Command**:
|
|
1244
|
+
```bash
|
|
1245
|
+
# Repo-Scan auf E-Mail-Template-Source:
|
|
1246
|
+
grep -rE 'fonts\.googleapis\.com|fonts\.gstatic\.com' \
|
|
1247
|
+
src/lib/email* src/server/email* src/emails/ 2>/dev/null
|
|
1248
|
+
# → jeder Treffer in *.ts/*.tsx/*.html-Dateien fuer Mail-Versand: Finding.
|
|
1249
|
+
```
|
|
1250
|
+
|
|
1251
|
+
**Anti-Pattern**:
|
|
1252
|
+
```html
|
|
1253
|
+
<!-- in E-Mail-Template-HTML: -->
|
|
1254
|
+
<link href="https://fonts.googleapis.com/css2?family=DM+Sans..." rel="stylesheet">
|
|
1255
|
+
```
|
|
1256
|
+
|
|
1257
|
+
**Fix-Pattern**:
|
|
1258
|
+
```typescript
|
|
1259
|
+
// System-Font-Stacks statt Google Fonts. Visuell nahe Aequivalente:
|
|
1260
|
+
const FONT_SANS = `-apple-system,BlinkMacSystemFont,'Segoe UI','Helvetica Neue',Arial,sans-serif`
|
|
1261
|
+
const FONT_MONO = `ui-monospace,'SF Mono','Cascadia Mono','Roboto Mono',Menlo,Consolas,monospace`
|
|
1262
|
+
```
|
|
1263
|
+
|
|
1264
|
+
Helvetica Neue / Segoe UI sind geometrische Sans-Serifs sehr nahe an
|
|
1265
|
+
DM Sans / Inter; SF Mono / Cascadia Mono sind moderne Monospace-Schriften
|
|
1266
|
+
sehr nahe an JetBrains Mono. Visueller Unterschied minimal, DSGVO-Risiko 0.
|
|
1267
|
+
|
|
1268
|
+
**Risiko**: 0-100 EUR pro betroffener Empfaenger (theoretisch), Massen-
|
|
1269
|
+
Abmahnung 800-3.000 EUR. **Fix-Risiko-Klassifikation**: LOW (1 file,
|
|
1270
|
+
Search & Replace, keine UX-Aenderung).
|
|
1271
|
+
|
|
1272
|
+
---
|
|
1273
|
+
|
|
1274
|
+
## Phase 5h: B2C/B2B-FUNNEL-KONFLIKT-AUDIT (V3.3-Pattern, post-2026-05-05)
|
|
1275
|
+
|
|
1276
|
+
**Anlass**: bei einem operativen Audit (Webdesign-Solo-Buero) am 2026-05-05
|
|
1277
|
+
gefunden: AGB enthielten Klausel `"diese AGB richten sich AUSSCHLIESSLICH
|
|
1278
|
+
an Unternehmer im Sinne von § 14 BGB"`, gleichzeitig waren oeffentliche
|
|
1279
|
+
Funnels (Konfigurator, Onboarding-Wizard, Online-Buchung Cal.com) **ohne
|
|
1280
|
+
Verbraucher-Filter** zugaenglich.
|
|
1281
|
+
|
|
1282
|
+
**Rechtlicher Hintergrund**:
|
|
1283
|
+
- § 13 BGB: Verbrauchereigenschaft wird **objektiv** bestimmt
|
|
1284
|
+
(natuerliche Person, Vertrag nicht zu gewerblichem Zweck) — eine
|
|
1285
|
+
AGB-Klausel kann sie NICHT konstitutiv ausschliessen.
|
|
1286
|
+
- Wenn ein Verbraucher trotz B2B-AGB beauftragt: § 312g BGB Widerrufsrecht
|
|
1287
|
+
+ § 312j Abs. 3 BGB Button-Loesung greifen automatisch.
|
|
1288
|
+
- § 5a Abs. 4 UWG: Vorenthaltung wesentlicher Verbraucher-Informationen
|
|
1289
|
+
(Widerrufsbelehrung, Button-Loesung) = Wettbewerbsverstoss → abmahnfaehig.
|
|
1290
|
+
- Etablierte Rechtsprechung zu §§ 13, 312g BGB: AGB-Klauseln zu
|
|
1291
|
+
„nur fuer Unternehmer" haben keine konstitutive Wirkung. Vor anwaltlicher
|
|
1292
|
+
Verwendung Primaerquelle pruefen.
|
|
1293
|
+
|
|
1294
|
+
**Trigger-Erkennung**:
|
|
1295
|
+
- AGB hat Klausel mit „nur Unternehmer", „§ 14 BGB", „B2B only",
|
|
1296
|
+
„Verbraucher ausgeschlossen"
|
|
1297
|
+
- UND eine oder mehrere oeffentliche Surfaces ohne Verbraucher-Filter:
|
|
1298
|
+
- Konfigurator / Preisrechner ohne B2B-Hinweis
|
|
1299
|
+
- Online-Terminbuchung ohne „nur Unternehmen"-Hinweis
|
|
1300
|
+
- Onboarding-Wizard ohne Pflicht-Checkbox „Ich bin Unternehmer"
|
|
1301
|
+
- Kontaktformular ohne klaren Hinweis auf Zielgruppe
|
|
1302
|
+
|
|
1303
|
+
**Verify-Commands**:
|
|
1304
|
+
```bash
|
|
1305
|
+
# 1. AGB-Klausel pruefen:
|
|
1306
|
+
curl -sS https://<brand>/agb | \
|
|
1307
|
+
grep -oE 'ausschliesslich.{0,50}Unternehmer|§\s*14\s*BGB|nur.{0,30}gewerblich'
|
|
1308
|
+
|
|
1309
|
+
# 2. Konfigurator/Onboarding/Preise auf B2B-Hinweis pruefen:
|
|
1310
|
+
for path in /konfigurator /onboarding /preise; do
|
|
1311
|
+
echo "=== $path ==="
|
|
1312
|
+
curl -sS "https://<brand>$path" | \
|
|
1313
|
+
grep -ic "nur fuer Unternehmen\|§ 14 BGB\|B2B\|gewerblich"
|
|
1314
|
+
done
|
|
1315
|
+
|
|
1316
|
+
# 3. Submit-Form-Pflicht-Checkbox pruefen (Code-Side):
|
|
1317
|
+
grep -rE 'b2bConfirmed|isUnternehmen|gewerblichBestätigt' src/components/
|
|
1318
|
+
```
|
|
1319
|
+
|
|
1320
|
+
**Konflikt-Detection**:
|
|
1321
|
+
|
|
1322
|
+
| AGB-Klausel | Funnel-Hinweis | B2B-Pflicht-Checkbox | Verdict |
|
|
1323
|
+
|-------------|----------------|---------------------|---------|
|
|
1324
|
+
| „nur § 14 BGB" | sichtbar | Pflicht | ✓ konsistent (Variante A) |
|
|
1325
|
+
| „nur § 14 BGB" | sichtbar | fehlt | 🟡 Lücke (Schwach) |
|
|
1326
|
+
| „nur § 14 BGB" | fehlt | fehlt | 🔴 Konflikt (Wahrsch. 18% Abmahnung) |
|
|
1327
|
+
| AGB B2C-OK | Hinweis fehlt | fehlt | ✓ ok (Verbraucher zugelassen, dann AGB-Anhang B2C noetig) |
|
|
1328
|
+
| AGB B2C-OK | „nur Unternehmen" | Pflicht | ⚠ AGB anpassen oder Funnel oeffnen |
|
|
1329
|
+
|
|
1330
|
+
**Fix-Pattern (Variante A — Verbraucher aktiv ausschliessen)**:
|
|
1331
|
+
1. Wiederverwendbare `B2BNotice`-Komponente (role="note", ARIA-konform):
|
|
1332
|
+
```tsx
|
|
1333
|
+
<aside role="note" aria-label="Hinweis zur Zielgruppe">
|
|
1334
|
+
Diese Leistung richtet sich ausschliesslich an Unternehmen,
|
|
1335
|
+
Selbstaendige und Freiberufler im Sinne von § 14 BGB. Eine
|
|
1336
|
+
Beauftragung als Privatperson (§ 13 BGB) ist nicht moeglich.
|
|
1337
|
+
</aside>
|
|
1338
|
+
```
|
|
1339
|
+
2. Einbindung in alle oeffentlichen Funnels (Konfigurator, Onboarding,
|
|
1340
|
+
Preise, ggf. Kontakt-Formular).
|
|
1341
|
+
3. Pflicht-Checkbox VOR Datenschutz-Checkbox am Form-Ende:
|
|
1342
|
+
```tsx
|
|
1343
|
+
<input type="checkbox" id="b2b" required />
|
|
1344
|
+
<label>Ich bestaetige, dass ich die Anfrage als Unternehmen,
|
|
1345
|
+
Selbstaendiger oder Freiberufler im Sinne von § 14 BGB stelle.</label>
|
|
1346
|
+
```
|
|
1347
|
+
4. `canSubmit` / `canProceed`-Flag um `b2bConfirmed` erweitern.
|
|
1348
|
+
5. DSE-Section „Kontaktformular" / „Anfragen" um Hinweis erweitern:
|
|
1349
|
+
„Anfragen von Privatpersonen werden nicht bearbeitet und im Rahmen
|
|
1350
|
+
gesetzlicher Aufbewahrungsfristen geloescht."
|
|
1351
|
+
6. AGB unveraendert lassen (B2B-Klausel bleibt — Variante A schuetzt sie).
|
|
1352
|
+
|
|
1353
|
+
**Fix-Pattern (Variante B — Verbraucher zulassen)**:
|
|
1354
|
+
1. AGB-Klausel B2B-only streichen.
|
|
1355
|
+
2. AGB-Anhang B2C mit Widerrufsbelehrung (Anlage 1 zu Art. 246a § 1
|
|
1356
|
+
Abs. 2 EGBGB) + Muster-Widerrufsformular.
|
|
1357
|
+
3. Falls direkter Vertragsschluss im Funnel: Button-Loesung „Zahlungs-
|
|
1358
|
+
pflichtig bestellen" (§ 312j Abs. 3 BGB).
|
|
1359
|
+
4. DSE-Section „Kontaktformular" um Verbraucher-Rechte-Hinweis erweitern.
|
|
1360
|
+
|
|
1361
|
+
**Risiko**: 18% Abmahnung 12 Wochen, 887-5.500 EUR (Streitwert 5.000 EUR,
|
|
1362
|
+
RVG 1.3-Geschaeftsgebuehr). **Fix-Risiko-Klassifikation**: LOW (Variante A:
|
|
1363
|
+
2-3h Implementierung, kein struktureller Eingriff).
|
|
1364
|
+
|
|
1365
|
+
**Schema.org-Bonus** (signalisiert Google + Aufsichtsbehoerde die B2B-
|
|
1366
|
+
Ausrichtung):
|
|
1367
|
+
```typescript
|
|
1368
|
+
audience: { '@type': 'BusinessAudience', audienceType: '...' }
|
|
1369
|
+
```
|
|
1370
|
+
|
|
1371
|
+
---
|
|
1372
|
+
|
|
1373
|
+
## Phase 5i: ART-9-BEWEIS-WORKFLOW-AUDIT (V4-Pattern, post-Art-9-Workflow-Audit 2026-05-03)
|
|
1374
|
+
|
|
1375
|
+
> **Phase-Renaming-Note (2026-05-05)**: vorheriger Skill-Stand hatte zwei verschiedene `Phase 5h`-Sektionen (B2C/B2B-Funnel-Konflikt + Art-9-Beweis-Workflow). Phasen-Logik kollidierte intern. Art-9-Beweis-Workflow ist seit 2026-05-05 **Phase 5i**, B2C/B2B-Funnel-Konflikt bleibt **Phase 5h** (chronologische Erstvergabe).
|
|
1376
|
+
|
|
1377
|
+
**Trigger**: Site verarbeitet besondere Kategorien Art. 9 DSGVO (Gesundheitsdaten, biometrisch, Gewerkschaft, Religion, politische Meinung). Erkennbar an:
|
|
1378
|
+
|
|
1379
|
+
- Form-Felder: Allergien, Kontraindikationen, Schwangerschaft, Medikamente, Vorerkrankungen, Hauttyp, BMI, Krankheits-Historie
|
|
1380
|
+
- Service-Beschreibung mit Begriffen wie „Anamnese", „Patient", „medizinische Beratung", „Heilbehandlung", „Therapie", „DiGA"
|
|
1381
|
+
- DB-Schema mit `*_encrypted`-Spalten + Health-Daten-Bezug
|
|
1382
|
+
- API-Endpoints unter `/health/`, `/medical/`, `/anamnese/`, `/patient/`
|
|
1383
|
+
|
|
1384
|
+
### 5h.1 Beweis-Modi-Audit
|
|
1385
|
+
|
|
1386
|
+
Prueft ob die Site **mindestens einen kryptographisch beweisbaren Modus** fuer die Erfassung der Art-9-Daten implementiert. Art. 9 Abs. 2 lit. a + Art. 7 Abs. 1 DSGVO verlangen vom Verantwortlichen die **Beweispflicht** der Einwilligung.
|
|
1387
|
+
|
|
1388
|
+
**Drei akzeptierte Modi (mind. einer Pflicht):**
|
|
1389
|
+
|
|
1390
|
+
| Modus | Mechanismus | eIDAS-Klasse | Beweis-Stufe |
|
|
1391
|
+
|-------|-------------|--------------|--------------|
|
|
1392
|
+
| A) Tablet/Touch-Signatur | SignaturePad → PNG eingebettet in DB-Encryption | eES (Art. 3 Nr. 10) | Mittel |
|
|
1393
|
+
| B) Eigenhaendige Papier-Unterschrift + Scan | Original mit eigenhaendiger Unterschrift gescannt + SHA-256-Hash in DB gespeichert | nicht eIDAS-relevant (Papier-Beweis § 416 ZPO) | Hoch |
|
|
1394
|
+
| C) Mitarbeiter-Abtipp + Original-Scan + Mitarbeiter-Co-Signatur | Mitarbeiter tippt + signiert eigene Bestaetigung „korrekt abgetippt" + Pflicht-Upload des Original-Scans | eES + § 416 ZPO | Mittel-Hoch |
|
|
1395
|
+
|
|
1396
|
+
**Anti-Pattern (Defizit-Indikatoren):**
|
|
1397
|
+
|
|
1398
|
+
- Mitarbeiter kann im Admin-UI Art-9-Daten erfassen OHNE Patient-Bestaetigung
|
|
1399
|
+
- Audit-Log „Mitarbeiter X hat eingegeben" wird als Beweis behandelt → Eigenbeweis Stufe 0
|
|
1400
|
+
- consent_method-Feld erlaubt 'checkbox' / 'verbal' ohne weitere Beweis-Spalten
|
|
1401
|
+
- DB-CHECK-Constraint fehlt: Anamnese-Insert ist auch ohne Beweis-Element moeglich
|
|
1402
|
+
|
|
1403
|
+
### 5h.2 Crypto-at-Rest-Pflicht
|
|
1404
|
+
|
|
1405
|
+
**Pflicht-Pruefungen:**
|
|
1406
|
+
|
|
1407
|
+
- [ ] Art-9-Felder mit AES-256-GCM (oder vergleichbar starkem AEAD) verschluesselt
|
|
1408
|
+
- [ ] **AAD-Binding** an Row-Identifier (z.B. `<table>:<row_id>`) — verhindert Block-Swap-Attacks (Ciphertext einer Zeile in andere kopieren)
|
|
1409
|
+
- [ ] **Key-Versioning** im Ciphertext-Format (z.B. `v2:<keyId>:<iv>:<ct>:<tag>`) — ermoeglicht Live-Key-Rotation ohne Re-encrypt-Sweep
|
|
1410
|
+
- [ ] **Decrypt-Fail-Audit-Log** — jeder Decrypt-Fehler (auth_failed / unknown_key_id / format_error) wird in audit_log mit Metadaten geloggt (Tampering-Detection + Key-Loss-Detection)
|
|
1411
|
+
- [ ] **Recovery-Doc** existiert (z.B. `docs/security/encryption-recovery.md`) mit Rotation-Procedure + Backup-Pflicht (mindestens 3 unabhaengige Standorte: Production-ENV + Vault + Offline-encrypted)
|
|
1412
|
+
- [ ] **Originalpapier-Scans im Storage**: Bytes pre-upload verschluesselt (defense-in-depth gegen Storage-Compromise) + SHA-256-Hash im DB-Record (Tampering-Detection beim Download)
|
|
1413
|
+
|
|
1414
|
+
### 5h.3 Aufbewahrungsfristen-Validierung
|
|
1415
|
+
|
|
1416
|
+
Verschiedene Fristen je nach rechtlichem Status:
|
|
1417
|
+
|
|
1418
|
+
| Setup | Frist | Norm |
|
|
1419
|
+
|-------|-------|------|
|
|
1420
|
+
| Wellness/Kosmetik (kein Heilberuf) | 3 Jahre nach letzter Behandlung | BGB § 195 + § 199 Abs. 4 (max 10 Jahre) |
|
|
1421
|
+
| Heilpraktiker | 10 Jahre nach Behandlungsende | BGB § 630f Abs. 3 |
|
|
1422
|
+
| Aerzte (gleicher Berufsregeln) | 10 Jahre | BGB § 630f Abs. 3 + MBO-AE |
|
|
1423
|
+
| Bei dokumentiertem Personenschaden | bis 30 Jahre | BGB § 199 Abs. 2 |
|
|
1424
|
+
| Buchhaltungs-relevante Belege | 6 / 10 Jahre | HGB § 257 / AO § 147 (gilt NICHT fuer Anamnese als reines Health-Datum) |
|
|
1425
|
+
|
|
1426
|
+
**Anti-Pattern**: 12 oder 24 Monate Default ohne Differenzierung — zu kurz fuer Schadens-Verjaehrung. Bei Schaden im Jahr 3 ist Anamnese geloescht → Beweisproblem.
|
|
1427
|
+
|
|
1428
|
+
### 5h.4 Audit-Log-Pflicht (Art. 5 Abs. 2 + Art. 30 DSGVO)
|
|
1429
|
+
|
|
1430
|
+
**Pflicht-Events fuer Art-9-Daten:**
|
|
1431
|
+
|
|
1432
|
+
- `<resource>_created` mit consent_method + proof_modes-Hash
|
|
1433
|
+
- `<resource>_viewed` (jeder Lese-Zugriff)
|
|
1434
|
+
- `<resource>_exported` (PDF/CSV)
|
|
1435
|
+
- `<resource>_revoked` mit Begruendung (Art. 7 Abs. 3)
|
|
1436
|
+
- `<resource>_deleted` mit METADATEN (KEINE Health-Snapshots — sonst Art. 17 nur in audit_log umsiedeln)
|
|
1437
|
+
- `decrypt_failure` mit reason + version + keyId
|
|
1438
|
+
- `scan_hash_mismatch` (Tampering-Indikator)
|
|
1439
|
+
|
|
1440
|
+
**Anti-Pattern**: Audit-Log enthaelt Plaintext-Snapshot der Health-Daten bei DELETE → Art. 17 wird umgangen.
|
|
1441
|
+
|
|
1442
|
+
### 5h.5 Falsche-Rechtsgrundlage-Detection
|
|
1443
|
+
|
|
1444
|
+
Haeufigster Verstoss: Site beruft sich auf **§ 22 BDSG Abs. 1 Nr. 1 lit. b** (Gesundheitsvorsorge) obwohl die handelnden Personen **keine Berufsgeheimnistraeger** sind.
|
|
1445
|
+
|
|
1446
|
+
**Pruef-Logik:**
|
|
1447
|
+
|
|
1448
|
+
- Site-Setup = nur Wellness/Kosmetik/Massage (keine Heilpraktiker-Erlaubnis nachgewiesen) → § 22 BDSG NICHT verfuegbar.
|
|
1449
|
+
- Datenschutzerklaerung-Text greppen: Erwaehnung von „§ 22 BDSG" als Rechtsgrundlage fuer Anamnese? → **Verstoss**, muss durch Art. 9 Abs. 2 lit. a (Einwilligung) ersetzt werden.
|
|
1450
|
+
- Nur wenn Heilpraktiker / Arzt / Physiotherapeut mit beruflicher Schweigepflicht (§ 203 StGB) → § 22 BDSG verfuegbar.
|
|
1451
|
+
|
|
1452
|
+
### 5h.6 Synthesizer-Output
|
|
1453
|
+
|
|
1454
|
+
Bei Site mit Art-9-Daten ohne diese Pattern → Wahrscheinlichkeit Bussgeld 12 Monate **40-60%**, €-Range realistisch **15.000-80.000** (KMU-Skala) bis 20 Mio EUR / 4% Jahresumsatz (Art. 83 Abs. 5 lit. a DSGVO).
|
|
1455
|
+
|
|
1456
|
+
**Cross-Risiko**: Art. 9-Verstoss + Art. 35-DSFA-fehlt + Art. 32-TOMs-unzureichend = drei Stufe-1/2-Bussgelder in einem Verfahren.
|
|
1457
|
+
|
|
1458
|
+
> Branchen-Layer: siehe `references/branchenrecht.md` Sektion „Spa / Wellness / Kosmetik / Massage" + Sektion „Heilberufe".
|
|
1459
|
+
> DSFA-Template: siehe `references/templates/DSFA-template.md` Sektion 8 (Art-9-Spezifika).
|
|
1460
|
+
> Verstoss-Tabelle: siehe `references/dsgvo.md` „Haeufige Verstoesse bei Art-9-Verarbeitung".
|
|
1461
|
+
|
|
829
1462
|
---
|
|
830
1463
|
|
|
831
1464
|
## Phase 6: BRANCHEN-LAYER (wenn identifizierbar)
|
|
@@ -1112,3 +1745,104 @@ Vorlage: `references/templates/proxy-strict-dynamic.ts.example` zeigt das Strict
|
|
|
1112
1745
|
|
|
1113
1746
|
Skill darf keinen direct-push solcher Migrationen empfehlen, sondern muss
|
|
1114
1747
|
explizit den HIGH-RISK-Workflow vorschlagen + Vorlagen-Refs liefern.
|
|
1748
|
+
|
|
1749
|
+
---
|
|
1750
|
+
|
|
1751
|
+
## Phase 3.5: Marketing↔AGB↔DSE Konsistenz-Audit (PR-1, post-DACH-Studio-Brutal-Audit 2026-05-03)
|
|
1752
|
+
|
|
1753
|
+
> Anlass: B-001 (Anwalt-Pool-Behauptung) + B-003 (Refund-Trigger-Drift) im Brutal-Audit
|
|
1754
|
+
> 2026-05-03 waren MISS des Vor-Audits. Beide hatten Marketing-Claims, die mit
|
|
1755
|
+
> den jeweiligen AGB/DSE-Klauseln nicht konsistent waren.
|
|
1756
|
+
|
|
1757
|
+
**Pattern**: PFLICHT nach Phase-2-Einzel-Audit-Pages, VOR Phase-4-DSE-Vollstaendigkeit.
|
|
1758
|
+
|
|
1759
|
+
### 3.5.1 Trigger-Wording-Diff-Audit (UWG § 5 + § 5a)
|
|
1760
|
+
|
|
1761
|
+
Folgende Kategorien systematisch cross-checken — Marketing-Page vs. AGB/DSE:
|
|
1762
|
+
|
|
1763
|
+
| Kategorie | Marketing-Wording suchen | AGB/DSE-Klausel pruefen |
|
|
1764
|
+
|---|---|---|
|
|
1765
|
+
| **Refund-Trigger** | „nach Demo-Seite-Abnahme", „nach Lieferung" | AGB § 6 / § 6a: „ab Unterschrift", „ab Vertragsschluss" |
|
|
1766
|
+
| **Tarif-Inklusivleistungen** | Checkmark-Feature-Liste | AGB § 3 / § 4: Was ist tatsaechlich inklusive? |
|
|
1767
|
+
| **Zeit-Versprechen** | „binnen 72h", „8-12 Min", „innerhalb 24h" | AGB § 4: Vertragsfristen + Ausnahmen |
|
|
1768
|
+
| **Performance-Versprechen** | „Lighthouse ≥ 95", „LCP < 1.2s" | AGB: Garantie-Ausschluss-Klauseln |
|
|
1769
|
+
| **Service-Reichweite** | „Anwalt-Pool im Tarif", „Monitoring inklusive" | DSE / AGB: Ist dieses Feature tatsaechlich enthalten? |
|
|
1770
|
+
|
|
1771
|
+
**Grep-Pattern fuer Code-Repo**:
|
|
1772
|
+
|
|
1773
|
+
```bash
|
|
1774
|
+
# Refund-Trigger-Drift
|
|
1775
|
+
grep -rEn "nach Demo-Seite-Abnahme|nach Lieferung|nach Abnahme" src/app/ src/components/
|
|
1776
|
+
grep -n "ab Unterschrift\|ab Vertragsschluss\|ab Vertragsunterschrift" src/app/agb/
|
|
1777
|
+
|
|
1778
|
+
# Tarif-Inklusivleistungen
|
|
1779
|
+
grep -rEn "✓|gehakt|us: true" src/app/preise/ src/components/preise/ | grep -v "\.test\."
|
|
1780
|
+
# → jede true-Zeile gegen AGB § 3 pruefen
|
|
1781
|
+
|
|
1782
|
+
# Zeit-Versprechen
|
|
1783
|
+
grep -rEn "72.?[Hh]|8-12 Min|24.?[Hh]|binnen" src/app/ src/components/sections/ | grep -v "\.test\."
|
|
1784
|
+
# → gegen siteConfig.konfigurator + AGB-Fristen cross-checken
|
|
1785
|
+
```
|
|
1786
|
+
|
|
1787
|
+
**Output-Format bei Drift-Finding**:
|
|
1788
|
+
```
|
|
1789
|
+
🔴 DRIFT-STYLE-4 — Marketing↔AGB-Refund-Trigger-Drift (KRITISCH)
|
|
1790
|
+
- Marketing src/app/preise/page.tsx:38 sagt: „7 Tage nach Demo-Seite-Abnahme"
|
|
1791
|
+
- AGB src/app/agb/page.tsx:515 sagt: „7 Tage ab Unterschrift"
|
|
1792
|
+
- Unterschied: Marketing => POST-Werk; AGB => POST-Unterschrift-PRE-Werk
|
|
1793
|
+
- §§ 305c Abs. 2 BGB (Auslegung gegen Verwender) + UWG § 5 Abs. 1
|
|
1794
|
+
- Fix-Option A (Quick): Marketing an AGB anpassen (30 min)
|
|
1795
|
+
- Fix-Option B (strukturell): AGB erweitern um Demo-Abnahme-Trigger
|
|
1796
|
+
```
|
|
1797
|
+
|
|
1798
|
+
### 3.5.2 Cross-Page-Feature-Claim-Audit (UWG § 5 Abs. 1 Nr. 1)
|
|
1799
|
+
|
|
1800
|
+
Systematische Pruefung: jedes Feature das in Marketing-Pages als „wir haben X" behauptet
|
|
1801
|
+
wird → gibt es X tatsaechlich im Service-Angebot/Code?
|
|
1802
|
+
|
|
1803
|
+
```bash
|
|
1804
|
+
# Service-Feature in VS_OTHERS-Tabellen oder Feature-Cards
|
|
1805
|
+
grep -rEn "us: true|✓|'[^']+': true" src/app/preise/ src/components/ | grep -v test
|
|
1806
|
+
|
|
1807
|
+
# Dann fuer jeden Treffer pruefen:
|
|
1808
|
+
# 1. Existiert der genannte Service/Endpoint/Feature im Code?
|
|
1809
|
+
# 2. Ist er in der DSE/AGB als Bestandteil deklariert?
|
|
1810
|
+
# 3. Gibt es eine Service-Page, die ihn als explizit NICHT-enthalten beschreibt?
|
|
1811
|
+
```
|
|
1812
|
+
|
|
1813
|
+
Lesson aus B-001: preise.tsx hatte „Anwalt-Pool: ✓" obwohl dsgvo-check.tsx
|
|
1814
|
+
explizit „wir vermitteln keine Anwaelte" sagte. Solche 2-Page-Widersprueche
|
|
1815
|
+
sind ab sofort Phase-3.5-Pflicht.
|
|
1816
|
+
|
|
1817
|
+
---
|
|
1818
|
+
|
|
1819
|
+
## Phase 3.6: Az.-Citation-Provenance-Check (PR-2+PR-4, post-Brutal-Audit 2026-05-03)
|
|
1820
|
+
|
|
1821
|
+
> Anlass: BGH I ZR 137/12 wurde in 5 Scanner-Output-Strings als Beleg fuer Impressum-
|
|
1822
|
+
> Pflicht-Verletzung zitiert. Tatsaechlich ist I ZR 137/12 Teil-Berufsuebungsgemeinschaft
|
|
1823
|
+
> (Medizin-Recht, BGH 15.05.2014) — NULL Bezug zu Impressum-Pflicht.
|
|
1824
|
+
|
|
1825
|
+
**Trigger**: IMMER wenn Scanner-Output oder Site-Content Az. enthaelt.
|
|
1826
|
+
|
|
1827
|
+
**Pattern**:
|
|
1828
|
+
|
|
1829
|
+
```bash
|
|
1830
|
+
# Alle Az.-Zitate im Repo finden
|
|
1831
|
+
grep -rEn "[A-Z]+ [A-Z]+ [0-9]+\/[0-9]{2}" src/scanner/ src/app/ --include="*.ts" --include="*.tsx"
|
|
1832
|
+
|
|
1833
|
+
# Jeden Treffer gegen lokale Whitelist pruefen (bgh-urteile.md)
|
|
1834
|
+
```
|
|
1835
|
+
|
|
1836
|
+
**Whitelist-Check-Regel**:
|
|
1837
|
+
- Az. in bgh-urteile.md mit korrektem Tenor und Source-URL: ✅ Safe-to-use
|
|
1838
|
+
- Az. in bgh-urteile.md mit `[unverifiziert]` Marker: ⚠️ erst Volltext-Check, dann nutzen
|
|
1839
|
+
- Az. NICHT in bgh-urteile.md: ❌ NICHT zitieren, stattdessen Gesetzes-§
|
|
1840
|
+
- Az. mit `[FALSCH-ZITIERUNG]` Marker in bgh-urteile.md: ❌ NIEMALS nutzen
|
|
1841
|
+
|
|
1842
|
+
**Wenn kein Az. sicher:**
|
|
1843
|
+
```
|
|
1844
|
+
Gesetzes-§ zitieren ist immer sicherer als eine moeglicherweise falsche Az.:
|
|
1845
|
+
- Impressum-Pflicht: § 5a Abs. 1 UWG i.V.m. § 5 DDG als Marktverhaltensregel
|
|
1846
|
+
- Cookie-Banner: § 25 TDDDG + EuGH C-673/17 (Planet49)
|
|
1847
|
+
- Tracking: DSGVO Art. 6 Abs. 1 + EuGH C-40/17 (Fashion-ID)
|
|
1848
|
+
```
|