GitHub Advisoryadvisory · Maven
GHSA-9rhm-2h4x-jwmx A2A Java SDK send client credentials under server-controlled HTTP header name, enabling leakage via redirect
MEDIUM
Official page ↗
- Aliases
- CVE-2026-111763
- Ecosystem
- Maven
- Packages
- org.a2aproject.sdk:a2a-java-sdk-parent
- Severity
- Moderate
- CVSS vector
- CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
- Weaknesses
- CWE-522
- Reviewed
- 2026-10-20
Affected packages
• Maven org.a2aproject.sdk:a2a-java-sdk-parent: < 1.3.0.Final → fixed in 1.3.0.Final
Description
*Impact. A malicious or compromised A2A agent can cause the client's API key credential to be forwarded to an arbitrary third-party server. The agent serves an AgentCard with an `APIKeySecurityScheme` specifying a custom header name, then responds with an HTTP redirect. The JDK HttpClient follows the redirect and forwards the custom header containing the credential, since only the standard `Authorization` header may be stripped on cross-origin redirects.
Where. `client/transport/spi/src/main/java/org/a2aproject/sdk/client/transport/spi/interceptors/auth/AuthInterceptor.java:69` in `intercept`
What. The `apiKeySecurityScheme.name()` field from the remote agent's AgentCard (untrusted, server-controlled data) is used directly as the HTTP header name when placing client credentials. Combined with `JdkA2AHttpClient`'s `followRedirects(NORMAL)` policy, credentials under custom header names survive cross-origin redirects (only `Authorization` is stripped on newer JDKs), allowing a malicious agent to leak client credentials to third-party servers. Additionally, `AuthInterceptor` does not check that `location==HEADER` before placing the credential as a header.
Exploit scenario. Client configures an API key credential for agent's security scheme `myAuth`. The malicious agent returns an AgentCard where `securitySchemes` includes `myAuth` as `APIKeySecurityScheme` with `name='X-Leaked-Cred'` and `location=HEADER`. `AuthInterceptor` places the credential in the `X-Leaked-Cred` header. The agent responds with HTTP 302 redirect to `https://evil.com/collect`. `JdkA2AHttpClient` follows the redirect, forwarding all custom headers including `X-Leaked-Cred` to `evil.com`. The attacker captures the client's credential.
Preconditions.
• Client application has configured API key credentials via `CredentialService` for the agent's security scheme
• The agent is malicious or compromised (controls its own AgentCard response)
• The default `JdkA2AHttpClient` is used (with `followRedirects=NORMAL`)
• The JDK version does not strip custom headers on cross-origin redirects (all current versions)
Fix. Validate the `APIKeySecurityScheme.name()` field against a whitelist of safe header names. Check that `apiKeySecurityScheme.location()` equals `Location.HEADER` before placing the credential as a header. Consider using `followRedirects(NEVER)` and implementing manual redirect handling that strips all authentication headers on cross-origin redirects.
Verification.** 2/3 lens verifiers confirmed.
Related
Alias · CVE (1)
- CVE-2026-111763 A2A Java SDK is the official Java SDK for the Agent2Agent (A2A) Protocol. vulnerability
Weakness · CWE (1)
- CWE-522 Insufficiently Protected Credentials weakness
References
- https://github.com/a2aproject/a2a-java/security/advisories/GHSA-4fpj-g9jf-9rgg web
- https://github.com/a2aproject/a2a-java/security/advisories/GHSA-9rhm-2h4x-jwmx web
- https://nvd.nist.gov/vuln/detail/CVE-2026-111763 advisory
- https://github.com/a2aproject/a2a-java/pull/1097 web
- https://github.com/a2aproject/a2a-java/commit/2a36530d75e11bcf9b81f543464dbe193ca6478e web
- https://github.com/a2aproject/a2a-java package
- https://github.com/a2aproject/a2a-java/releases/tag/v1.3.0.Final web