PocketOS loses production and every backup in nine seconds
PocketOS runs operations for car rental businesses. Customers arrived at counters to collect vehicles and found no record of their reservations, because three months of bookings no longer existed.
- The agent is working a routine task in staging and hits a credential mismatch.
-
It searches the workspace and finds a Railway CLI API token sitting in an unrelated file. The token was originally created to manage custom domains.MitigationVault + Vault Secrets Operator
Vault holds every credential, and VSO projects each one into a single namespace as a Kubernetes Secret gated by a per-namespace auth role. Each namespace reads exactly the paths its own work requires. Credentials for every other system stay in Vault, reachable only by the namespaces entitled to them.
-
That token carries blanket authority across Railway's entire GraphQL API, including
volumeDelete. Nothing scoped it to the domain task it was minted for.MitigationSPIFFE / SPIRE + service mesh mTLSWorkload identity is an attested SPIFFE ID issued by SPIRE and enforced as mTLS by the mesh. Authority binds to the attested workload itself, so it travels with the running pod and stays with it. Token exchange then narrows each outbound call to a short-lived token derived from the human's own identity, so every call carries exactly the privilege that call requires.
-
One GraphQL mutation deletes the production volume. Railway stores volume-level backups inside the same volume, so the fallback dies with the data. Elapsed time: nine seconds.MitigationAuthBridge + IBAC
This is a plain HTTPS call with no MCP envelope around it, which is exactly the case the pipeline is configured for. With
unclassified_policy: judge, IBAC sees every outbound call the agent makes except its own model inference. It weighs each call against the task on record, which here was fixing a credential mismatch in staging, and a destructive mutation against production fails that test. AuthBridge is a separate sidecar container that the agent proxies through, so the check holds independently of whatever the agent decides.
I violated every principle I was given.
Sources: Fast Company · Live Science · Zenity technical breakdown · Hackread