All ArticlesRuntime Truth
Runtime Truth
Feature Blog
AI Agent Security

30-Minute SaaS Breach Containment

The gap between losing a tenant and containing a machine insider is a 30-minute window, one control plane, and knowing an agent's effective access before the alert fires.

Obsidian Editorial Team
Security Research
·
Obsidian Security
·
July 30, 2026
Key Takeaways

Report-only alerts lose to automated attackers because human triage runs on shift time (4 to 24 hours) while token abuse completes in minutes. - Real containment means revoking the OAuth grant, killing the agent session, and blocking the specific action chain, not taking the app offline for the whole company. - Scoping decides everything. Cut the wrong session and you break production; cut the right one and you hold the blast radius to a single identity. - The decision turns on effective access, meaning what the compromised agent can actually reach inside each connected app, not what its theoretical configuration says. - Autonomous runtime enforcement is available today for Claude and Microsoft Copilot only, through a Cloudflare-first "Intel Inside" model. Every other platform gets discover and govern today, with enforcement on the roadmap. - Obsidian is not an inline hop. It is the decision engine that tells the enforcement point which token, session, or non-human identity to cut.

Why Report-Only Fails Against Automated Attackers

SaaS breach containment is the 30-minute window between spotting a compromised agent and cutting its access, before data leaves your tenant. Report-only detection cannot hold that window. It watches an agent do something suspicious, writes a log, and pages a human. That was enough when the attacker was a person at a keyboard. It is not enough when the attacker is a stolen OAuth token being replayed by a script at machine speed.

The scale problem is structural. Agents move roughly 16 times more data than the humans they work alongside, so a compromised one reaches further in the same number of seconds. The Salesloft Drift campaign reached around 700 organizations because bearer tokens were replayed faster than any SOC could work the queue. Legitimate integration traffic and malicious traffic looked identical. By the time an analyst opened the ticket, the data was already gone.

Here is the mechanism. An automated attacker chains three moves in under a minute: replay the token, run the query, push the results to an endpoint it controls. If your containment path runs through a ticket, an on-call ping, and an admin signing into a console to revoke access, the incident is over before anyone acts.

What Happens When You Miss the Window

Slow containment compounds in four directions at once: more data leaves, more systems get reached through agent-to-agent chaining, the notification window stretches, and regulatory exposure climbs with it. The Salesloft Drift blast radius is the clearest example on record. One delayed containment did not stay one incident; it cascaded into hundreds of downstream ones across connected tenants.

What 30-Minute SaaS Breach Containment Actually Blocks

Effective containment blocks four specific things: the compromised OAuth token, the agent session riding on it, the downstream tool calls, and the data path out to the attacker. It does not mean taking Salesforce offline for everyone. Here is what a real action looks like at minute 12 of an incident.

Action Report-only approach 30-minute containment
Revoke OAuth grant Ticket to IT, 4 to 24 hr SLA Automated via API, under 60 sec
Kill agent session Manual admin console Runtime action, immediate
Block tool call chain Not possible without an inline hop Edge decision, sub-second
Preserve legitimate access Full app shutdown risk Scoped to the affected identity only

The point is that containment is surgical. You cut the compromised path, not the artery that keeps the business running.

The First 30 Minutes, Step by Step

The sequence is fixed. Skipping a step to save time almost always costs more time later.

Minutes 0 to 5, confirm and scope. Verify the alert against actual runtime behavior so you are not chasing a false positive. Identify the specific token, agent, or session. Pull the effective access map for that identity.

Minutes 5 to 15, contain. Revoke the OAuth grant at the identity provider, and revoke the refresh token with it. Kill active sessions using the compromised credentials. Block the specific tool call chain at the enforcement point. Preserve logs first, because panic revocations are how evidence gets wiped.

Minutes 15 to 25, verify. Confirm no new session can spawn from the revoked grant. Check for lateral movement into sibling agents. Validate that legitimate users are still working.

Minutes 25 to 30, hand off. Document the action chain for the IR team, preserve the runtime evidence for forensics, and start the notification clocks.

SaaS Breach Containment vs Incident Response

These are not the same job, and treating them as one is how teams lose the window. Containment is the 30-minute action: stop the bleeding, cut attacker access, keep production up. Incident response is the multi-day process: find root cause, notify stakeholders, remediate the underlying weakness, update controls. Containment feeds IR; it does not replace it. Teams that jump straight to forensic imaging and war-room meetings skip the only step that was time-bound.

Scoping the Minimal Action via Effective Access

The containment decision hinges on effective access, not theoretical configuration. Before you revoke anything, you need to know what the compromised agent can actually reach inside each connected app: which service account it assumed, which objects and rows it can read, which actions it can invoke. Around 90 percent of agents are over-permissioned, so the reachable surface is almost always wider than the config page implies.

A Copilot agent labeled "read-only" may inherit maker-mode credentials that hand it admin-level Salesforce access. Revoking its Microsoft token does nothing to the Salesforce path. You have to cut both, and you only know that if you have mapped the effective access ahead of time.

The scoping model runs in order:

  1. Identify the runner, meaning whoever invoked the agent or replayed the token.
  2. Identify the maker, meaning whose credentials the agent inherits.
  3. Map the effective access, meaning the data and actions actually reachable through that non-human identity.
  4. Cut the smallest set of grants that breaks the attack chain.
  5. Preserve everything else.

Obsidian's identity graph produces this map continuously, correlating each agent's real activity back to what it can touch inside the third-party app. When the incident hits, the decision is already made: this token, this agent, these downstream connections. No live investigation, no guesswork. That is what runtime truth buys you. A team reviewing theoretical configuration risk cannot answer "what did this token actually touch" inside the 30-minute window. Runtime truth answers it before the window even opens.

The SaaS Breach Containment Checklist

The obvious grant is rarely the only one. Before you call an incident contained, walk this list:

  • OAuth grants across every app the identity touches, not just the one that fired the alert.
  • Refresh tokens, since revoking the access token alone lets the session quietly renew.
  • Agent-to-agent trust chains that share the compromised context.
  • MCP server tokens the agent may have cached.
  • Sibling agents built by the same maker on the same fixed credentials.
  • Public webhook endpoints that may still be listening.
  • Break-glass admin accounts that may have been used to escalate.

Common Scoping Mistakes

The recurring failures are predictable: shutting down the whole app instead of scoping to one identity, forgetting refresh tokens, skipping the effective access check and missing inherited maker-mode reach, revoking before preserving evidence, and assuming a single-platform action ends an incident when agents chain across platforms.

Runtime Enforcement as a Decision Engine, Not a Gateway

Obsidian is not inline. It is not a network proxy in the traffic path. It is the decision engine that tells the enforcement point what to do. This distinction is the whole model, so it is worth stating precisely.

Autonomous runtime enforcement is available today for Claude and Microsoft Copilot only, through a Cloudflare-first "Intel Inside" arrangement. Cloudflare enforces at its edge, where the traffic already flows. Obsidian supplies the identity, effective access, and behavior intelligence that makes the block decision correct. For every other platform, including Bedrock, Vertex, Agentforce, ServiceNow and Now Assist, Snowflake Cortex, Moveworks, and n8n, Obsidian delivers discovery, governance, risk scoring, and human-in-the-loop containment workflows today. Autonomous enforcement on those platforms is on the roadmap, not shipping.

The decision-engine model matters for containment in concrete ways:

  • No new inline hop that can break production traffic.
  • No latency added to legitimate agent calls.
  • Enforcement happens where traffic already runs, not in a bottleneck you own.
  • The identity graph supplies the "who and what" context a raw enforcement point cannot see on its own.

An enforcement point looking only at packets sees a valid token on a valid session. It does not know that token belongs to an orphaned agent whose creator was offboarded three months ago, or that the same maker built four siblings on the identical credential. The decision engine knows, because it has been correlating that non-human identity's activity to its effective access the whole time.

The Containment Tool Stack

A working stack has three layers. The identity intelligence layer knows who and what has access; Obsidian covers the agents and non-human identities, your identity provider covers the humans. The enforcement layer cuts access where traffic flows, through Cloudflare for the supported platforms and through native app APIs for the rest. The orchestration layer, your SOAR or IR platform, coordinates the response. Evaluate any tool on runtime visibility rather than configuration snapshots, on effective access mapping, on agent-to-agent chain visibility, and on whether it can see without you having to be the app admin first.

Keeping Production Live During Containment

The fastest way to fail a containment exercise is to break the business. If your answer to one compromised Copilot agent is disabling Copilot for 40,000 employees, the CEO calls the CISO before the attacker is caught. Holding production up means scoping enforcement to four narrow targets:

  • Specific identity: the compromised user or agent, not the tenant.
  • Specific action: the exfiltration path, not every operation the agent performs.
  • Specific data class: the sensitive dataset being targeted, not the whole knowledge base.
  • Specific session: the active malicious session, not future legitimate ones.

The test is simple. If your plan cannot answer "what still works for the other 39,999 users during containment," you are running incident response, not containment. Mature IR programs treat the scoped cut as the move that buys time for the investigation, never as the investigation itself.

Notification Clocks Start at Discovery

Containment speed feeds directly into regulatory exposure, because notification clocks start at discovery, not at resolution. GDPR requires notifying the supervisory authority within 72 hours of discovery. The HIPAA breach notification rule requires notifying affected individuals within 60 days, with tighter handling for larger breaches. Check the exact obligation against your current regulatory text and any contractual terms, since customer contracts often demand notice inside 24 to 48 hours. Fast containment shrinks the "when access ended" side of that disclosure, and a documented 30-minute action demonstrates the appropriate technical measures these frameworks expect. Runtime evidence reads better in a regulatory review than a configuration screenshot ever will.

Autonomous vs Human-in-the-Loop Remediation

Choose autonomous containment when the action is reversible, the blast radius is scoped to a single identity, and the confidence signal is high. Choose human-in-the-loop when the action would touch org-wide agents, org-wide data, or executive accounts. Remember the labeling constraint: autonomous cutting is live only for Claude and Copilot today, so on every other platform "human-in-the-loop" is not a preference, it is the current capability.

Scenario Recommended path
Single OAuth token replay from an unusual IP Autonomous revoke
Orphaned agent with sensitive access Autonomous disable
Maker-mode agent used by an unauthorized runner Autonomous session kill plus alert
Org-wide accessible Copilot agent flagged Human approval, prepared playbook
Confused-deputy attack on an executive account Human approval, compressed SLA

The trap runs both ways. Automate everything and you eventually break production; automate nothing and you lose to the attacker. The workable model is confidence-weighted autonomy with clear escalation gates.

Small Teams vs Enterprises

Small teams get the most from autonomous containment because they have no 24/7 SOC. A stolen token at 2 AM on a Saturday needs to be revoked automatically, not when the Monday shift logs in. Enterprises carry a larger blast radius and therefore more approval gates, but the trade is not automation versus manual. The decision engine still runs the analysis; the enforcement action may just route through a compressed human approval, 60 seconds rather than 60 minutes.

What Getting This Right Is Worth

The cost case does not rest on a platform price tag. IBM's annual Cost of a Data Breach research has for years found that extensive use of security automation is the single largest factor lowering the cost of a breach, and containment speed is the mechanism behind that. The number to watch internally is not the license line; it is the hours between discovery and a clean, scoped cut.

Frequently Asked Questions

Can you really contain a SaaS breach in 30 minutes?

Yes, for scoped incidents involving single-identity token abuse or agent misuse. Complex multi-platform breaches take longer to fully resolve, but the initial containment of revoke, isolate, and block should land inside 30 minutes regardless.

Is Obsidian an inline gateway or proxy?

No. Obsidian is the decision engine and identity graph. Enforcement runs at the edge through Cloudflare for supported platforms, or through native app APIs, never through a network hop that Obsidian owns and sits in.

Which platforms support autonomous runtime enforcement today?

Claude and Microsoft Copilot only, through the Cloudflare "Intel Inside" model. Other platforms such as Bedrock, Vertex, Agentforce, Snowflake Cortex, ServiceNow, Moveworks, and n8n get discovery, governance, and human-in-the-loop containment today, with autonomous enforcement on the roadmap.

How do you revoke an OAuth token during a breach?

Through the identity provider's admin API or the app's OAuth grant management endpoint. A good autonomous action chains the grant revocation with refresh-token revocation and active-session termination so the credential cannot quietly renew.

What is the difference between containment and eradication?

Containment stops the attacker's current access. Eradication removes the underlying weakness, such as a misconfigured agent, a hardcoded credential, or an orphaned account, so the same path cannot be re-exploited.

Do I need to shut down my SaaS app to contain a breach?

Almost never. Scoped containment cuts the compromised identity or session while everyone else keeps working. Full-app shutdown is a last resort for incidents you could not scope.