EchoLeak
CVE-2025-32711Microsoft 365 CopilotOne crafted email made Copilot send sensitive context to an attacker’s server — with zero clicks.
ExfilPath reads your agent's code and finds every path where attacker-controlled input can reach an action that leaks data — then shows the change that closes it.
Overview
7ms · static analysis, nothing executed
Open paths
22 critical
Exposure
96/100 · grade F
Closed by controls
00 controls found
Files analyzed
473 lines
Inbound email reaches network egress
82% confidenceSource
Inbound email
Model
OpenAI call
Action
HTTP request
Inbound email reaches auto-fetched render
72%Pin the destination to an allowlist
Closes this path on re-scan
Integrations
How it works
Drop in a file, a folder or a whole repository. It is read in your browser — never uploaded, never executed.
ExfilPath traces untrusted input through your code and the model to any action that can leak data.
Each open path comes with the smallest change that closes it, written in the language of the file.
Platform
Values are traced through assignments, helpers and files. The model call is treated as a trust boundary, not a filter.
Routes with an allowlist, schema or approval gate are reported as closed, not as noise.
Every open path comes with the smallest change that closes it — usually a few lines.
Fully static. No sandbox, no credentials, no prompts sent to a model provider.
Every finding carries an OWASP LLM Top 10 category and a CWE identifier.
TypeScript, JavaScript and Python, across the frameworks agents are built on.
Research
One crafted email made Copilot send sensitive context to an attacker’s server — with zero clicks.
Text in a public web form made Agentforce leak CRM records through an image request.
Testimonials

“Our scanners were green while an email could still walk a summary straight out to an external host. ExfilPath was the first tool that drew that route instead of handing us another list.”

“The part that changed my mind was the trace through the model call. Everyone talks about prompt injection in the abstract; this showed the exact three lines that made it exploitable.”

“It reads the repository, finds where untrusted text enters, and tells you which action it can reach. We closed two paths with one-line changes the same afternoon.”

“What I want from a security tool is a decision, not a dashboard. Open path or no open path is a decision my team can act on in a release meeting.”
Pricing
The full analyzer for individual engineers. Free forever.
For an individual engineer or a single agent in production.
For a team shipping agents on a shared codebase.
For organizations running many agents across many teams.
For regulated environments and code that cannot leave the network.
Prices are in USD and exclude local taxes. Annual billing is charged yearly and saves roughly 20%.
FAQ
Can't find what you need? Write to hello@exfilpath.tech and an engineer will answer.
One question, thoroughly: whether attacker-controlled input can reach an action that causes damage. It maps the input surfaces, maps the sensitive actions, looks for controls on the value in between, and reports every route where nothing stands in the way.
A scanner grades components and returns a list. ExfilPath composes components into routes. A repository can have zero scanner findings and still contain a route from an email body to an outbound request, which is exactly how EchoLeak and ForcedLeak worked.
No. Analysis is static: your code is read in your browser, never executed, and no model provider is called at any point.
TypeScript, JavaScript and Python today, with detectors for LangChain, LangGraph, LlamaIndex, the Vercel AI SDK, MCP servers, OpenAI, Anthropic, Gemini, Bedrock, Microsoft Graph, Gmail, Salesforce, Playwright, vector stores and common web frameworks. Java and Go are on the roadmap.
The Free plan is free forever and includes the full browser analyzer with unlimited analyses. Developer, Team and Business plans for teams are coming soon, and Enterprise is available on request.
Every path carries its full trace and a confidence score, so a finding can be confirmed or dismissed in seconds. Existing controls are detected too, so a route you have already closed is reported as closed rather than repeated as a warning.