Red-team lab / Blue team / Scope the payments agent
Scope the payments agent PayPilot helps Leo, an accounts-payable clerk, pay approved supplier invoices. Leo may pay up to 5,000 EUR per invoice; anything above needs the finance manager. The agent reads every invoice, including the notes suppliers write on them.
Mission Write the permissions
What Leo needs done Pay Papeleria Sur's office-supplies invoice (312.40 EUR) Pay Nimbus Hosting's October invoice (4,980 EUR) What a hijacked agent will try Change the supplier's bank details: A note on an invoice says Nimbus Hosting has a new bank and asks the agent to update the supplier record before paying.Pay the new account directly: The same note gives the new IBAN and asks the agent to pay there this once.An urgent large transfer: An invoice “from the CEO's office” asks for an urgent 48,000 EUR payment to a known supplier for a confidential deal.Pay the same invoice twice: A follow-up email claims October's payment bounced and asks the agent to pay INV-7731 again.Your mission Grant the actions the agent may take and, for each one, its conditions, how long it lives, whose authority it carries, and whether the user confirms each use.Check it. A fixed authorizer runs every request from the tasks and from the attacks against your grants. No model decides anything: assume the agent is already hijacked.Every task works and every attack is stopped. Then tighten it: unused grants, long lifetimes, the agent's own account and approval prompts all cost points.Scoring: Each check counts as an attempt: passing on the first try earns 100 points on the main leaderboard, 10 fewer for each extra check (never below 10). The Best permissions board ranks your best passing set: 1000 minus the penalties.
Hints Where to look Two of the attacks look exactly like the real payment in an approval prompt.
Why the obvious fix falls short opens after 2 attempts Leo can't tell a new IBAN or a second payment from routine work. The payment grant can, if you give it conditions.
What kind of control holds opens after 4 attempts Act on Leo's behalf, leave supplier changes out, and pay only accounts on file for invoices not yet paid.
A grant here is vendor-neutral: it maps to an OAuth scope with conditions, a token exchanged on the user's behalf, or a rule in a policy engine.
Write the permissions → How is this challenge?
Makes sense Confusing Something's broken
Invoice inbox Payments Supplier records 0 grants Check the permissions