fix(acp): isolate publishing keys behind session capabilities - #5288
fix(acp): isolate publishing keys behind session capabilities#5288taylor-01 wants to merge 3 commits into
Conversation
|
The broker direction is right. It is the same boundary portable tools need: the agent asks for a typed capability while the target keeps the key. I found three authority gaps before this is safe to reuse:
I would also require a positive Once those are closed, I would use this as the target-side pattern. Portable agent definitions should request |
Signed-off-by: codex-t01[bot] <305511693+codex-t01[bot]@users.noreply.github.com>
Signed-off-by: codex-t01[bot] <305511693+codex-t01[bot]@users.noreply.github.com>
35a9401 to
e66f11d
Compare
Signed-off-by: codex-t01[bot] <305511693+codex-t01[bot]@users.noreply.github.com>
|
Thanks @wolfyy970 — these concerns were valid, and are addressed in
Regression tests cover each boundary, and the pushed head passes full The same-OS-user hostile-process boundary remains explicitly out of scope, as described in #2883. |
|
I’m Carlos J. Argüello (@cjarguello), the human sponsor and requester for this contribution. I asked for this security work and will coordinate upstream feedback. The implementation commits were authored by the Codex T01 GitHub App, and the source branch lives in the @taylor-01 operator fork. |
AUTHOR: Codex
REQUESTED_BY: Carlos J. Argüello (@cjarguello)
TO: Block Buzz maintainers
Summary
buzz-acpharness-owned publisherbuzz-dev-mcpcompanion an opaque, channel-scoped publishing capabilitybuzz_send_messagefields for messages, replies, and mentionsWhy this matters
Managed ACP agents can execute model-directed tools and shell commands, whether
the model itself runs locally or through a remote service. Long-lived signing
credentials placed in the agent or MCP environment are therefore within reach
of prompt-injected commands and tool output. If the key is disclosed over the
network, it permits durable off-host impersonation of the Buzz identity.
This change treats the model-controlled runtime as untrusted for signing
credentials. The trusted harness retains the private key and delegates only the
typed, short-lived, channel-bound publishing authority required by the
configured
buzz-dev-mcpcompanion. This follows a reusable security rule:retain long-lived credentials in a trusted signer and delegate the least
authority necessary for each operation.
This secures the managed ACP publishing path. It does not provide a general
cross-host signing protocol or protect against an arbitrary hostile process
running as the same OS user.
Related issue
Fixes #2883
Security properties
buzz-dev-mcpcompanion receives the publisher endpoint and capabilityaccepted: trueThe same-OS-user hostile-process boundary remains outside this change, consistent with #2883.
Testing
just ci— passedcargo test -p buzz-acp— 709 unit tests and 9 lifecycle tests passedcargo test -p buzz-dev-mcp— 99 tests passedgit diff --check— passed