You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update SECURITY.md for the 1.3.2.Final advisory: Android synchronous
POST path re-enabled redirect following, overriding the GHSA-9rhm fix.
- §1: version binding → 1.3.2.Final, advisory count → five
- §8.8: note incomplete fix, cross-reference §8.11
- §8.11: new entry for the Android POST redirect-disable correction
- §8a: mark credential-leakage class as incomplete-fix confirmed
- §13a: add confirmed example of the "different route to same sink" shape
- §14 Wave 5: resolution record for GHSA-4fpj-g9jf-9rgg
Signed-off-by: Emmanuel Hugonnet <ehugonne@redhat.com>
[GHSA-4fpj-g9jf-9rgg](https://github.com/a2aproject/a2a-java/security/advisories/GHSA-4fpj-g9jf-9rgg) — have
63
64
been incorporated; the sections they affected are annotated with the advisory identifier.
64
65
65
66
**Status:** Maintainer-reviewed.
@@ -337,9 +338,14 @@ scores depend on the specific violation and deployment context.
337
338
credentials) matches a safe allowlist before placing credentials in a request header; invalid names are
338
339
rejected. Automatic HTTP redirect following is disabled in all HTTP client implementations (JDK, Vert.x,
339
340
Android), preventing credential leakage to attacker-controlled redirect destinations.
341
+
342
+
*Correction (1.3.2.Final — [GHSA-4fpj-g9jf-9rgg](https://github.com/a2aproject/a2a-java/security/advisories/GHSA-4fpj-g9jf-9rgg)):* The 1.3.0.Final fix was
343
+
incomplete for the Android client: `AndroidA2AHttpClient.post()` re-enabled redirect following by overwriting
344
+
the safe default from `createConnection()` with a builder field initialized to `true`; corrected in
345
+
1.3.2.Final by defaulting that field to `false` (see §8.11).
340
346
-*Violation symptom:* a malicious agent's AgentCard naming an arbitrary header causes the client to forward
341
347
API key credentials to an attacker-controlled server via redirect.
342
-
-*Severity:* moderate. Indicative CVSS moderate range (CWE-522).
348
+
-*Severity:* moderate (header-allowlist bypass); see §8.11 for the Android synchronous POST severity.
343
349
9.**Push-notification credential log suppression.***(Added in 1.3.0.Final — [GHSA-x32g-jvvm-4725](https://github.com/a2aproject/a2a-java/security/advisories/GHSA-x32g-jvvm-4725))* The REST
344
350
transport handler no longer logs the raw request body on parse failure. Previously, a protobuf parse error in
345
351
`parseRequestBody` caused the full JSON body — which may contain push-notification `token` and
@@ -354,11 +360,24 @@ scores depend on the specific violation and deployment context.
354
360
-*Violation symptom:* a caller denied read access on individual tasks still being able to enumerate all
355
361
tasks via `listTasks`.
356
362
-*Severity:* moderate information disclosure.
363
+
11.**Android synchronous POST redirect-disable corrected.***(Added in 1.3.2.Final — [GHSA-4fpj-g9jf-9rgg](https://github.com/a2aproject/a2a-java/security/advisories/GHSA-4fpj-g9jf-9rgg))* The
364
+
`AndroidA2AHttpClient` synchronous POST builder had `followRedirects` initialized to `true`, which caused
365
+
`post()` to overwrite the `setInstanceFollowRedirects(false)` applied in `createConnection()` by the
366
+
GHSA-9rhm-2h4x-jwmx fix. On Android's OkHttp-backed `HttpURLConnection`, cross-authority redirects strip
367
+
the standard `Authorization` header but forward nonstandard headers; credentials injected by `AuthInterceptor`
368
+
under any of the four allowlisted names (`X-API-Key`, `API-Key`, `X-Auth-Token`, `X-Authentication`) were
369
+
therefore forwarded to attacker-controlled redirect destinations on the synchronous POST path used by both
370
+
`JSONRPCTransport` and `RestTransport`. Fixed in 1.3.2.Final by defaulting `followRedirects` to `false`,
371
+
making redirect-following behavior the opt-in rather than the opt-out for the Android client.
372
+
-*Violation symptom:* a malicious agent returning a redirect on a synchronous POST request causes the
373
+
Android client to forward allowlisted API key credentials to a second authority.
374
+
-*Severity:* high. CVSS 7.5 (CWE-522).
357
375
358
376
### §8a Anticipated vulnerability classes
359
377
360
-
Four advisories were published for 1.3.0.Final, converting the first two anticipated classes below into
361
-
confirmed historical cases. The remaining classes are still *anticipated* — attack shapes that the adversary
378
+
Five advisories have been published since 1.3.0.Final, converting the first four anticipated classes below into
379
+
confirmed historical cases (the Android advisory is an additional finding within the credential-leakage class,
380
+
not a new class). The remaining classes are still *anticipated* — attack shapes that the adversary
362
381
model (§7) and the code paths reviewed in this document make plausible.
363
382
364
383
-**Authorization bypass via a missing or misconfigured `TaskAuthorizationProvider`.***(confirmed and fixed)*
@@ -371,11 +390,16 @@ model (§7) and the code paths reviewed in this document make plausible.
371
390
(Moderate, CVSS 5.8). An unauthenticated caller could register a webhook pointing at internal or metadata
372
391
endpoints; the server would POST task data to them. Fixed in 1.3.0.Final with SSRF-safe URL validation and
373
392
redirect-following disabled (§8.7).
374
-
-**Client credential leakage via attacker-controlled redirect.***(confirmed and fixed)* Disclosed as
393
+
-**Client credential leakage via attacker-controlled redirect.***(confirmed and fixed; incomplete fix confirmed and fixed)* Disclosed as
0 commit comments