Skip to content

Add version-aware MCP & A2A security checks (OAuth 2.1, MCP Apps, A2A UI, signatures) - #1

Merged
arananet merged 1 commit into
mainfrom
claude/mcp-a2a-security-audit-hdj46o
Jun 11, 2026
Merged

Add version-aware MCP & A2A security checks (OAuth 2.1, MCP Apps, A2A UI, signatures)#1
arananet merged 1 commit into
mainfrom
claude/mcp-a2a-security-audit-hdj46o

Conversation

@arananet

Copy link
Copy Markdown
Owner

MCP:

  • Negotiate latest spec revision (2025-06-18) instead of pinned 2024-11-05;
    flag deprecated revisions that predate the OAuth Resource Server model and
    Resource Indicators (RFC 8707); echo MCP-Protocol-Version header
  • Probe OAuth 2.1 Protected Resource Metadata (RFC 9728) and inspect the
    WWW-Authenticate challenge; flag openly-accessible servers
  • Tool annotations (readOnly/destructive hints) checks for state-changing tools
  • Scan resources/list and prompts/list for file:// exposure, sensitive
    locations, and prompt-injection / intent-subversion poisoning
  • Detect the MCP Apps interactive-UI extension (ui:// resources, _meta UI
    templates) and flag sandbox/CSP/consent obligations and external-origin UI
  • Lethal-trifecta detection (untrusted input + private data + exfiltration)

A2A:

  • Resolve canonical /.well-known/agent-card.json with legacy fallback
  • Modern securitySchemes/security (apiKey-in-query, HTTP Basic, unreferenced
    schemes) with legacy authentication fallback
  • JWS AgentCardSignature checks (presence, alg:none, missing kid)
  • Transport binding validation (JSONRPC/GRPC/HTTP+JSON, plaintext endpoints)
  • Declared extensions incl. A2A UI / A2UI untrusted-render warning
  • protocolVersion and auxiliary-URL (iconUrl/documentationUrl) checks

SDK packages and compliance test routes updated for parity.

… UI, signatures)

MCP:
- Negotiate latest spec revision (2025-06-18) instead of pinned 2024-11-05;
  flag deprecated revisions that predate the OAuth Resource Server model and
  Resource Indicators (RFC 8707); echo MCP-Protocol-Version header
- Probe OAuth 2.1 Protected Resource Metadata (RFC 9728) and inspect the
  WWW-Authenticate challenge; flag openly-accessible servers
- Tool annotations (readOnly/destructive hints) checks for state-changing tools
- Scan resources/list and prompts/list for file:// exposure, sensitive
  locations, and prompt-injection / intent-subversion poisoning
- Detect the MCP Apps interactive-UI extension (ui:// resources, _meta UI
  templates) and flag sandbox/CSP/consent obligations and external-origin UI
- Lethal-trifecta detection (untrusted input + private data + exfiltration)

A2A:
- Resolve canonical /.well-known/agent-card.json with legacy fallback
- Modern securitySchemes/security (apiKey-in-query, HTTP Basic, unreferenced
  schemes) with legacy authentication fallback
- JWS AgentCardSignature checks (presence, alg:none, missing kid)
- Transport binding validation (JSONRPC/GRPC/HTTP+JSON, plaintext endpoints)
- Declared extensions incl. A2A UI / A2UI untrusted-render warning
- protocolVersion and auxiliary-URL (iconUrl/documentationUrl) checks

SDK packages and compliance test routes updated for parity.
Comment on lines +1072 to +1076
const prmRes = await fetch(`${origin}/.well-known/oauth-protected-resource`, {
method: 'GET',
headers: { Accept: 'application/json' },
signal: AbortSignal.timeout(5000),
});
Comment on lines +1502 to +1506
const resResponse = await fetch(serverUrl, {
method: 'POST',
headers: reqHeaders,
body: JSON.stringify({ jsonrpc: '2.0', id: 3, method: 'resources/list', params: {} }),
});
Comment on lines +1515 to +1519
const promptResponse = await fetch(serverUrl, {
method: 'POST',
headers: reqHeaders,
body: JSON.stringify({ jsonrpc: '2.0', id: 4, method: 'prompts/list', params: {} }),
});
@arananet
arananet merged commit 93c44f6 into main Jun 11, 2026
6 of 9 checks passed
@arananet
arananet deleted the claude/mcp-a2a-security-audit-hdj46o branch June 11, 2026 01:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants