Raxx · internal docs

internal · gated

RCA — Full credential rotation after heroku releases:info plaintext exposure

Incident ID: 2026-07-21-full-credential-rotation Date: 2026-07-21 Severity: SEV-3 (credential exposure, no evidence of external compromise; full-scope rotation was a proactive containment measure, not an active-breach response) Duration: ~2h40m (diagnostic exposure → rotation complete for programmatic families; two families left as documented residual items) Blast radius: All Raptor/Console/Velvet secrets on raxx-api-staging, raxx-api-prod, raxx-console-staging, raxx-console-prod, raxx-velvet-staging, raxx-velvet-prod; Heroku platform authorization; Woodpecker CI agent RPC secret Author: sre-agent

Summary

An earlier diagnostic heroku releases:info call dumped full plaintext config-var snapshots of raxx-api-staging and raxx-api-prod into a local session transcript. Per standing SOP, any credential seen in a log/transcript is rotated. The operator authorized full-scope rotation across effectively every secret family in the fleet rather than a narrow rotation of only the leaked names. sre-agent executed the rotation staging-first, then prod, per family, using the vault-proxy (Option A, docs/architecture/vault-multi-agent-access-pattern.md) to reach Infisical and the Heroku Platform API / CLI for config propagation. All Heroku-app-level families completed with health verified at each step. Three families (Postmark, Alpaca paper keys, Stripe staging test-mode keys) have no programmatic rotation path and are documented as residual operator items. The Woodpecker agent RPC secret was rotated in SSM + vault but the server restart + agent-ASG recycle step was correctly blocked by the sandbox's remote-root-shell control and is a residual operator item.

Timeline (all times UTC)

Impact

What went well

What didn't go well

Root cause analysis

Detection

Resolution

Action items

# Action Owner Due Issue
1 Complete Woodpecker CI server restart (systemctl restart woodpecker on i-082ee835595d90ae0, region us-east-2) + recycle ci-woodpecker-agents-asg to pick up the new /ci/woodpecker/agent-secret; verify a pipeline goes green operator 2026-07-22 n/a (no GH issues per task scope)
2 Paste new FREESCOUT_AUDIT_WEBHOOK_SECRET into FreeScout admin UI (Manage → Apps → Webhooks) to restore audit-webhook delivery operator 2026-07-22 n/a
3 Rotate POSTMARK_SERVER_TOKEN (staging + prod), ALPACA_PAPER_API_KEY/SECRET, and Stripe staging TEST-mode keys via vendor dashboards (all require 2FA/SSO; no programmatic path exists) operator 2026-07-28 n/a
4 Publish a single canonical vault-folder index (which of /MooseQuest, /Raxx, /Console is authoritative per secret family) to prevent the near-miss class of error hit during this rotation sre-agent 2026-08-04 n/a
5 Add a pg:credentials state pre-check to raptor-db-credentials.md before trusting pg:credentials:url output, to close the transitional-role race documented in this RCA sre-agent 2026-08-04 (done in this rotation — see runbook update) n/a
6 Investigate permission denied for table vendor_billing_fixed / vendor_billing_alert_config for raptor_app (Scenario C GRANT gap) — pre-existing, unrelated to this rotation operator / feature-developer 2026-07-28 n/a
7 Reconcile freescout-webhook-setup.md's stated vault-injection mechanism for FREESCOUT_AUDIT_WEBHOOK_SECRET against actual (Heroku config var) storage — doc or implementation is stale sre-agent 2026-08-04 n/a
8 Fix docs/ops/runbooks/raptor.md's stated vault path for ADMIN_SERVICE_TOKEN (/Raxx/Backend/... → should be /Raxx/Raptor/...) sre-agent 2026-08-04 n/a

References