# Security-Feed-Credential-Preflight

anrufer.info: Credential-Preflight blockiert; 4/6 Check(s) offen, 3 Pflicht-Secret(s) fehlen.

> Credential-Preflight zeigt keine Secret-Werte, ruft im Standard keine externen Feeds auf und ersetzt keine menschliche Betreiberfreigabe.

## Credential-Referenzen
- **URLhaus Host API** (`SAFERPAGE_URLHAUS_AUTH_KEY`): missing, Owner: IT/Security
  Aktion: SAFERPAGE_URLHAUS_AUTH_KEY serverseitig setzen, PHP-FPM/Worker neu laden und Preflight erneut prüfen.
- **Google Safe Browsing API** (`SAFERPAGE_GOOGLE_SAFE_BROWSING_API_KEY`): missing, Owner: IT/Security
  Aktion: SAFERPAGE_GOOGLE_SAFE_BROWSING_API_KEY serverseitig setzen, PHP-FPM/Worker neu laden und Preflight erneut prüfen.
- **Webhook-HMAC fuer Delivery** (`SAFERPAGE_WEBHOOK_SECRET`): optional_missing, Owner: IT/Security
  Aktion: SAFERPAGE_WEBHOOK_SECRET serverseitig setzen, PHP-FPM/Worker neu laden und Preflight erneut prüfen.
- **Operator-HMAC fuer Delivery** (`SAFERPAGE_OPERATOR_WEBHOOK_SECRET`): optional_missing, Owner: IT/Security
  Aktion: SAFERPAGE_OPERATOR_WEBHOOK_SECRET serverseitig setzen, PHP-FPM/Worker neu laden und Preflight erneut prüfen.
- **Alert-Dispatch-Freigabe** (`SAFERPAGE_ALERT_DISPATCH_APPROVED`): optional_missing, Owner: Programm-Owner
  Aktion: SAFERPAGE_ALERT_DISPATCH_APPROVED=yes erst nach dokumentierter Betreiberfreigabe setzen.
- **Storage-Freigabe** (`SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED`): missing, Owner: Betreiber/Datenschutz
  Aktion: SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED=yes erst nach dokumentierter Betreiberfreigabe setzen.

## Checks
- **Keine Secret-Werte im Export**: passed - Preflight zeigt nur env_ref, present/status, Owner, Zweck und Aktion.
  Aktion: Keine Secret-Werte in Tickets, URLs, Logs, Screenshots oder Public-Exports übernehmen.
- **Produktive Feed-Credentials**: blocked - Mindestens eine Feed-Credential-Referenz fehlt.
  Aktion: SAFERPAGE_URLHAUS_AUTH_KEY und SAFERPAGE_GOOGLE_SAFE_BROWSING_API_KEY serverseitig setzen.
- **Signierte Betreiber-Zustellung**: blocked - SAFERPAGE_WEBHOOK_SECRET oder SAFERPAGE_OPERATOR_WEBHOOK_SECRET fehlt.
  Aktion: Ein Delivery-HMAC setzen oder Zielsystem bewusst als nicht im Scope dokumentieren.
- **Storage-Freigabe**: blocked - Speicherung echter Feed-Observations ist nicht freigegeben.
  Aktion: Retention, Review-Workflow, Publish-Regeln und Loeschpfad freigeben; erst danach Storage-Approval setzen.
- **Runner-State abrufbar**: passed - Security-Feed-Runner: 50 Domain(s) geprüft, 0 aktivierungsbereit, 0 externe Feed-Run(s), 0 Observation(s) gespeichert, 37 durch Gates blockiert, 13 ohne Reportseite, 0 technische Fehler.
  Aktion: Timer und letzten Lauf weiter ueberwachen.
- **Gesamte Aktivierung**: blocked - anrufer.info: Security-Feed-Aktivierung mit 5 Gate(s), 4 blockiert, Delivery ohne Secret.
  Aktion: Blockierte Gates aus Activation, Launch-Board und Dossier schließen.

## Reihenfolge
- Secrets in /etc/saferpage/security-feed.env oder Secret Manager setzen; keine Werte in Git, Tickets oder URLs ablegen.
- PHP-FPM/API, Screenshot-/Feed-Worker und systemd Units neu laden.
- Credential-Preflight und feed-secrets-json prüfen, bis nur bewusst optionale Referenzen fehlen.
- Optionalen Einzeltest erst mit SAFERPAGE_SECURITY_FEED_PREFLIGHT_APPROVED=yes und ?run=yes ausfuehren.
- Storage-Freigabe nach Retention-/Review-Entscheidung setzen und Launch-Board erneut pruefen.
- Alert-Dispatch-Zielsysteme mit signiertem Dry-Run testen, bevor echte Zustellung aktiviert wird.

## Security-Feed-Activation-Paket
- Env-Datei: /etc/saferpage/security-feed.env
- Template: https://saferpage.de/sicherheit/feed-activation-template.env
- Externe Feed-Abfrage durch Paket: nein
- Speicherung durch Paket: nein

### Env-Referenzen
- SAFERPAGE_URLHAUS_AUTH_KEY: URLhaus Host API Credential fuer Malware-/Phishing-Hostabfragen.
- SAFERPAGE_GOOGLE_SAFE_BROWSING_API_KEY: Google Safe Browsing API Key fuer Threat-Matches.
- SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED: Speicherung echter Feed-Observations erst nach Retention-, Review- und Datenschutzfreigabe.
- SAFERPAGE_SECURITY_FEED_PREFLIGHT_APPROVED: Kurzlebiges Guard-Flag fuer explizit angeforderte externe Einzelprobe.
- SAFERPAGE_WEBHOOK_SECRET: HMAC-Secret fuer signierte Betreiber-Webhook-Delivery.
- SAFERPAGE_OPERATOR_WEBHOOK_SECRET: Alternatives HMAC-Secret fuer Operator-Workflows.

### Smoke-Matrix
- `scripts/run-security-feed-dry-run-smoke.sh`: executed_count=0 und stored_observation_count=0.
- `scripts/run-security-feed-storage-preflight.sh`: missing_required_artifacts ist leer, bevor Storage-Approval gesetzt wird.
- `SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED=yes python3 scripts/run-security-feed-schedule.py anrufer.info --base-url http://127.0.0.1 --max 1 --timeout 15 --storage-canary`: Genau eine synthetische private Canary-Observation; keine externen Feed-Abfragen.
- `SAFERPAGE_SECURITY_FEED_PREFLIGHT_APPROVED=yes curl -fsS "https://saferpage.de/sicherheit/anrufer.info/feed-live-json?run=yes"`: Einzelprobe nur explizit, ohne Secret-Ausgabe und ohne automatische Speicherung.
- `curl -fsS https://saferpage.de/sicherheit/feed-launch-board-json`: blocked_gate_count=0 erst nach Credentials, Storage, Delivery und Runner-Gates.

### Abnahme
- [ ] Feed-Credentials sind als present=true sichtbar, ohne Secret-Werte auszugeben.
- [ ] Storage-Artefakte sind migriert und Storage-Readiness zeigt Tabellen, Indizes und Trigger ready.
- [ ] Retention-, Review-, Publish- und Loeschregeln sind im Approval-Dossier freigegeben.
- [ ] Storage-Canary wurde vor echten Feed-Treffern erfolgreich ausgefuehrt.
- [ ] Live-Probe und Runner-State zeigen keine Feed-Rohpayloads, Malware-Samples, Ziel-URLs oder personenbezogenen Logs.
