{"status":"pass","category":"SEC","severity":"high","evidence":["Code-Layer: src/swiss_environment_mcp/api_client.py:90-103 ALLOWED_HOSTS als frozenset (nicht config-mutierbar); :149-166 assert_host_allowed() erzwingt HTTPS + Host-Whitelist; :231,291,552 vor JEDEM ausgehenden Request (GET/SPARQL/Retry) aufgerufen.","Network-Layer (NEU, behebt vorigen partial): deploy/network-policy.example.yaml — Variante A vanilla NetworkPolicy (DNS + TCP/443), Variante B CiliumNetworkPolicy toFQDNs mit exakt den 10 ALLOWED_HOSTS (www.hydrodaten.admin.ch, opendata.swiss, www.naturgefahren.ch, www.waldbrandgefahr.ch, www.bafu.admin.ch, map.bafu.admin.ch, lindas.admin.ch, measurement-api.slf.ch, aws.slf.ch, www.jagdstatistik.ch) + DNS-Egress zu kube-dns.","Verglichen: FQDN-Liste im Manifest == ALLOWED_HOSTS (10/10 identisch).","Update-Verfahren (NEU): docs/security.md:112-122 verbindliches 4-Schritte-Verfahren; CONTRIBUTING.md:141-146 und CONTRIBUTING.de.md (Sicherheitsrelevante Aenderungen) — PR-Begruendung, network-policy im selben PR nachziehen, CHANGELOG unter Security, Second-Person-Review (kein Self-Merge).","DNS-Resolution-Path im Network-Layer explizit erlaubt (beide Varianten)."],"gaps":[],"evaluator_notes":"Voriger partial (nur Prosa, kein Artefakt, kein Verfahren) ist behoben: deploybares K8s/Cilium-Artefakt vorhanden, FQDN-Liste synchron mit Code-Layer, verbindliches Allow-List-Update-Verfahren in security.md + beiden CONTRIBUTING-Dateien. Alle 6 Pass-Kriterien erfuellt. Render/Docker-Einschraenkung (kein hostbasierter Egress) transparent dokumentiert."}
