[Security] Retire legacy inline Campaign mail secrets from history and backups #77

Closed
opened 2026-07-21 16:57:19 +02:00 by zemion · 1 comment
Owner

Outcome

No live Campaign row, generated runtime artifact, retained execution snapshot, or eventually expired backup remains a reusable SMTP/IMAP credential store. The remediation remains attributable without copying or hashing password values into new evidence.

Current containment

New authoring accepts only server.mail_profile_id. Legacy inline transport records are recursively redacted from ordinary responses and fail closed for validation/build/queue/retry/delivery. This prevents execution and disclosure but deliberately does not remove historical plaintext at rest.

Decision required

Changing locked/versioned source JSON is a security remediation that conflicts with byte-for-byte historical immutability. Approve the evidence model and backup treatment before implementation:

  • Live rows: remove secret-bearing fields (and preferably all consumer-owned transport copies), record affected version/snapshot ids and removed field classes/counts in a non-secret audit event, and preserve no password-derived hash.
  • Runtime artifacts: identify and securely remove obsolete snapshot/generated-message directories according to Campaign evidence policy.
  • Backups: choose expiry/destruction or cryptographic-erasure/key-rotation treatment; an online migration cannot rewrite every retained copy safely.
  • Restoration: require a post-restore remediation gate before outbound delivery is enabled.

Acceptance after decision

  • A dry-run inventory reports counts and locations without values.
  • The migration is resumable, idempotent, tenant-scoped where practical, and separately authorized.
  • Locked/history records retain business content and a verifiable remediation marker while secret/config copies are removed.
  • Audit failure rolls back the corresponding live-row change.
  • Backups and runtime artifacts have an operator-approved treatment and restoration gate.
  • Regression scans seed distinctive plaintext/ciphertext values and prove they are absent from live Campaign persistence, exports, logs, reports, and retired artifacts.
## Outcome No live Campaign row, generated runtime artifact, retained execution snapshot, or eventually expired backup remains a reusable SMTP/IMAP credential store. The remediation remains attributable without copying or hashing password values into new evidence. ## Current containment New authoring accepts only `server.mail_profile_id`. Legacy inline transport records are recursively redacted from ordinary responses and fail closed for validation/build/queue/retry/delivery. This prevents execution and disclosure but deliberately does not remove historical plaintext at rest. ## Decision required Changing locked/versioned source JSON is a security remediation that conflicts with byte-for-byte historical immutability. Approve the evidence model and backup treatment before implementation: - Live rows: remove secret-bearing fields (and preferably all consumer-owned transport copies), record affected version/snapshot ids and removed field classes/counts in a non-secret audit event, and preserve no password-derived hash. - Runtime artifacts: identify and securely remove obsolete snapshot/generated-message directories according to Campaign evidence policy. - Backups: choose expiry/destruction or cryptographic-erasure/key-rotation treatment; an online migration cannot rewrite every retained copy safely. - Restoration: require a post-restore remediation gate before outbound delivery is enabled. ## Acceptance after decision - A dry-run inventory reports counts and locations without values. - The migration is resumable, idempotent, tenant-scoped where practical, and separately authorized. - Locked/history records retain business content and a verifiable remediation marker while secret/config copies are removed. - Audit failure rolls back the corresponding live-row change. - Backups and runtime artifacts have an operator-approved treatment and restoration gate. - Regression scans seed distinctive plaintext/ciphertext values and prove they are absent from live Campaign persistence, exports, logs, reports, and retired artifacts.
Author
Owner

Decision recorded 2026-07-21: there is no separate historical Campaign JSON corpus outside the current database. Inline SMTP/IMAP material in existing database rows remains inert, omitted from ordinary responses, and fail-closed for validation/build/queue/delivery. Normal database backup/restore and access controls cover those rows; GovOPlaN will not create a separate backup-scanning or historical-inline-secret remediation program. The handbook and Mail profile boundary have been updated accordingly, so this issue is closed as no longer required.

Decision recorded 2026-07-21: there is no separate historical Campaign JSON corpus outside the current database. Inline SMTP/IMAP material in existing database rows remains inert, omitted from ordinary responses, and fail-closed for validation/build/queue/delivery. Normal database backup/restore and access controls cover those rows; GovOPlaN will not create a separate backup-scanning or historical-inline-secret remediation program. The handbook and Mail profile boundary have been updated accordingly, so this issue is closed as no longer required.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-campaign#77
No description provided.