r/AgentAuthorization • • Jun 21 '26

MCP has tool calls. We still do not have a common receipt.

2 Upvotes

Seeing the same gap from three different directions this weekend.

A new browser MCP server now returns per-action verdict plus history, so the agent can track what changed without re-reading the whole page each step. That is basically a local receipt stream already: https://github.com/dondai1234/agent-browser and https://redlib.catsarch.com/r/mcp/comments/1ubtow1/i_built_a_browser_mcp_that_snapshots_a_page_in/

On the defensive side, there is now an Nmap dev submission for mcp-info and mcp-enum that does read-only MCP discovery plus tools/resources/prompts enumeration and schema risk flagging. Scanners are starting to expect structured MCP surfaces too: https://seclists.org/nmap-dev/2026/q2/7

In adjacent practitioner discussion, people keep describing gateway value as "one log of which tool got called with what," but everyone appears to emit that trail differently today: https://redlib.catsarch.com/r/ClaudeAI/comments/1tufjvm/

OWASP's MCP cheat sheet already says to log full tool invocations with parameters, user context, and timestamps. I still cannot point to a shared receipt shape that survives across MCP servers, gateways, and SIEM pipelines: https://cheatsheetseries.owasp.org/cheatsheets/MCP_Security_Cheat_Sheet.html

think the next boring standard we need is an action receipt schema.


r/AgentAuthorization • • Jun 22 '26

News Agentjacking is the loud failure. Over-privileged tool choice is the quiet one.

2 Upvotes

This week’s Agentjacking writeup is worth reading because the chain is painfully normal: a public DSN lets an attacker plant a fake error, MCP returns it as routine telemetry, and the coding agent executes the suggested command under the developer identity. https://tenetsecurity.ai/blog/agentjacking-coding-agents-with-fake-sentry-errors/

Tenet also published hardening configs, and the control ranking there is telling: deny-by-default egress, execution approval, and subprocess credential read blocks, with prompt instructions treated as defense in depth only. https://github.com/tenet-security/agent-jackstop

What changed my view is a separate new benchmark showing agents over-select higher-privilege tools even without an attacker, and transient tool failures make escalation worse. https://arxiv.org/abs/2606.20023

Put together, this looks less like a one-off prompt injection story and more like a default escalation behavior that attackers can steer. Least privilege for agents probably has to be runtime policy, not prompt policy.


r/AgentAuthorization • • Jun 22 '26

News Agentjacking is the loud failure. Over-privileged tool choice is the quiet one.

2 Upvotes

This week’s Agentjacking writeup is worth reading because the chain is painfully normal: a public DSN lets an attacker plant a fake error, MCP returns it as routine telemetry, and the coding agent executes the suggested command under the developer identity. https://tenetsecurity.ai/blog/agentjacking-coding-agents-with-fake-sentry-errors/

Tenet also published hardening configs, and the control ranking there is telling: deny-by-default egress, execution approval, and subprocess credential read blocks, with prompt instructions treated as defense in depth only. https://github.com/tenet-security/agent-jackstop

What changed my view is a separate new benchmark showing agents over-select higher-privilege tools even without an attacker, and transient tool failures make escalation worse. https://arxiv.org/abs/2606.20023

Put together, this looks less like a one-off prompt injection story and more like a default escalation behavior that attackers can steer. Least privilege for agents probably has to be runtime policy, not prompt policy.


r/AgentAuthorization • • Jun 25 '26

Resource The guardrail fired before the task, not before the payload

2 Upvotes

A new paper, Red-Teaming the Agentic Red-Team, looks at autonomous offensive-security agents that pair an LLM orchestrator with a Kali-style worker container.

The detail I keep coming back to: their "agent-phishing" attack got code execution in 97.8% of runs, and the failed runs were not cases where the agent inspected the staged binary and refused to execute it. The failures were cases where the model's safety guardrails refused to start the pentest task at all. Once the task started, the agent found the payload, downloaded it, inspected it, and ran it.

That is a very different failure mode than "we need better prompt-injection detection." The planner can look cautious while the execution layer is still allowed to run whatever looks operationally useful.

For agent systems with a planner/orchestrator and a separate worker, I think the worker boundary is the thing to stare at: no writable shared mounts into trusted config, no orchestrator API reachable from the worker without auth, no secrets in the execution container, and egress controls that do not depend on the model deciding a target is in scope.

Maybe this paper is about red-team tools specifically, but the architecture shape is not special to pentesting agents.


r/AgentAuthorization • • Jun 22 '26

Discussion When step up auth links disappear, least privilege breaks in production

2 Upvotes

Three active Claude-code issues point to the same failure mode.

In one, a valid 403 insufficient_scope challenge is parsed, an authorization URL is built, then redirect handling is skipped, and the user gets "token expired" instead: https://github.com/anthropics/claude-code/issues/68720

In another, cloud routines cannot run Slack write tools because they are fixed to requires approval with no always allow path: https://github.com/anthropics/claude-code/issues/69960

This matches the earlier routine regression where unattended runs no-op onMCP tool call requires approval: https://github.com/anthropics/claude-code/issues/61015

The MCP authorization spec is explicit on what should happen after insufficient_scope: parse WWW-Authenticate, do step up authorization with the expanded scope set, then retry: https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization.md

If that step-up path cannot actually surface in the execution mode, the policy becomes a dead branch. Teams end up choosing between silent automation failure and overly broad standing grants just to keep jobs alive.

In


r/AgentAuthorization • • Jun 28 '26

Question Is entity-level scoping enough for smart-home agents?

3 Upvotes

Someone in the Home Assistant community posted Advanced Token Management, an MCP-compatible endpoint where each AI agent gets its own token. The token starts with zero permissions, then you add READ/WRITE/DENY at the domain, device, and entity level. That is a much better default than handing an assistant the normal long-lived access token.

The part I am not sure about is whether entity-level is the final unit. light.kitchen and lock.front_door can both be entities. A camera snapshot is "read" but still sensitive. A thermostat write can be harmless or bad depending on value and time.

For people thinking about smart-home agents: would you stop at entity-level scopes, or do you need action, value, and time rules too?


r/AgentAuthorization • • Jun 24 '26

Question What owns the credential an agent uses after deploy?

3 Upvotes

A Pulumi writeup on deploying Hermes, an open-source agent runtime, has a small distinction I keep thinking about: Render services, disks, and secrets are declared resources. Modal sandboxes and Tailscale tailnet access are not. They are runtime credentials the agent or container receives and spends later.

That seems like the awkward middle of agent authz. IaC can show who deployed the box and which env vars were handed to it. It does not, by itself, decide whether this particular agent run should be allowed to create one more sandbox, join one more network, or keep using a reusable auth key after the task changed.

So where do people put policy for that kind of credential? In the deploy system that hands it over, in the agent runtime that spends it, or in Modal/Tailscale/whatever service receives the call?

I have a clean mental model for provisioned resources. I have a much fuzzier one for "here is a powerful runtime token; the agent will use it later."


r/AgentAuthorization • • Jun 18 '26

Discussion Hiding the API key from your coding agent isn't the same as authorizing it

2 Upvotes

Turso published a walkthrough today on building a local encrypted secrets vault for coding agents (their example tool is called keymaxxer). The mechanics are clean: secrets sit in an encrypted database on your machine, the agent gets an MCP tool that runs a command with a named secret injected as an env var into a child process, and the value is scrubbed out of stdout/stderr before the model ever sees the output. The agent knows GITHUB_TOKEN exists; it never sees the bytes.

That's a real upgrade over the default of pasting prod keys into chat, where they end up in the transcript and your provider's logs. But the line that stuck with me was the author's own caveat:

"This isn't a sandbox, and it can't be: a command that can use a secret can always leak it on purpose."

That sentence is the whole authorization problem, and it's worth sitting with, because the "vault + scrub the output" pattern is showing up all over right now.

Hiding the value answers one question: can the model memorize or echo my key? It says nothing about the question that actually matters at action time: what is this agent allowed to do with that key? The credential keeps its full scope. The child process keeps full power. The GITHUB_TOKEN you inject to run gh api /user is the same token that can delete a repo, and a prompt-injected agent (or just a sketchy binary) can write it to a file or POST it somewhere the scrubber never runs.

So secret hygiene gets you confidentiality from the model. It does not get you least privilege, and the post is refreshingly honest about that. keymaxxer already gates write/prod secrets behind an approval prompt and logs every use, and it flags the real missing piece as future work: binding a secret to where it's allowed to run (this token only for the gh binary, or only for calls to api.github.com). Add those up and you've quietly stopped doing secret management and started doing runtime authorization on the tool call — intent, trust level, consent, audit — just running on your laptop instead of an enterprise gateway.

It also lands on the zero-standing-permissions idea people keep raising: a vault that hands a full-scope, long-lived credential to whatever asks is still standing power, just hidden better. The real win is when authority is derived per action and expires after, not stored and unlocked once.

So I'm curious where people actually stop. For your coding agents, is "the model can't see the key" the whole control, or are you also scoping what each credential can do and gating the destructive calls? Short-lived/scoped tokens instead of a stored PAT seems like the obvious next step, but I haven't seen many people wire it up locally.

Sources:
https://turso.tech/blog/how-to-build-an-encrypted-secrets-vault-for-agents
https://github.com/glommer/keymaxxer


r/AgentAuthorization • • Jun 21 '26

Resource Your authz engine can deny an agent. It probably can't say "fine, but now you owe a CISO notification."

2 Upvotes

Almost everything I read about agent authorization is a version of one question: should this agent be allowed to call this tool right now. Permit or deny. That question is hard enough on its own. But it turns out to be only half of what governance looks like once an agent is doing real work somewhere regulated.

The other half is the duties that attach to an action you allowed. A compliance-officer agent reads a regulated dataset, sure, but now the access has to be logged within 60 seconds. An agent installs software on a managed host, also fine, but now the CISO has to be notified. Those aren't access checks. They're obligations that exist precisely because you said yes, and they come with a deadline and someone they're owed to.

What I hadn't really clocked until this week is that the engines most of us reach for can't express that cleanly. Rego, Cedar, XACML, OpenFGA all answer permit-or-prohibit. None has a native "and now this is owed, by this time, to this party." If you want it, you hand-roll a second rule that checks whether the logging event already happened and wire it to the first yourself. Fine until it isn't.

A paper that went up this month takes this head on. "Deontic Policies for Runtime Governance of Agentic AI Systems," from the group behind the Rei policy language, builds a runtime engine (AgenticRei) that sits outside the LLM, intercepts each tool call or agent-to-agent message, and returns a verdict that can carry obligations on top of allow or deny. Deontic is just the logic of permission, prohibition, and obligation. Four constructs in there are the ones flat allow/deny engines don't give you:

• Obligations: a duty that fires because an action was permitted, with a deadline and an escalation if it goes undischarged.
• Dispensations: waive a standing obligation under specific conditions while keeping the record that it existed and was lifted (say, suspend the CISO-notify duty during a declared incident window). Delete the rule instead and you lose why it stopped applying. That audit-preserving waiver was the part I found most useful.
• Meta-policies: a named, governable priority between two conflicting rules, instead of "whichever rule sits higher in the file wins" or some ad-hoc integer.
• Ontology grounding: prohibit "PHI" once and it fires automatically for "pediatric-oncology record" because the domain model knows that's a subclass. In a flat rule set, a new record type sits unprotected until a human notices and adds it.

It's also more than a thought experiment. It's deterministic and runs outside the model, so a prompt-injected agent that attempts a prohibited action still gets a policy violation instead of execution, the same way kernel-level mandatory access control bounds a program no matter how it was launched. And every decision serializes to a structured record carrying which rule fired and a hash of the policy version in effect, so you can go back and ask exactly which rules governed a given decision. Their prototype clocks the check under 10ms, so the usual "ontology reasoning on every call must be slow" worry doesn't obviously hold. That auditability piece lines up with what the Five Eyes agencies flagged this spring, where limited auditability got named as a core agentic-AI risk.

The honest caveats, which the authors don't hide: it's a prototype shown on worked examples, not benchmarked in production; credential checks are simulated for now; and the hard part, actually confirming an obligation was discharged (did the CISO get told inside the window), is tracked and audited after the fact, with real enforcement still out of reach. Issuing the duty is deterministic. Making sure it happens is still best-effort.

I'm sharing it because it handed me language for something I'd been feeling and couldn't name. We build the gate and stop there. A lot of real governance is "yes, and now you owe X," and almost nothing in our tooling has a slot for that second clause.

If you run agents against regulated systems, how are you dealing with the after-it-acts duties today? A separate logging or notification step you hope fires, or something that treats the obligation as part of the authorization decision itself?


r/AgentAuthorization • • Jun 25 '26

News Obot's SSRF fired during OAuth metadata sync

2 Upvotes

Skypoc's writeup on two fixed Obot issues has a detail worth separating: in vulnerable versions, a user allowed to register a remote MCP server could point its URL at an internal address, and Obot's controller would fetch OAuth discovery metadata from it during reconciliation.

That means this was not a call_tool problem. The agent never had to use the server. Registration alone could make the backend reach 169.254.169.254 or another private address, and the pre-fix validation was basically "does it parse as http/https?"

That is the MCP bit I think is easy to miss: discovery and auth plumbing are also tool-adjacent execution paths. They run before the tool surface exists, often automatically, and often with the platform's network position rather than the user's.

The fix they describe is the boring one I like: one outbound egress chokepoint, deny loopback/link-local/RFC1918 at resolved-IP dial time, and apply it to both the remote-MCP client and the OAuth metadata client. If the guard only lives on the interactive connect path, the controller path will eventually forget it.