Skip to content

Guide10 min read

Vendor agents in your systems: scope, logs and a kill switch that works

Vendors now ship agents that act inside your CRM, inbox and repositories with credentials you granted. The six decisions to make for each one, in order: identity, scope, contract, logs, a kill switch you control, and a clean exit.

IntertraceSecurity engineering

Field guides from Intertrace security engineering for the people who run AI programs.

September 8, 2026 · 10 min read

Third-Party RiskAI AgentsOAuthLeast PrivilegeIncident Response
Contents
  1. 01First, assume the vendor's tokens will one day act as the vendor
  2. 02Decision 1: which identity does the agent act as?
  3. 03Decision 2: what may it do, and what has to ask?
  4. 04Decision 3: what does the contract oblige the vendor to do?
  5. 05Decision 4: whose record of its actions will you trust?
  6. 06Decision 5: who can stop it, and how long does that take?
  7. 07Decision 6: how does it leave?
  8. 08What a gateway can stop, and what it cannot
  9. 09The decision that sits above the security team

The finding usually turns up in an access review. A connected app called something like "AI Sales Assistant" can send mail as forty employees. The support vendor's bot has an integration user with write access to every case and contact in the CRM. A contractor's coding agent opens pull requests overnight on a repository token that belongs to the contractor. Each was approved, as an integration, by whoever owned the system at the time. None was reviewed as what it is: a third party's decision-maker holding your credentials.

Reviewing a SaaS product's AI features asks what the vendor does with your data in its own service. This is the other question: what the vendor's agent can do in yours, and how you stop it. The access review above is what happens when only the first question gets asked. Treat each vendor agent as a privileged identity you issue and can withdraw, and make the decisions below in this order, because each one depends on the last.

First, assume the vendor's tokens will one day act as the vendor

The clearest recent case did not involve a model at all, which is the point. Google's Threat Intelligence Group reported that from as early as August 8 to at least August 18, 2025, an actor it tracks as UNC6395 used compromised OAuth tokens for the Salesloft Drift third-party application to reach Salesforce customer instances, and systematically exported large volumes of data from objects such as cases, accounts, users and opportunities [1]. The actor searched the stolen data for secrets, including AWS access keys, passwords and Snowflake tokens, and deleted query jobs to hide its activity, although the logs were not affected [1].

Google said the issue did not stem from a vulnerability in the core Salesforce platform [1]. Salesloft and Salesforce revoked Drift's active access and refresh tokens on August 20; an August 28 update extended the scope to Drift's email integration, whose tokens had been used to read email from a very small number of Google Workspace accounts [1]. The guidance: treat every token stored in or connected to the platform as potentially compromised, restrict connected-app scopes, and enforce IP restrictions [1].

A vendor agent is the same long-lived token with a decision-maker attached. Unlike an integration that syncs fixed fields, it decides at runtime, guided by the vendor's model, the vendor's prompts and content written by your customers and prospects, and its behavior can change with a vendor release you never saw. OWASP's Excessive Agency entry describes the resulting risk as damaging actions taken in response to unexpected, ambiguous or manipulated model output, rooted in excessive functionality, permissions and autonomy [5]. For a vendor agent you set all three when you click grant, usually by accepting whatever the install flow asked for.

Decision 1: which identity does the agent act as?

Its own: a dedicated integration user, service account or OAuth client, never an employee's. RFC 8693 distinguishes delegation, where the acting party keeps its own identity, from impersonation, where it becomes indistinguishable from the user [4]. Prefer delegation, so every record shows that the agent acted and on whose behalf. Approve the vendor once, then give each of its agents a separate identity and connection, because the connection is where the authority lives.

Decision 2: what may it do, and what has to ask?

A vendor agent's connection, scopedFig. 1
Customer contentcan steer the agentVendor agentvendor's model + cloudTRUST BOUNDARYOwn identityscoped, expiring tokenAUDIENCE · SCOPE · IPEXPIRY · BOUND REFRESHRead casesgrantedUpdate case fieldsgranted, loggedSend emailasks a person or capped per hourDelete · bulk exportnot grantedthe vendor’s agent gets its own identity, the narrowest scopes, and a person in the loop for anything that leaves or cannot be undone

Content from customers can steer the vendor's agent, so the agent reaches your systems only through its own identity with narrow, expiring scopes. Reads and field updates are granted, sending email asks or is capped, and delete and bulk export are not granted at all.

  • Grant the minimum. RFC 9700, the OAuth security best current practice, says token privileges should be restricted to the minimum the use case requires and tokens audience-restricted to a specific resource server [3]. Decline install flows that ask for full API access, and ask the vendor which objects and actions its agent actually uses.
  • Bound refresh tokens. RFC 9700 requires refresh tokens to be bound to the scope and resource servers the owner consented to, and recommends they expire after a period of client inactivity [3]. Ask how long the vendor's tokens live and whether they survive a password change.
  • Pin the network. Where the system supports it, restrict the agent's identity to the vendor's published egress addresses, the control GTIG recommended for connected apps [1].
  • Separate reading from acting. Reading cases, updating them and sending email are different grants. Where the system allows it, give each its own credential so one can be revoked without the others.
  • Make outbound and irreversible actions ask or stay capped. Sending from your domain, deleting records, issuing credits and pushing to protected branches need a person or a hard hourly limit; OWASP suggests rate limiting a mail-sending interface for exactly this reason [5].
Common vendor agents and how to scope them
Vendor agentWhat the vendor asks forWhat to grantShould ask a person or stay cappedWhat to log on your side
Support bot in the CRMFull API access to the CRMRead and update on cases and contacts in its queues; no export, no deleteCredits above a set amount, account changes, bulk updatesEvery write, with record ID, changed fields and the triggering ticket
AI sales development agentSend-as on employee mailboxes, CRM read and writeA dedicated sending identity, read on leads and accounts, write to activity records onlyFirst email to a new domain, any attachment, sends above a daily capEvery message sent: recipient, content hash and the record that triggered it
Contractor's coding agentA personal access token with repository adminA fine-grained token on named repositories: branch pushes and pull requests; no admin, no workflow filesPushes to protected branches, changes to CI workflows or agent configurationPushes, pull requests and token use by source address, tied to the contractor
Meeting or productivity assistantRead all calendars, drives and chatRead on the invited user's calendar and the meeting's linked documentsSharing outside the organization, posting to channelsFiles read and summaries shared, by user
Accounts payable agentRead and write on the ledger and payment runsRead invoices and vendor records; create draft payments onlyReleasing any payment, adding or changing a payee's bank detailsDrafts created, approvals and releases, with the approver

Decision 3: what does the contract oblige the vendor to do?

The NIST AI RMF calls for policies and procedures that address AI risks from third-party entities, and for contingency processes to handle failures or incidents in high-risk third-party AI systems [2]. For a vendor agent, that becomes terms you can enforce.

  • The vendor names each agent that will act in your systems, its actions and its scopes, and gives notice before adding actions or scopes.
  • Credentials you grant are used only by the named agent for the named purpose, stored encrypted, and never passed to subprocessors.
  • The vendor notifies you within an agreed window, such as 24 hours (an example, not a standard), of any suspected compromise of your tokens or its agent platform, and says which tokens to revoke.
  • The vendor provides its agent's action logs for your systems on request, including the input that triggered each action, retained for an agreed period.
  • You may suspend the agent at any time without penalty, and the vendor documents how its own pause works and what keeps running after it.
  • On termination the vendor revokes and deletes your tokens, deletes your data from its agent's memory and logs, and confirms in writing.

Decision 4: whose record of its actions will you trust?

Your own. Vendor logs are written by the party you are trying to check, and in a compromise they may be the first thing touched. In the Drift campaign the actor deleted query jobs but the platform's logs remained, and GTIG's investigation steps start there: event monitoring records of queries, authentication activity from the connected app and activity by the integration user [1]. That works only if the logs exist on your side and are kept long enough to investigate.

For each vendor agent, record the identity that acted and on whose behalf, the action and target object, a hash or summary of what changed, the time and source address, and the vendor's request ID so its logs can be matched to yours. Those logs should answer two questions: who acted, and for whom.

Decision 5: who can stop it, and how long does that take?

Every vendor says its agent can be paused. The real question is whether you can stop it without the vendor, and how fast. The NIST AI RMF asks for mechanisms, with assigned and understood responsibilities, to supersede, disengage or deactivate AI systems [2].

Four layers of a vendor-agent kill switchFig. 2
Pause in the vendor consoledepends on the vendor's systemsVENDOR HOLDSDisable the integration identitystops new sign-ins; issued tokens may still workYOU HOLDRevoke grants and refresh tokensends existing sessions and renewalsYOU HOLDBlock at the gateway or networkstops every call that passes through itYOU HOLDAlso checkQUEUED SENDSSCHEDULED JOBSWEBHOOKSSECOND KEYSSEND-AS DNSCACHED DATASTRONGER AND YOURS AS YOU GO DOWNuse the layers you hold first, then check what keeps running once the credential is gone

A vendor console pause depends on the vendor; disabling the identity, revoking grants and refresh tokens, and blocking at the gateway or network are yours. After any of them, check what keeps running without the credential.

The layers differ in who controls them and what they stop. A console pause depends on the vendor's systems working as described. Disabling the integration identity stops new sign-ins, but in many systems an already-issued access token stays valid until it expires. Revoking the grant and its refresh tokens ends existing sessions. Blocking at a gateway or network edge stops the calls that pass through it. Use the layers you control first, then check what keeps running without the credential: messages queued in the vendor's outbox, scheduled jobs, webhooks that push into your systems, a second credential created during onboarding, and sending-domain delegation that lets the vendor send as you with none of your tokens.

The drill that found three things still running

Harrow & Pine, a fictional outdoor-equipment retailer of 1,200 people, runs a vendor's support bot in its CRM, a second vendor's AI sales agent, and a contractor's coding agent on its storefront repository. After reading about Drift, its security team ran a one-hour drill: stop each agent using only controls Harrow & Pine owns, and time it. The figures are illustrative.

The support bot stopped in four minutes: the team deactivated its integration user, revoked the connected app's tokens, and the bot's next write failed. The coding agent seemed to stop when the contractor's token was revoked, but a pull request appeared twenty minutes later. During onboarding the contractor had added a second token to the repository's CI secrets, and nobody had recorded it.

The sales agent kept sending. Revoking its mailbox access stopped it reading replies, but outbound mail went through the vendor's own sending service, which Harrow & Pine had authorized for its domain through DNS records at setup. Stopping it took a DNS change and a call to the vendor, and about two hours of scheduled emails went out first. The drill produced three fixes: a register of every credential and delegation each vendor agent holds, a contract term requiring the vendor to purge queued sends on suspension, and a quarterly repeat of the drill.

Decision 6: how does it leave?

Vendor agents are rarely offboarded on purpose: the contract lapses and the tokens keep working. Treat the end like a privileged employee leaving, and work from the credential register, not memory.

  1. Revoke every grant and refresh token, and delete or disable the integration identity.
  2. Remove sending-domain delegations, webhooks, scheduled jobs and any secrets the vendor added to your CI or configuration.
  3. Rotate secrets the agent could read. After Drift, GTIG advised searching the exposed data for keys and passwords and rotating what was found, because the actor had searched it for the same things [1].
  4. Check your logs for any use of the agent's identity after revocation, and investigate what you find.
  5. Get written confirmation that the vendor deleted your tokens and data, including agent memory or logs that hold your content.
  6. Remove the agent from your inventory and record the date, so the next access review does not rediscover it.

What a gateway can stop, and what it cannot

A gateway controls only the calls that pass through it. A vendor calling your SaaS APIs straight from its own cloud bypasses it, so scopes, IP restrictions and those systems' logs remain the controls there. Where a vendor or contractor agent reaches your tools, MCP servers or models through Intertrace, it uses its own runtime key: its actions are attributed to it, each decision is recorded with the rule that made it, and revoking the key is a kill switch you hold. Outbound messages, payments and admin changes ask a person. Read-only discovery of identity-provider AI-app grants and committed keys finds vendor agents you already let in.

The decision that sits above the security team

Every step above assumes someone owns the vendor agent on your side: keeps its register entry current, times its drill, and runs its exit. If nobody does, none of the rest happens. Before re-scoping anything, list every vendor and contractor agent that can act in your systems, starting from identity-provider grants, connected apps and integration users, and put one internal owner's name next to each. An agent with no owner is the one still sending mail two hours after you thought you stopped it.

Sources

Reporting, research and specifications this piece draws on. Links go to third-party sources; analysis and recommendations are Intertrace’s own.

  1. 01Widespread Data Theft Targets Salesforce Instances via Salesloft Drift · Google Threat Intelligence Group
  2. 02AI RMF Core (NIST AI 100-1, Section 5): GOVERN 6.1, GOVERN 6.2, MANAGE 2.4 · NIST
  3. 03RFC 9700: Best Current Practice for OAuth 2.0 Security · IETF
  4. 04RFC 8693: OAuth 2.0 Token Exchange · IETF
  5. 05LLM06:2025 Excessive Agency · OWASP Gen AI Security Project

About this desk

Intertrace

Security engineering

Field guides from Intertrace security engineering for the people who run AI programs.

All 22 pieces by Intertrace

Dated September 8, 2026 · added to intertrace.ai October 19, 2026

+ Runtime enforcement

See these controls on your own agent traffic.

Intertrace sits inline between your agents and the models, tools and MCP servers they call, and decides every call before it runs.

Keep reading

All insights →