Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ CVE-2026-45300 — async-http-client

🟠 CVSS 8.0 — High ⚠️ Exploit Public CWE-200 NVD
8.0
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

async-http-client: Cookie header not stripped on cross-origin redirect

Summary

async-http-client leaks Cookie headers to cross-origin redirect targets. When following a redirect across a security boundary (different origin, or HTTPS→HTTP downgrade), the propagatedHeaders() method in Redirect30xInterceptor.java strips Authorization and Proxy-Authorization headers but does not strip Cookie, so session cookies and other sensitive cookie values are forwarded to the redirect target — which may be attacker-controlled.

Details

The vulnerability is in client/src/main/java/org/asynchttpclient/netty/handler/intercept/Redirect30xInterceptor.java.

The caller computes stripAuth on each redirect:

```java

boolean sameBase = request.getUri().isSameBase(newUri);

boolean stripAuth = !sameBase || schemeDowngrade || stripAuthorizationOnRedirect;

// ...

requestBuilder.setHeaders(propagatedHeaders(request, realm, keepBody, stripAuth));

```

stripAuth is true whenever the redirect crosses an origin, downgrades the scheme, or the caller opted in via AsyncHttpClientConfig#isStripAuthorizationOnRedirect().

In the vulnerable version, propagatedHeaders() only removes Authorization and Proxy-Authorization in that branch — Cookie is left untouched:

```java

private static HttpHeaders propagatedHeaders(Request request, Realm realm, boolean keepBody, boolean stripAuthorization) {

HttpHeaders headers = request.getHeaders()

.remove(HOST)

.remove(CONTENT_LENGTH);

if (!keepBody) {

headers.remove(CONTENT_TYPE);

}

if (stripAuthorization || (realm != null && (realm.getScheme() == AuthScheme.NTLM

|| realm.getScheme() == AuthScheme.SCRAM_SHA_256))) {

headers.remove(AUTHORIZATION)

.remove(PROXY_AUTHORIZATION);

// BUG: COOKIE is not removed here, so cookies leak across the security boundary.

}

return headers;

}

```

The companion test class RedirectCredentialSecurityTest covers Authorization / Proxy-Authorization stripping on cross-origin redirects and scheme downgrades, but has no coverage for Cookie, which is why the regression went unnoticed.

Proof of concept

```java

import org.asynchttpclient.*;

AsyncHttpClient client = asyncHttpClient();

// trusted-api.com responds 302 -> https://evil.com

Request request = new RequestBuilder("GET")

.setUrl("https://trusted-api.com/endpoint")

.setHeader("Cookie", "session=abc123; csrf=xyz789; api_key=secret")

.setHeader("Authorization", "Bearer token123")

.build();

client.executeRequest(request).get();

// Request seen by evil.com after the redirect:

// Authorization: <stripped>

// Cookie: session=abc123; csrf=xyz789; api_key=secret <-- leaked

```

Impact

  • Session hijacking — leaked session cookies allow impersonation.
  • CSRF token theft — CSRF tokens carried in cookies are disclosed.
  • API key theft — API keys stored in cookies are disclosed.
  • Privacy — tracking identifiers leak to third-party origins.

Realistic attack paths:

  • Open-redirect in a trusted API endpoint.
  • Compromised CDN or API gateway injecting redirects.
  • MITM on a plaintext hop in the redirect chain.

Fix

Add COOKIE to the headers removed alongside AUTHORIZATION / PROXY_AUTHORIZATION on the security-boundary branch:

```java

if (stripAuthorization) {

headers.remove(AUTHORIZATION)

.remove(PROXY_AUTHORIZATION)

.remove(COOKIE);

} else if (realm != null && (realm.getScheme() == AuthScheme.NTLM

|| realm.getScheme() == AuthScheme.SCRAM_SHA_256)) {

headers.remove(AUTHORIZATION)

.remove(PROXY_AUTHORIZATION);

}

```

Note that the URI-scoped CookieStore will re-add any cookies that legitimately match the new target after propagatedHeaders returns, so legitimate cross-origin sessions tracked by the client are not broken.

Fixed in 3.0.10 and 2.15.0 by commit [3b0e3e9e](https://github.com/AsyncHttpClient/async-http-client/commit/3b0e3e9e).

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs no privileges on the target. A user must be tricked into taking some action. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality high, integrity none, availability none.

CVSS metrics in full

The score comes from this vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N

  • Attack vector: Network — reachable from anywhere that can route to the service.
  • Attack complexity: Low — the attack works reliably, with no preparation.
  • Privileges required: None — an unauthenticated stranger can try it.
  • User interaction: Required — someone has to click, open or visit something.
  • Scope: Changed — a successful attack reaches components beyond the vulnerable one.
  • Confidentiality impact: High — total loss, or loss the attacker controls.
  • Integrity impact: None.
  • Availability impact: None.

Weakness class

CVE-2026-45300 is classified as CWE-200: Exposure of Sensitive Information. Information that should stay internal is disclosed to someone who is not authorised to see it.

Affected software

CVE-2026-45300 is recorded against 2 packages.

  • async-http-client (from 3.0.0 up to 3.0.10)
  • org.asynchttpclient:async-http-client (from 2.0.0 up to 2.15.0)

Timeline and source

Published on 5 June 2026 and last revised on 23 July 2026. A public exploit is known to exist, which raises the urgency of patching considerably. A vendor advisory or fix has been published. Record sourced from NVD.

References

github.com
github.com
github.com
github.com

Other advisories for this package

async-http-client has other advisories on record. If you are patching this one, these are worth checking on the same host:

Same weakness in other software

These advisories are the same class of weakness (CWE-200: Exposure of Sensitive Information) in other software:

CVE-2026-45300 on other distributions

Each distribution ships its own build and its own fixed version. Pick the one you run:

Details

Severity HIGH
CVSS Score 8.0
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
CWE CWE-200
Public Exploit ⚠️ Yes
Source NVD
Published 2026-06-05
Updated 2026-08-20
Modified 2026-07-23

Affected Packages

Software From version Fixed in
async-http-client 3.0.0 3.0.10
org.asynchttpclient:async-http-client 2.0.0 2.15.0

Exploit Protection

Are you running async-http-client?

CVE-2026-45300 carries CVSS 8.0 High rating and a public exploit already exists. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-45300 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2026
✓