Skip to content

verify_brand_claim response verifier has no key→brand binding (brand-spoofing) #5826

Description

@bokelley

From the 2026-07 protocol security audit (registry NS-SIG-002; refs #3925).

Defect. The verify_brand_claim / verify_brand_claims response-signing verifier (docs/building/by-layer/L1/security.mdx:895-903) resolves kid→JWK at the agent's jwks_uri and checks adcp_use/alg/freshness/request_hash, but no step confirms the signing key is authorized for the claimed brand_domain. brand_domain and agent_url are attacker-chosen fields inside the payload the same key signs. Compare the governance JWS profile in the same file (:634), which explicitly warns that deriving identity from an unauthenticated in-token field is a circular trust chain.

Impact. An attacker running a conformant brand-agent for a domain it controls can emit a cryptographically valid owned response for brand_domain: "nike.com". The mutual-assertion floor (verify_brand_claim.mdx:23) bounds this — the attacker must control/forge both sides — but the signature the spec calls "load-bearing" attests authorship, not brand authority.

Decision to make. Add a normative verifier step mirroring governance step 13: fetch https://{brand_domain}/.well-known/brand.json (one redirect, SSRF-safe), confirm an agents[] entry with url == agent_url authorized for brand-protocol responses, and resolve kid only within that entry's jwks_uri. Treat brand_domain/agent_url as untrusted until this passes.

Enforcement to attach. A negative test vector: forged owned response for an unowned brand → expected: reject. Flip NS-SIG-002 to enforced on merge.

Part of the anti-drift lockdown (specs/spec-anti-drift.md). Rolls up to #3925.

Metadata

Metadata

Assignees

No one assigned

    Labels

    brandIssue concerns the brand protocol domainclaude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.priority:P0Immediate priority: user/revenue/security/reliability bug to work nowschemaJSON Schema source-of-truth: definitions, codegen artifacts, validation, hygienespec / protocol

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions