feat(cookie): missing_retention — Vendor ohne Speicherdauer/Löschfrist
Vendor-Ebenen-Finding: greift, wenn ein Vendor eine Verarbeitung deklariert (Kategorie/Zweck), aber KEINE Cookies gelistet sind UND keine persistence angegeben ist (z.B. Nayoki GmbH — 'necessary' Auftragsverarbeiter ohne Löschfrist). Die Pro-Cookie-Schleife sah solche Vendors nie (0 Cookies → 0 Findings). Remediation = Ticket-Text 'bitte Löschfrist festlegen'. Art. 5 Abs. 1 lit. e + Art. 13 Abs. 2 lit. a → Control AUTH-2051-A03. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,33 @@ def test_vague_duration_flagged_concrete_ok():
|
||||
assert "Art. 5" in vd[0]["remediation"]
|
||||
|
||||
|
||||
def test_missing_retention_vendor_without_cookies_or_duration():
|
||||
# User-Beispiel Nayoki GmbH: als 'necessary' deklarierter Auftragsverarbeiter,
|
||||
# KEINE Cookies gelistet, KEINE persistence → Speicherdauer/Löschfrist-Finding.
|
||||
out = analyze_cookies([{
|
||||
"name": "Nayoki GmbH — BMW Sport & Kultur Social Wall",
|
||||
"category": "necessary", "persistence": "",
|
||||
"purpose": "Verwaltung der Social Wall.",
|
||||
"cookies": [],
|
||||
}])
|
||||
mr = [f for f in out["findings"] if f["type"] == "missing_retention"]
|
||||
assert len(mr) == 1
|
||||
assert "Nayoki" in mr[0]["vendor"]
|
||||
assert "Löschfrist" in mr[0]["remediation"]
|
||||
assert mr[0]["severity"] == "MEDIUM"
|
||||
assert mr[0]["control"]["control_id"] == "AUTH-2051-A03"
|
||||
assert "Art. 13 Abs. 2" in mr[0]["control"]["article"]
|
||||
|
||||
|
||||
def test_no_missing_retention_when_vendor_has_cookies():
|
||||
# Vendor MIT Cookies (konkrete Dauer) → kein missing_retention.
|
||||
out = analyze_cookies([{
|
||||
"name": "X", "category": "necessary", "persistence": "",
|
||||
"cookies": [{"name": "sess", "purpose": "x", "expiry": "Session"}],
|
||||
}])
|
||||
assert not [f for f in out["findings"] if f["type"] == "missing_retention"]
|
||||
|
||||
|
||||
def test_big_library_covers_cookie_not_in_rich_db():
|
||||
# Cookie nicht in der 35er rich-DB, aber in der grossen 2287er (big_lib).
|
||||
big = {"bmw_track_de": {
|
||||
|
||||
Reference in New Issue
Block a user