Railway’s preliminary report says the attacker obtained CI-environment credentials, decrypted artifacts containing additional API access, and queried encrypted environment variables, with a subset decrypted. That supports precautionary rotation for every secret present in Railway during the exposure window, but it does not prove every customer secret was read or used. Masked environment variables are still credentials, not Schrödinger’s secrets.
Use this dependency order, preserving evidence before revocation wherever that does not prolong access:
- Deployment control and cloud IAM: invalidate Railway sessions and project/team/API tokens; remove unknown members and integrations; then rotate AWS access keys/role credentials, Azure service-principal secrets, GCP service-account keys, kubeconfigs, and secret-manager credentials. These identities can recreate infrastructure or retrieve downstream secrets.
- Repository and CI/CD: rotate GitHub/GitLab PATs, deploy keys, GitHub App credentials, webhooks, runner tokens, and Railway deployment tokens. Review installed applications and workflow changes before trusting the pipeline to distribute replacements.
- Private registries and signing: rotate Docker Hub, GHCR, ECR, ACR, GAR and other registry robot credentials, followed by image-signing or provenance keys. Inspect for unexpected pushes, tag replacement, permission changes, or newly issued tokens. Pin deployments to reviewed image digests.
- Databases and state stores: create new database/cache credentials, update Railway variables and consumers, redeploy or restart workloads, verify successful use, and only then revoke the old credentials. Remove public database exposure as Railway recommends. Rotate snapshot/export and replication credentials as well.
- Application and third-party secrets: rotate session/JWT signing keys first—accepting that this invalidates sessions—then encryption keys, payment, email, DNS/CDN, monitoring, AI-provider, OAuth-client and webhook secrets. For each dependency: issue replacement, update the consumer, validate, revoke the predecessor, and watch for continued use of the old key.
Preserve and correlate Railway account/session and API-access records, project activity, member and integration changes, variable changes or access evidence supplied by Railway, and deployment/build logs. Add GitHub or GitLab audit, application-installation, PAT/deploy-key, workflow, runner and job logs; Docker Hub/GHCR activity plus AWS CloudTrail/ECR, Azure Entra sign-in and audit logs/Activity Log/ACR diagnostics, or GCP Cloud Audit Logs/Artifact Registry records. Preserve database authentication, query, role-change, snapshot/export and connection logs; workload ingress/load-balancer/WAF, application-authentication, container, Kubernetes API-audit and secret-manager access logs. Correlate in UTC using credential or principal ID, source IP/ASN, user agent, repository commit, image digest, Railway deployment ID, workload revision and database user.
Treat rotation as precautionary when a secret merely existed in Railway and there is no tenant-specific evidence of decryption, successful downstream authentication, or resource access. Escalate to full incident response when Railway confirms the customer’s variable was decrypted, an old credential authenticated unexpectedly, repositories were accessed, images were pushed or replaced, cloud IAM changed, databases were queried/exported, or workloads were redeployed without authorization. Long-lived privileged credentials with inadequate downstream logging should be treated as presumed compromised. Railway owns the platform-side access determination; customers own revocation and investigation across every downstream trust relationship.