PHP2Shell: Read our blog on the critical RCE vulnerabilities affecting 70% of the Internet
Vulnerability DatabaseCVE-2026-107285

CVE-2026-107285: 
Java vulnerability analysis and mitigation

Overview

CVE-2026-107285 is a credential disclosure vulnerability in the AsyncHttpClient (AHC) Java library, where proxy authentication credentials are incorrectly leaked to origin servers during WebSocket (ws://) connections tunneled through an HTTP proxy via CONNECT. It affects AHC versions >= 2.0.0 and < 2.16.1 (2.x branch) and >= 3.0.0 and < 3.0.12 (3.x branch). The vulnerability was published on October 7, 2026, and patches were released on August 9, 2026. It carries a CVSS v3.1 base score of 5.9 (Medium) (GitHub Advisory).

Technical details

The root cause lies in a logic flaw in NettyRequestFactory.newNettyRequest() and the companion requestUri() method (CWE-319, CWE-522): both functions determined whether to attach a Proxy-Authorization header and use an absolute-form request target solely by checking uri.isSecured(), which returns false for ws:// URIs. However, NettyRequestSender.needConnect() already correctly tunnels ws:// through HTTP CONNECT — just as it does for https:// and wss:// — meaning the subsequent WebSocket upgrade request travels through the established tunnel directly to the origin server, not to the proxy. Because the proxy-auth gate did not exclude WebSocket URIs, the tunneled upgrade request incorrectly included the Proxy-Authorization header and an absolute-form target intended only for the proxy. Basic authentication credentials are directly readable from the header, while Digest authentication responses can be replayed or cracked offline (GitHub Advisory, Fix Commit 3.x, Fix Commit 2.x).

Impact

Successful exploitation allows an attacker positioned on the origin-server side of the network — or a malicious/compromised origin server itself — to capture proxy authentication credentials from the Proxy-Authorization header included in the WebSocket upgrade request. Basic credentials are immediately recoverable in plaintext, while Digest credentials can be replayed against the proxy or subjected to offline cracking. The impact is limited to confidentiality (no integrity or availability impact), but compromised proxy credentials could enable unauthorized proxy access, lateral movement through the network, or further credential abuse (GitHub Advisory).

Exploitability

No public proof-of-concept exploit code is known, and there is no evidence of in-the-wild exploitation at this time (GitHub Advisory). The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Exploitation requires a network-adjacent or origin-server position (attack complexity: High), and the EPSS score is approximately 0.206%, indicating low near-term exploitation probability. NVD SSVC assessment classifies exploitation as "none" and the attack as non-automatable.

Exploitation steps

  1. Identify a target application: Locate a Java application using AsyncHttpClient (AHC) versions 2.0.0–2.16.0 or 3.0.0–3.0.11 that makes ws:// WebSocket connections through an HTTP proxy configured with Basic or Digest authentication.
  2. Position on the origin-server side: Gain a network vantage point between the proxy tunnel exit and the origin server (e.g., control the origin server, perform ARP spoofing on the origin-side network segment, or operate a malicious WebSocket endpoint).
  3. Trigger a proxied WebSocket connection: Wait for or induce the vulnerable AHC client to initiate a ws:// WebSocket request through the authenticated HTTP proxy. The client will send an HTTP CONNECT to the proxy to establish the tunnel.
  4. Capture the WebSocket upgrade request: Once the CONNECT tunnel is established, observe the WebSocket upgrade HTTP request forwarded through the tunnel to the origin. Due to the bug, this request will contain the Proxy-Authorization header with the proxy credentials.
  5. Extract credentials: For Basic authentication, base64-decode the Proxy-Authorization: Basic <token> value to recover the plaintext username:password. For Digest authentication, capture the response and replay it against the proxy or submit it to an offline cracking tool (e.g., Hashcat) to recover the password (GitHub Advisory).

Indicators of compromise

  • Network: Unexpected Proxy-Authorization headers present in WebSocket upgrade requests (HTTP GET with Upgrade: websocket) observed at the origin server or on the origin-side network segment; absolute-form request targets (e.g., ws://proxy.example.com/path) in WebSocket upgrade requests rather than origin-form paths.
  • Logs: Origin server access logs showing WebSocket upgrade requests (GET ws://... HTTP/1.1) containing Proxy-Authorization header values; proxy logs showing CONNECT tunnels established for ws:// destinations followed by no further proxy-level authentication activity from the origin side.
  • Application Behavior: Java applications using AHC making ws:// connections through an authenticated HTTP proxy on affected versions (2.0.0–2.16.0 or 3.0.0–3.0.11) should be treated as potentially having exposed proxy credentials.

Mitigation and workarounds

Upgrade AsyncHttpClient to version 3.0.12 (3.x branch) or 2.16.1 (2.x branch), which fix the issue by excluding WebSocket URIs from the proxy-auth header attachment and absolute-form target selection logic, mirroring the existing handling of wss:// (AHC 2.16.1 Release, AHC 3.0.12 Release). Note that 3.0.12 itself contains a separate Digest downgrade issue (GHSA-rqf5-2wxv-rjf4); users on the 3.x branch should upgrade to 3.0.13 or later to address both issues. If immediate patching is not possible, avoid using proxy authentication together with ws:// connections — use wss:// instead, or implement network-level controls (e.g., IP allowlisting) to restrict access to the proxy and origin servers (GitHub Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Affected

bookworm

async-http-client

Affected

sid

async-http-client

Affected

Ubuntu

Unknown

bionic (esm-apps)

async-http-client

Unknown

devel

async-http-client

Unknown

focal (esm-apps)

async-http-client

Unknown

jammy

async-http-client

Unknown

jammy (esm-apps)

async-http-client

Unknown

noble

async-http-client

Unknown

noble (esm-apps)

async-http-client

Unknown

resolute

async-http-client

Unknown

Source: This report was generated using AI

Related Java vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-111765HIGH7.5
  • Java logoJava
  • org.a2aproject.sdk:a2a-java-sdk-http-client-android
NoYesOct 20, 2026
CVE-2026-102834HIGH7.5
  • Java logoJava
  • org.bytedeco:javacv
NoYesOct 16, 2026
CVE-2026-111763MEDIUM5.7
  • Java logoJava
  • org.a2aproject.sdk:a2a-java-sdk-parent
NoYesOct 20, 2026
CVE-2026-111762MEDIUM5.7
  • Java logoJava
  • org.a2aproject.sdk:a2a-java-sdk-transport-rest
NoYesOct 20, 2026
CVE-2026-113730MEDIUM5.6
  • Java logoJava
  • ognl:ognl
NoYesOct 21, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management