Skip to content

stdio transport needs defined mutual authentication or an explicit trust-boundary statement #12

Description

@rocklambros

Surfaced during the v0.1.0 review (PR #2). Filing as v0.2 spec work.

specification.md §3 allows stdio as a transport with Content-Length framing, but §10 doesn't bind stdio to any process-identity check, file-descriptor inheritance discipline, or peer-credential check. The handshake establishes signature_algorithms_supported but nothing prevents stdio sessions from negotiating an empty array.

The failure mode: an IDE harness spawns the Guardian as a child over stdio with no signatures negotiated (ACS-Core permits this). A malicious tool spawned in the same process tree, a debugger attach, or a sibling process inheriting the parent's fds writes directly into the Guardian's stdin and impersonates the Observed Agent. That includes responses to ASK and forged sessionEnd. The Guardian has no spec-defined way to distinguish.

stdio is assumed to be a private channel by virtue of being stdio. On modern OSes with sandboxing failures, fd leaks, and ptrace, that assumption is unsafe and the spec never names it as a security boundary the deployer is responsible for.

Proposed direction (pick one):

  • Normative MUST that stdio sessions either require ACS-Crypto (i.e., signing on every request) or explicitly declare a single-process-trust-boundary assumption in the deployment context
  • Optional SO_PEERCRED-equivalent check at handshake time on Linux/macOS with a recommended fallback for Windows named pipes
  • A short Security Considerations subsection naming stdio's specific assumptions

Why deferred from v0.1.0: doesn't change the wire format, only the deployment guidance. v0.1.0 can ship without breaking IDE use cases. v0.2 should make the trust boundary explicit.

References: specification.md §3, §10

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions