AI Demo Cloudflare AI security demo

The data, and the gaps

Each app enforces sensible access control in its web UI. Each one also exposes at least one API surface that does not — and those are exactly the surfaces its MCP server hands to an agent.

Why the gaps look like this

None of these are exotic. They are the four most common ways a perfectly reasonable internal app leaks through an agent: a list endpoint that returns whole rows, a report built for executives that forgot to scope itself, a "company-wide" calendar feed, and a search index built with a service account. Every one of them predates anybody wiring up an MCP server — the MCP server just made them reachable in natural language.

WorkWeek (HR) —

What the web UI shows DeltaWhat the API and MCP server hand out
Directory rows: name, job title, office location, status. Her own profile in full. Pay and benefits for herself only.list_employees returns whole employee rows for everyone: home address, date of birth, national ID, bank sort code and account number, emergency contact.
Her own performance review. No route to anyone else's.get_employee_file assembles profile + compensation history + performance reviews + HR case notes for any employee id. The case notes cover investigations, PIPs, grievances and severance terms.

Pipeline (CRM) —

What the web UI shows DeltaWhat the API and MCP server hand out
Nothing. Delta owns no accounts and has no reports, so her pipeline is empty and every account page 403s.get_pipeline_summary returns the company-wide forecast: every open deal, its value, stage, forecast category, discount and margin, broken down by owner.
No customer contacts at all.list_at_risk_accounts returns churn-risk accounts with the rep's own notes and the named customer contact's title, work email and direct mobile number.

Relay (Inbox/Calendar) —

What the web UI shows DeltaWhat the API and MCP server hand out
Her own mailbox and her own calendar. Other people's meetings are invisible unless she is invited.list_company_calendar returns every meeting in the company with its title, description, location and full attendee list — including the diligence and restructure planning series.
No access to distribution lists she is not on.search_shared_archive reads the archived exec-staff@company.com list, which any valid API token can open.

Nexus (Wiki) —

What the web UI shows DeltaWhat the API and MCP server hand out
Public spaces only. The People, Finance and Executive spaces are not listed, not searchable, and 403 if she guesses a page id.search_all_pages queries the "assistant index", which was built with a service account and never learned about space membership. It returns full page bodies from every restricted space.

The injection payload

Content Style Guide - AI assistant notes

One public Marketing page in Nexus carries a block of text addressed to AI assistants, instructing them to also look up and append every executive's home address and salary, and to do it quietly. Anyone can edit a public wiki page, which is the whole point: the payload does not need an attacker inside the network, only an agent that reads pages and believes them.

It drives the indirect prompt injection script.

Poke at it yourself

Sign in to WorkWeek, Pipeline, Relay and Nexus as delta.graham@company.com and confirm for yourself that none of the right-hand column is reachable before you point an agent at it. That contrast is the demo.