A2A Java SDK: Android synchronous POST forwards credentials across authorities after incomplete redirect fix
The GHSA-9rhm fix added this safe setting in AndroidA2AHttpClient.createConnection(): connection.setInstanceFollowRedirects(false); The synchronous POST builder later overwrites it: private boolean followRedirects = true; public A2AHttpResponse post() throws IOException { HttpURLConnection connection = createConnection("POST", false); connection.setInstanceFollowRedirects(followRedirects); // ... } The second assignment wins. JSONRPCTransport and RestTransport both add interceptor-produced headers and call synchronous post() without setting followRedirects(false). On Android's repackaged OkHttp implementation, a cross-authority redirect strips Authorization but retains nonstandard request headers. AuthInterceptor permits four nonstandard authentication header names: X-API-Key API-Key X-Auth-Token X-Authentication I confirmed that the exact v1.3.1.Final Maven artifact forwards complete synthetic values under all four names to a second loopback authority. I also reproduced the supported AuthInterceptor to Android POST path. Explicitly calling followRedirects(false) returns the original 302 and produces no request to the collector. All test traffic stayed on two ephemeral 127.0.0.1 listeners. All credentials were synthetic FULCRUM-SYNTHETIC-* values. Reproduction I have attached AndroidA2AHttpClientRedirectTest.java. Copy it to: extras/http-client-android/src/test/java/org/a2aproject/sdk/client/http/android/ Run: mvn -pl extras/http-client-android -am \ -Dtest=AndroidA2AHttpClie
- Products
- org.a2aproject.sdk:a2a-java-sdk-http-client-android
- Affected versions
- 1.3.0.Final, 1.3.1.Final
- Fixed versions
- 1.3.2.Final
- CVEs
- CVE-2026-111765
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 31 Oct 2026, 13:39 UTC · Revision 1
Source evidence
A2A Java SDK: Android synchronous POST forwards credentials across authorities after incomplete redirect fix
core-osv · Original sourcePublished 20 Oct 2026, 21:08 UTC
The GHSA-9rhm fix added this safe setting in AndroidA2AHttpClient.createConnection(): connection.setInstanceFollowRedirects(false); The synchronous POST builder later overwrites it: private boolean followRedirects = true; public A2AHttpResponse post() throws IOException { HttpURLConnection connection = createConnection("POST", false); connection.setInstanceFollowRedirects(followRedirects); // ... } The second assignment wins. JSONRPCTransport and RestTransport both add interceptor-produced headers and call synchronous post() without setting followRedirects(false). On Android's repackaged OkHttp implementation, a cross-authority redirect strips Authorization but retains nonstandard request headers. AuthInterceptor permits four nonstandard authentication header names: X-API-Key API-Key X-Auth-Token X-Authentication I confirmed that the exact v1.3.1.Final Maven artifact forwards complete synthetic values under all four names to a second loopback authority. I also reproduced the supported AuthInterceptor to Android POST path. Explicitly calling followRedirects(false) returns the original 302 and produces no request to the collector. All test traffic stayed on two ephemeral 127.0.0.1 listeners. All credentials were synthetic FULCRUM-SYNTHETIC-* values. Reproduction I have attached AndroidA2AHttpClientRedirectTest.java. Copy it to: extras/http-client-android/src/test/java/org/a2aproject/sdk/client/http/android/ Run: mvn -pl extras/http-client-android -am \ -Dtest=AndroidA2AHttpClie
osv:GHSA-4fpj-g9jf-9rgg
org.a2aproject.sdk:a2a-java-sdk-http-client-android
Fixed versions: 1.3.2.Final
Complete source record
{
"id": "48a0eebbef3caf78c681ce36e6962c7d6a865619f5b692b688cfaf838180ba10",
"url": "https://osv.dev/vulnerability/GHSA-4fpj-g9jf-9rgg",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "A2A Java SDK: Android synchronous POST forwards credentials across authorities after incomplete redirect fix",
"summary": "The GHSA-9rhm fix added this safe setting in AndroidA2AHttpClient.createConnection(): connection.setInstanceFollowRedirects(false); The synchronous POST builder later overwrites it: private boolean followRedirects = true; public A2AHttpResponse post() throws IOException { HttpURLConnection connection = createConnection(\"POST\", false); connection.setInstanceFollowRedirects(followRedirects); // ... } The second assignment wins. JSONRPCTransport and RestTransport both add interceptor-produced headers and call synchronous post() without setting followRedirects(false). On Android's repackaged OkHttp implementation, a cross-authority redirect strips Authorization but retains nonstandard request headers. AuthInterceptor permits four nonstandard authentication header names: X-API-Key API-Key X-Auth-Token X-Authentication I confirmed that the exact v1.3.1.Final Maven artifact forwards complete synthetic values under all four names to a second loopback authority. I also reproduced the supported AuthInterceptor to Android POST path. Explicitly calling followRedirects(false) returns the original 302 and produces no request to the collector. All test traffic stayed on two ephemeral 127.0.0.1 listeners. All credentials were synthetic FULCRUM-SYNTHETIC-* values. Reproduction I have attached AndroidA2AHttpClientRedirectTest.java. Copy it to: extras/http-client-android/src/test/java/org/a2aproject/sdk/client/http/android/ Run: mvn -pl extras/http-client-android -am \\ -Dtest=AndroidA2AHttpClie",
"evidence": "osv:GHSA-4fpj-g9jf-9rgg",
"products": [
{
"name": {
"value": "org.a2aproject.sdk:a2a-java-sdk-http-client-android",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "1.3.2.Final",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "1.3.0.Final",
"evidence": "/affected/0/versions"
},
{
"value": "1.3.1.Final",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "high",
"structured": {
"id": "GHSA-4fpj-g9jf-9rgg",
"aliases": [
"CVE-2026-111765",
"GHSA-4fpj-g9jf-9rgg"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
}
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "1.3.0.Final"
},
{
"fixed": "1.3.2.Final"
}
]
}
],
"package": {
"name": "org.a2aproject.sdk:a2a-java-sdk-http-client-android",
"purl": "pkg:maven/org.a2aproject.sdk/a2a-java-sdk-http-client-android",
"ecosystem": "Maven"
},
"versions": [
"1.3.0.Final",
"1.3.1.Final"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-4fpj-g9jf-9rgg/GHSA-4fpj-g9jf-9rgg.json",
"last_known_affected_version_range": "<= 1.3.1.Final"
}
}
],
"modified": "2026-10-21T03:11:56.305391879Z",
"provider": "osv",
"references": [
"https://github.com/a2aproject/a2a-java/security/advisories/GHSA-4fpj-g9jf-9rgg",
"https://github.com/a2aproject/a2a-java/security/advisories/GHSA-9rhm-2h4x-jwmx",
"https://nvd.nist.gov/vuln/detail/CVE-2026-111765",
"https://github.com/a2aproject/a2a-java/pull/1141",
"https://github.com/a2aproject/a2a-java/commit/2a36530d75e11bcf9b81f543464dbe193ca6478e",
"https://github.com/a2aproject/a2a-java/commit/3ae82912a106a6765d7b78042b0ef96e6c2e29b5",
"https://github.com/a2aproject/a2a-java",
"https://github.com/a2aproject/a2a-java/blob/30e31086e24bea096b5f662088661269c9119100/SECURITY.md#L335-L342",
"https://github.com/a2aproject/a2a-java/releases/tag/v1.3.2.Final"
],
"provider_metadata": {
"cwe_ids": [
"CWE-522"
],
"severity": "HIGH",
"github_reviewed": true,
"nvd_published_at": "2026-10-20T16:17:00Z",
"github_reviewed_at": "2026-10-20T21:08:06Z"
}
},
"related_cves": [
{
"value": "CVE-2026-111765",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/database_specific/severity"
},
"source_id": "core-osv",
"document_id": 391581,
"published_at": "2026-10-20T21:08:06+00:00"
}