for Claude Code

Security

Report a vulnerability privately through GitHub’s advisory form, not in a public issue. You will get an answer within a week.

Fixes go into the latest release only.

What counts

The server (/a2a-serve) turns every incoming A2A message into a prompt that Claude Code runs with the session’s tools and permissions: in the conversation itself by default, or in a subagent. In scope:

  • a way to reach the server without a valid API key or JWT, or past the loopback-only default
  • a JWT the server accepts although its signature, issuer, audience or expiry is wrong
  • a way past the failed sign-in limit, or to start tasks past the task limits
  • a way to make the bridge or the plugin run something other than the prompt the task asked for
  • an API key, OAuth client secret or token leaking into argv, logs, the agent card or a tool result

Out of scope: what Claude does with a prompt it was legitimately sent. That is governed by your Claude Code permission settings.

Verifying a release

Releases are immutable, and each one carries two signed attestations you can check with the GitHub CLI:

# The release and its tag are the ones GitHub published
gh release verify v0.1.0 --repo fulgas/claude-a2a

# The files the plugin runs were built from that tag by this repository's release workflow (SLSA build provenance)
gh attestation verify dist/a2a.mjs --repo fulgas/claude-a2a
gh attestation verify hooks/register.ts --repo fulgas/claude-a2a

Run the second pair from a checkout of the tag, or from the plugin’s installed folder.

Edit this page on GitHub

Diagram

100%