~ / search / GHSA-v2j5-22fr-j62r

GHSA-v2j5-22fr-j62r

AsyncHttpClient: Pooled connections can still be shared across NTLM, Negotiate and proxy logins

Source: GitHub Advisory Database (reviewed) High CVE-2026-107230

Packages

EcosystemPackageAffectedFixed in
Maven org.asynchttpclient:async-http-client >= 3.0.0, < 3.0.14 3.0.14
Maven org.asynchttpclient:async-http-client >= 2.0.0, <= 2.16.1 no fix listed

Details

As written in the advisory (Markdown source, shown as plain text).

### Impact The fix for GHSA-vvp4-63h8-v5pm in 3.0.13 folded the authenticated principal into the HTTP/1.1 connection pool key, so that a connection one principal authenticated with NTLM, Kerberos or SPNEGO is not handed to another. It left three cases out. In each, a socket that one identity authenticated can still be drawn by a request belonging to a different identity, and the server serves that request as the first one. 1. **A login with no configured principal.** Kerberos and SPNEGO against the ticket cache or the default JAAS login, which is the usual deployment, leave the realm's principal unset, and the key stayed unscoped in that case. A request to the same host that carries no credentials at all draws the authenticated socket and is served as the service identity. 2. **The proxy realm.** Only the origin realm went into the key. A connection authenticated to a proxy with NTLM or Negotiate is handed to requests of another proxy identity, or of none, and the proxy acts for them as the first identity. 3. **Identities that share a user name.** Only the principal string went into the key, so `CORP\alice` and `OTHER\alice` shared connections, as did two realms differing only in password, login context, keytab or service principal. The Kerberos login cache in `SpnegoEngine` had the same collision, and it was an unsynchronised map, so concurrent first use could hand one caller's login to another. ### Who is Impacted Applications that authenticate with NTLM, Kerberos or SPNEGO, to an origin or to a proxy, and send requests under different identities, or both with and without credentials, to the same host through one client. The sharpest case is a service that calls an internal host under its own Kerberos identity and also fetches user-supplied URLs: a URL on that host is fetched as the service. Basic and Digest are not affected. ### Affected versions * 3.x: 3.0.13 * 2.x: 2.16.1 Earlier versions are covered by GHSA-vvp4-63h8-v5pm. ### Patches Fixed in 3.0.14. The pool key now carries a digest of every field of the realm that decides which identity the connection ends up as, for the origin and the proxy separately, and a realm that authenticates the connection is scoped whether or not it names a principal. `SpnegoEngine` caches logins in a concurrent map keyed by every other field of that identity, and replaces a cached login when the password changes. The 2.x line is end of life and will not receive a fix. Upgrade to 3.0.14. ### Workarounds Use a separate `AsyncHttpClient` instance per identity, and do not share one between authenticated and unauthenticated requests to a host that uses NTLM or Negotiate. Disabling connection pooling also removes the reuse. Incomplete fix of GHSA-vvp4-63h8-v5pm.

References

External links from the advisory. They lead to third-party sites.