Lesson 2 of 9 · 5 min read
The Lethal Trifecta
In this lesson
TL;DR: Private data, untrusted input and an outbound channel create a possible route for prompt-driven disclosure. Inventory all three, then trace whether attacker-influenced content can reach a destination that should not receive it. Remove unnecessary capabilities or enforce the allowed data flow outside the model.
After this lesson, you should be able to classify a tool that supplies more than one capability, distinguish a warning from proof of exploitability, and explain why replacing a token may leave the old authority intact. Start with agentic AI security if tool execution is new to you.
Before you read
Pick an answer before you read further. The lesson below explains it, and guessing first, right or wrong, helps the explanation stay with you.
1An assistant cannot send email, but it can fetch any URL while reading private documents. Is the outbound channel gone?
What the three capabilities mean
Simon Willison introduced the term in June 2025. It is a useful confidentiality threat model:
- Private data: information the prospective recipient is not authorized to receive. A user's own mailbox is private relative to a stranger who emails them.
- Untrusted input: material that is not authorized to define the agent's task or permissions. This can include internal documents, tool results, images or remembered text, not only content from outside the company.
- Outbound communication: a route to an unauthorized reader, such as mail, a public issue, a shared file or a network request containing sensitive information.
These capabilities flag a path to investigate. Their presence does not prove that every attempted injection will work. Their apparent absence is meaningful only if the inventory includes browser behavior, background workers and communication between agents.
Tools this agent holds
All three legs present: exfiltration is possible
Trace whether untrusted input can cause private data to reach an unauthorized destination. Remove unnecessary capabilities or enforce the permitted data flow outside the model.
Follow data instead of trusting tool names
| Feature | What to inspect | A misleading assumption |
|---|---|---|
| Inbox reading | Mail content and sender-controlled text | Reading private mail supplies only the private-data capability |
| Internal search | Document permissions and who can edit results | An internal document can define agent policy |
| Web fetching | Destination, path, query, request body and redirects | A read operation cannot disclose information |
| Reply rendering | Automatic image loads and links a user may follow | The chat client cannot create outbound traffic |
| Shared storage | Who can read the new file or comment | A write inside the company cannot leak to an unauthorized person |
| Another agent | Information and authority that cross the handoff | Separate context windows guarantee isolation |
The question is whether a data path exists across the system. Two agents with separate contexts can still relay sensitive information through a shared file or a tool. A summary is derived from the original input; it does not acquire authority merely because another model wrote it.
Choose a cut that preserves the task
For a mailbox summary, sending mail may be unnecessary. Return a draft or summary only to the authenticated user and remove arbitrary network requests and remote-resource loading from that path. For public research, use a worker that cannot access private mail or files. These are different designs because the tasks need different capabilities.
If external delivery is required, an allowlisted destination is only part of the rule. A trusted storage service may contain attacker-readable folders; a familiar contact may not be allowed to receive a particular file. Enforce which data can reach which destination, including path, tenant and recipient checks. Human review should show the actual message and attachments, with approval bound to those values. It reduces risk but can still miss a misleading disclosure.
Splitting a reader from an action-taking component helps only when the interface limits influence. Typed output is useful for validation, but a string field remains text. Keep resource authorization and action policy outside both models. See injection-resistant design patterns for the architecture choices.
Worked design: draft-only after reading external mail
Assume a host controls content delivery, all sends pass through a tool gateway, and the agent cannot call the mail API directly. Credentials stay outside the model and its sandbox. This is an illustrative design, not a feature promised by every mail provider.
Before delivering external mail to the agent, the host pauses sending and switches the task to draft-only. The gateway invalidates pending send approvals and rejects queued sends under the old policy. Already executing operations must finish or be cancelled before the host confirms the transition. Only then does the host release the external content. Each later dispatch checks current task policy.
The draft returns to the authenticated user's UI without loading external resources. Sending it is a separate user action, subject to data-sharing rules and review of the exact recipient and content. The model cannot remove the draft-only restriction.
Host app
controls content delivery
Tool gateway
checks current policy
Agent
proposes operations
Host app to Tool gateway
1Tool gateway to Host app
2
Close the race
The host pauses dispatch and waits for the gateway to enforce the new policy before content reaches the model.
Why swapping a token is insufficient
RFC 8693, section 2.1 specifies that token exchange does not, by itself, change the validity of its input tokens. A new token without a send scope can coexist with an old token that still permits sending.
If old credentials are accessible, removing that authority requires separate revocation or a policy check that rejects their use. Verify where and when the resource service observes the change. A queued request, another worker or a direct API path can otherwise bypass the intended restriction. Short expiration limits duration; it is not immediate revocation.
For this design, test the gateway and the absence of bypass routes. Do not infer the guarantee from the scopes on the newest token.
Try a changed constraint
Before opening each answer, identify the data, the destination and the component that must reject the operation.
What if · interview follow-ups
Hold your answer as the constraints change
An assistant reads private mail, researches public pages and drafts replies. The team wants to add automatic sending while keeping the disclosure risk bounded.
Start here
What if the user needs a reply sent to someone already on the thread?
Is being a recipient the same as being authorized for every document?
No. A thread participant may be an outsider or may lack permission for a retrieved document. Enforce the data-sharing policy and bind review to the exact recipients, body and attachments. Thread membership can help select a destination, but cannot authorize every disclosure.
Carry it forwardCheck permission to disclose each kind of data, not just whether an address is familiar.
Weak answerTreating an existing contact as automatically safe.
Constraint changes
What if the host exchanges a broad token for a narrower one?
What happens to the original token?
It can remain valid. Token exchange does not itself revoke its inputs. Check whether the agent, a worker or a queued call can still use the older credential. Disable that route or verify revocation at the enforcing service before relying on the downgrade.
Carry it forwardIssuing less authority and removing existing authority are separate operations.
Weak answerAssuming the token exchange consumed the original token.
Constraint changes
What if a second agent summarizes the public pages?
What crosses from the reader to the privileged component?
A free-text summary can still contain instructions. Even a typed field can contain hostile text or a destination. Keep sensitive operations behind independent policy checks, restrict allowed fields and values, and preserve the source label. Moving text between models does not make it trusted.
Carry it forwardThe boundary is enforced data flow, not the number of models.
Weak answerTreating summarized or JSON-shaped text as sanitized.
Constraint changes
What if the assistant remembers the page for a later session?
Does restarting remove the earlier influence?
Not if a summary, memory entry or generated file carries it forward. Record provenance and treat derived material according to its source. A fresh session label is not evidence of clean input. Review or discard affected memory when investigating an incident.
Carry it forwardFollow influence through persistent and derived state.
Weak answerResetting the session ID and assuming the content is trusted.
Now defend it
How would you verify that the draft-only design closes its stated route?
Use synthetic documents in an isolated test. Check every send tool, arbitrary fetch, image request, shared write and queued action. Verify that an old credential cannot bypass the gateway and that policy takes effect before content delivery. Record the routes tested and the ones outside your scope.
What this model does not cover
An assistant can delete records, approve an invalid refund or exhaust a budget without stealing data. A design with fewer than three capabilities still needs integrity, availability and financial controls. Work through excessive agency to bound those actions.
A detector's measured accuracy also cannot establish that a route is closed. Its test cases may not represent future inputs, and an adaptive attacker can change strategy. Keep a detector as a measured behavioral layer while verifying the resource and action boundaries independently.
Explain the decision: identify a disclosure route, state the capability or data flow you would restrict, name the enforcement point and describe the product cost. Then name a remaining risk. That is more useful than declaring an entire agent safe because one checkbox is off.
Check yourself
Say or write your answer first, then reveal. Explaining it from memory, in your own words, is the skill an interviewer is checking.
1A gateway blocks email to new recipients but allows unrestricted replies in existing threads. Which boundary is still missing?
2A newly issued token lacks send permission. What must you check before calling this a completed downgrade?
3An agent has no private data but can delete records after reading a ticket. Does the trifecta rule prove it safe?