Finding 8: Unblu chat consent links to third-party DSE (unblu.com) instead of EUIPO's own privacy policy (Art. 13 DSGVO) Finding 9: Cookie consent delegated to third-party terms without own legal basis (§25 TDDDG) Finding 10: Click-outside-dialog = accept — accidental click counts as consent (Planet49, Art. 7(1) DSGVO) New planned agent checks: - Drittanbieter-DSE-Check: detect consent linking to external DSE - Modal-Dismiss-Check: Playwright test if backdrop click = consent - Dark-Pattern-Sprache: detect "muessen/erforderlich" for non-essential cookies Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9.2 KiB
Test Case: EUIPO Registration — Consent-Formulierung
Quelle: EU-Behoerde (Amt der Europaeischen Union fuer geistiges Eigentum) URL: https://login.euipo.europa.eu (Registrierungsseite) Entdeckt: 2026-05-04 Typ: Consent-Text-Fehler + Koppelungsverbot Schwere: HIGH
Befund
Auf der Registrierungsseite des EUIPO steht (vollstaendiger Text):
"Wenn Sie auf Anmelden klicken, stimmen Sie unseren zu Nutzungsbedingungen und Datenschutz-Bestimmungen gelesen und verstanden Registrieren Haben Sie bereits ein Konto? Anmelden Datenschutz-Bestimmungen gelesen und verstanden Nutzungsbedingungen Deutsch"
Der Text "Datenschutz-Bestimmungen gelesen und verstanden" und "Nutzungsbedingungen" erscheinen als separate Links unterhalb des Registrieren-Buttons — vermutlich soll der obere Satz darauf verweisen, aber die Verknuepfung ist kaputt (Links nach dem Button statt inline).
Fehler
| # | Typ | Beschreibung | Rechtsgrundlage |
|---|---|---|---|
| 1 | Sprachfehler | Satz grammatisch unvollstaendig ("stimmen Sie unseren zu" ergibt keinen Sinn) | Art. 12(1) DSGVO (klare und verstaendliche Sprache) |
| 2 | Zwangs-Consent | Login = automatische Zustimmung, kein separater Opt-in | Art. 7(4) DSGVO (Koppelungsverbot) |
| 3 | Keine Ablehnung | Kein Button um NICHT zuzustimmen (nur Login oder Seite verlassen) | Art. 7(3) DSGVO (Widerruf so einfach wie Erteilung) |
| 4 | Keine Granularitaet | Nutzungsbedingungen und Datenschutz werden in einer Zustimmung zusammengefasst | EDPB Guidelines 05/2020 Rn. 43 (Granularitaet) |
| 5 | Kein aktiver Consent | Kein Checkbox oder aktive Handlung — blosse Nutzung gilt als Zustimmung | EuGH C-673/17 Planet49 (aktive Einwilligung) |
| 6 | Kaputtes Link-Layout | Links zu DSE und Nutzungsbedingungen erscheinen NACH dem Registrieren-Button statt inline im Consent-Text — der Satz oben verweist ins Leere | Art. 12(1) DSGVO (leicht zugaenglich) |
| 7 | Uebersetzungsfehler | Offensichtlich maschinell aus EN uebersetzt ("stimmen Sie unseren zu" ist kein korrektes Deutsch) — widerspricht Anforderung an Muttersprache des Nutzers | Art. 12(1) DSGVO (klare und einfache Sprache) |
| 8 | Unblu Chat Drittanbieter-DSE | Chat-Consent verweist auf Datenschutzerklaerung von unblu.com (Drittanbieter) statt auf EUIPO-eigene Cookie-/Chat-Richtlinie. EUIPO ist Verantwortlicher (Art. 4 Nr. 7 DSGVO), muss eigene DSE bereitstellen. | Art. 13 DSGVO (Informationspflichten), Art. 26 DSGVO (gemeinsame Verantwortlichkeit) |
| 9 | Unblu Chat Cookies ohne eigene Rechtsgrundlage | "Unblu-Cookies muessen heruntergeladen werden" — EUIPO delegiert Cookie-Einwilligung an Drittanbieter-DSE statt eigene Rechtsgrundlage zu benennen | § 25 TDDDG / Art. 5(3) ePrivacy-RL |
| 10 | Dismiss-by-Click = Consent | Klick neben das Chat-Consent-Fenster wird als "Akzeptieren" gewertet. Versehentlicher Klick ist KEINE aktive Einwilligung. Modal muss echte Wahl erzwingen. | EuGH C-673/17 Planet49 (aktive Handlung), Art. 7(1) DSGVO (Nachweispflicht) |
Befund 2: Unblu Chat Consent (nach Login)
Nach Registrierung und Login erscheint ein Chat-Fenster:
"Personenbezogene Daten werden gemaess der Datenschutzerklaerung fuer den Online-Chat erhoben und verarbeitet. Fuer den Online-Chat muessen Unblu-Cookies heruntergeladen werden, damit er ordnungsgemaess funktioniert und damit die Chat-Operatoren wissen, wann Sie zuletzt per Chat mit dem Amt kommuniziert haben. Diese Cookies unterliegen den Datenschutzbestimmungen des Unblu Chats und werden nur eingesetzt, wenn Sie sich fuer die Nutzung des Chats entscheiden."
[Abbrechen] [Akzeptieren]
Was positiv ist:
- Es gibt tatsaechlich einen "Abbrechen"-Button (besser als die Registrierung)
- Der Text erklaert den Zweck der Cookies (Chat-Funktionalitaet + Verlauf)
Was falsch ist:
1. Drittanbieter-DSE statt eigener: Die Datenschutzerklaerung verlinkt auf unblu.com — aber EUIPO ist der Verantwortliche fuer die Datenverarbeitung, nicht Unblu. Unblu ist Auftragsverarbeiter. Die EUIPO muesste eine eigene Chat-Datenschutzerklaerung haben die beschreibt:
- Welche Daten erhoben werden
- Rechtsgrundlage (Art. 6(1)(a) Einwilligung)
- Speicherdauer
- Rechte des Betroffenen
- Kontakt zum DSB
2. Klick daneben = Akzeptieren: Das Chat-Fenster ist NICHT modal — ein Klick auf den Hintergrund neben dem Fenster schliesst es UND wertet dies als Einwilligung. Das verletzt:
- Art. 7(1) DSGVO: Einwilligung muss nachweisbar sein (versehentlicher Klick ist kein Nachweis)
- EuGH Planet49: Einwilligung erfordert eine eindeutige bestaetigende Handlung
- EDPB Guidelines 05/2020 Rn. 77: "Silence, pre-ticked boxes or inactivity should not constitute consent"
Ein Klick neben ein Fenster ist "inactivity" im Sinne der EDPB-Leitlinien — keine aktive Entscheidung.
3. "muessen heruntergeladen werden": Die Formulierung suggeriert technische Notwendigkeit ("muessen"), obwohl die Cookies fuer den Zweck "wann Sie zuletzt per Chat kommuniziert haben" nicht technisch notwendig sind. Das ist eine Dunkle-Muster-Formulierung die den Nutzer zur Zustimmung draengt.
Erwartete Agent-Erkennung
Der Compliance Agent sollte folgende Checks ausfuehren:
1. Consent-Text-Analyse (consent_scanner.py)
banner_text_violations: Grammatisch fehlerhafte Consent-Formulierung erkennen- Severity: HIGH
- Finding: "Consent-Text ist grammatisch unvollstaendig und nicht verstaendlich (Art. 12(1) DSGVO)"
2. Koppelungs-Check (authenticated_scanner.py)
- Login-Button darf nicht gleichzeitig Consent erteilen
- Finding: "Einwilligung wird an Registrierung/Login gekoppelt (Art. 7(4) DSGVO)"
3. Ablehn-Button-Check (consent_scanner.py)
reject_button_check: Kein gleichwertiger Ablehn-Button vorhanden- Finding: "Keine Moeglichkeit die Einwilligung abzulehnen"
4. Granularitaets-Check (NEU — zu implementieren)
- Nutzungsbedingungen ≠ Datenschutz-Einwilligung
- Muessen separat zustimmbar sein
- Finding: "Nutzungsbedingungen und Datenschutz in einer Zustimmung zusammengefasst"
5. Drittanbieter-DSE-Check (NEU — zu implementieren)
- Consent-Dialog verweist auf DSE eines Drittanbieters statt auf eigene DSE
- Pruefe ob href in Consent-Text auf andere Domain zeigt als die aktuelle Website
- Finding: "Consent verweist auf Datenschutzerklaerung von {domain} — Verantwortlicher muss eigene DSE bereitstellen (Art. 13 DSGVO)"
6. Modal-Dismiss-Check (NEU — zu implementieren)
- Pruefe ob Consent-Dialog durch Klick auf Hintergrund geschlossen wird
- Wenn dismiss = accept → Verstoss
- Playwright: Klick auf Overlay-Backdrop, pruefe ob Consent gesetzt wurde
- Finding: "Consent-Dialog kann durch Klick neben das Fenster geschlossen werden, was als Einwilligung gewertet wird (Art. 7(1) DSGVO, Planet49)"
7. Dark-Pattern-Sprache (NEU — zu implementieren)
- "muessen heruntergeladen werden" suggeriert technische Notwendigkeit
- Pruefe auf Formulierungen die Zwang suggerieren: "muessen", "erforderlich", "notwendig" fuer nicht-essentielle Cookies
- Finding: "Formulierung suggeriert technische Notwendigkeit fuer nicht-essentielle Cookies (Dark Pattern, EDPB Guidelines 05/2020 Rn. 70)"
Korrekturvorschlag
Korrekte Formulierung
☐ Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu. (Pflichtfeld)
☐ Ich habe die Datenschutzerklaerung gelesen und erklaere mich mit der
Verarbeitung meiner personenbezogenen Daten gemaess Art. 6(1)(a) DSGVO
einverstanden. (Freiwillig — Registrierung auch ohne moeglich)
[Registrieren] [Abbrechen]
Warum korrekt:
- Zwei separate Checkboxen (Granularitaet)
- Aktive Handlung noetig (Checkbox ankreuzen, nicht nur Button klicken)
- Datenschutz-Consent ist freiwillig (Koppelungsverbot)
- Klare Sprache, vollstaendige Saetze
- Abbrechen-Button als Alternativhandlung
Technische Implementierung als Agent-Check
Neuer Check: consent_text_quality
# In consent_scanner.py oder neuer Check
CONSENT_TEXT_PATTERNS = [
# Zwangs-Consent bei Login/Registrierung
r"(?:klicken|anmelden|registrieren).*stimmen\s+(?:Sie|sie|du).*zu",
r"(?:login|sign.?up|register).*(?:agree|accept|consent)",
# Grammatisch unvollstaendige Saetze
r"stimmen\s+(?:Sie|sie|du)\s+unseren?\s+zu",
# Fehlende Granularitaet
r"(?:nutzungsbedingungen|terms).*(?:und|and).*(?:datenschutz|privacy).*(?:zu|agree|accept)",
]
MISSING_ELEMENTS = [
"checkbox", # Aktive Zustimmung (nicht nur Button)
"button.*ablehnen", # Ablehn-Option
"button.*cancel", # Abbrechen-Option
]
Neuer Check: coupling_prohibition
Prueft ob Einwilligung an Registrierung/Login/Kauf gekoppelt ist:
- Login-Button text enthalt "zustimmen/agree/accept" → Koppelungsverbot
- Kein separater Consent-Checkbox vor Login-Button → Koppelungsverbot
- Einwilligung als Pflichtfeld bei Registrierung → Koppelungsverbot (wenn Service auch ohne nutzbar)
Relevanz
Dieser Case ist besonders relevant weil:
- EU-Behoerde — wenn selbst das EUIPO es falsch macht, wie sollen KMUs es richtig machen?
- OIDC-Registrierung — sehr haeufiges Pattern bei SaaS-Produkten
- Mehrsprachig — der deutsche Text ist offensichtlich schlecht uebersetzt
- Systemisch — WSO2 Identity Server Templates enthalten dieses Pattern standardmaessig