Public mode

No access to your tenant or devices. Every item links to its source. What this means

Sources need attention Customize Public modeDiscuss ChangeIntel on Discord

Traefik HTTP/3 Backend NTLM Connection Reuse

Exploitation and risk

Source status

CISA KEV lists vulnerabilities known to be exploited. FIRST EPSS estimates the likelihood of exploitation in the next 30 days. An unavailable score does not mean zero risk.

Which CVEs have scores here?

This view includes predictions for CVE identifiers explicitly listed in public NuGet advisories. Microsoft release pages have their own prediction coverage. Check source status for the scope and latest checks.

No exploitation or prediction data is available here for these CVEs. This does not mean they are safe or unlikely to be exploited.

cve-program · CVE-2026-88007

Published

Traefik is an open source HTTP reverse proxy and load balancer. From 2.11.0 until 2.11.57 and 3.7.13, the HTTP/3 entrypoint ConnContext does not call service.AddTransportOnContext, so kerberosRoundTripper uses a shared backend transport instead of a transport dedicated to each frontend connection. With HTTP/3 enabled, a backend using connection-bound NTLM or Negotiate authentication, and backend keep-alive, an unrelated client can reuse a backend connection authenticated for a victim, read victim-only data, and act as that victim without the victim credentials. This issue is fixed in 2.11.57 and 3.7.13.

Source published
10 Sep 2026 14:47:28 UTC
Source modified
10 Sep 2026 15:38:46 UTC
Saved here
23 Oct 2026 15:48:27 UTC
Source terms
CVE Program Terms of Use

Original source record · Cite this exact observation · Complete original publisher JSON

Source: cve-program · CVE Program Terms of Use. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

CVSS 4.0 · 9.1 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

euvd · EUVD-2026-75544

Published

Traefik is an open source HTTP reverse proxy and load balancer. From 2.11.0 until 2.11.57 and 3.7.13, the HTTP/3 entrypoint ConnContext does not call service.AddTransportOnContext, so kerberosRoundTripper uses a shared backend transport instead of a transport dedicated to each frontend connection. With HTTP/3 enabled, a backend using connection-bound NTLM or Negotiate authentication, and backend keep-alive, an unrelated client can reuse a backend connection authenticated for a victim, read victim-only data, and act as that victim without the victim credentials. This issue is fixed in 2.11.57 and 3.7.13.

Additional publisher context

EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON.

Original publisher date fields

datePublished: Sep 10, 2026, 2:47:28 PM

dateUpdated: Sep 10, 2026, 3:38:46 PM

2 related source bulletins · separate from aliases

RHSA-2026:90321: Red Hat Security Advisory: Red Hat OpenShift Dev Spaces 3.31.0 Release.

CVE-2023-54404 · CVE-2025-62718 · CVE-2026-8643 · CVE-2026-9496 · CVE-2026-12185 · CVE-2026-13697 · CVE-2026-14682 · CVE-2026-15076 · CVE-2026-16308 · CVE-2026-17106 · CVE-2026-18427 · CVE-2026-19203 · CVE-2026-19534 · CVE-2026-39820 · CVE-2026-41178 · CVE-2026-41707 · CVE-2026-42499 · CVE-2026-42502 · CVE-2026-45416 · CVE-2026-47884 · CVE-2026-47886 · CVE-2026-47888 · CVE-2026-47890 · CVE-2026-47892 · CVE-2026-50010 · CVE-2026-55831 · CVE-2026-55833 · CVE-2026-55851 · CVE-2026-56745 · CVE-2026-56746 · CVE-2026-56819 · CVE-2026-56852 · CVE-2026-56854 · CVE-2026-58062 · CVE-2026-59280 · CVE-2026-59282 · CVE-2026-59283 · CVE-2026-59296 · CVE-2026-59313 · CVE-2026-59323 · CVE-2026-59651 · CVE-2026-59887 · CVE-2026-59899 · CVE-2026-59901 · CVE-2026-62243 · CVE-2026-64607 · CVE-2026-67213 · CVE-2026-67312 · CVE-2026-67313 · CVE-2026-67314 · CVE-2026-67320 · CVE-2026-67321 · CVE-2026-68494 · CVE-2026-68497 · CVE-2026-69152 · CVE-2026-69192 · CVE-2026-71290 · CVE-2026-71324 · CVE-2026-71325 · CVE-2026-71327 · CVE-2026-73500 · CVE-2026-73508 · CVE-2026-74835 · CVE-2026-75838 · CVE-2026-75899 · CVE-2026-75931 · CVE-2026-76169 · CVE-2026-81521 · CVE-2026-82417 · CVE-2026-82562 · CVE-2026-84292 · CVE-2026-84375 · CVE-2026-84394 · CVE-2026-84428 · CVE-2026-84445 · CVE-2026-84469 · CVE-2026-84504 · CVE-2026-84961 · CVE-2026-85062 · CVE-2026-85124 · CVE-2026-85152 · CVE-2026-85595 · CVE-2026-85597 · CVE-2026-86063 · CVE-2026-87743 · CVE-2026-88004 · CVE-2026-88007 · CVE-2026-88008 · CVE-2026-88009 · CVE-2026-88011 · CVE-2026-88012 · CVE-2026-88031 · CVE-2026-88878 · CVE-2026-88879 · CVE-2026-90711 · CVE-2026-93749 · CVE-2026-100655 · CVE-2026-100656 · CVE-2026-100666 · CVE-2026-101916 · CVE-2026-102925 · CVE-2026-102930 · CVE-2026-103435 · CVE-2026-109618 · CVE-2026-109619

openSUSE-SU-2026:12076-1: traefik-3.7.13-1.1 on GA media

CVE-2026-88004 · CVE-2026-88007 · CVE-2026-88008 · CVE-2026-88009 · CVE-2026-88010

Source published
Sep 10, 2026, 2:47:28 PM (timezone not stated)
Source modified
Sep 10, 2026, 3:38:46 PM (timezone not stated)
Saved here
11 Nov 2026 17:03:08 UTC
Source terms
ENISA EUVD · source terms and attribution apply

Original source record · Cite this exact observation · Complete original publisher JSON

Source: euvd · ENISA EUVD · source terms and attribution apply. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

EUVD CVSS 4.0 · 9.1 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

nvd · CVE-2026-88007

Published

Traefik is an open source HTTP reverse proxy and load balancer. From 2.11.0 until 2.11.57 and 3.7.13, the HTTP/3 entrypoint ConnContext does not call service.AddTransportOnContext, so kerberosRoundTripper uses a shared backend transport instead of a transport dedicated to each frontend connection. With HTTP/3 enabled, a backend using connection-bound NTLM or Negotiate authentication, and backend keep-alive, an unrelated client can reuse a backend connection authenticated for a victim, read victim-only data, and act as that victim without the victim credentials. This issue is fixed in 2.11.57 and 3.7.13.

Additional publisher context

NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON.

Source analysis status: Analyzed

Weakness classifications: CWE-287 · CWE-863

Original publisher date fields

published: 2026-09-10T15:17:56.183

lastModified: 2026-09-14T19:58:52.257

1 source CPE criteria · context only
  • cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*

The original JSON retains the logical configuration operators, exclusions and version bounds.

Source published
10 Sep 2026 15:17:56 UTC
Source modified
14 Sep 2026 19:58:52 UTC
Saved here
25 Oct 2026 16:19:22 UTC
Source terms
NIST NVD usage terms; underlying source attribution retained

Original source record · Cite this exact observation · Complete original publisher JSON

Source: nvd · NIST NVD usage terms; underlying source attribution retained. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

CVSS 4.0 · [email protected] · Secondary · 9.1 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

CVSS 3.1 · [email protected] · Primary · 9.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

osv · GHSA-qqjf-53cj-pwvv

Published

## Summary Traefik's HTTP/3 request path did not initialize the connection-scoped backend transport holder that isolates connection-bound NTLM and Negotiate (Kerberos) authentication on the HTTP/1.1 and HTTP/2 paths. The HTTP/3 entrypoint reuses the HTTPS handler chain and reaches the same backend round-tripper, but its `ConnContext` never called `service.AddTransportOnContext`, so `kerberosRoundTripper` fell back to the shared backend transport instead of a per-frontend-connection pool. On a route served over HTTP/3 to a backend that binds identity to a persistent connection via NTLM or Negotiate, an unrelated HTTP/3 client could be assigned a backend connection already authenticated as a victim and inherit that identity, reading victim-only data and performing actions as the victim without presenting the victim's credentials. Affected deployments require HTTP/3 enabled on the entrypoint, a backend using connection-bound NTLM/Negotiate authentication, and backend keep-alive; deployments using ordinary per-request authentication are not affected. ## Patches - https://github.com/traefik/traefik/releases/tag/v2.11.57 - https://github.com/traefik/traefik/releases/tag/v3.7.13 ## For more information If you have any questions or comments about this advisory, please [open an issue](https://github.com/traefik/traefik/issues). <details> <summary>Original Description</summary> ## Traefik HTTP/3 Backend NTLM Connection Reuse ### Summary Traefik's HTTP/3 request path does not initialize the connection-scoped backend transport state that Traefik uses to isolate connection-bound NTLM and Negotiate authentication for HTTP/1.1 and HTTP/2. When a backend keeps authenticated identity on a persistent HTTP/1.1 TCP connection, an unrelated HTTP/3 client can reuse a victim-authenticated backend connection and inherit that backend identity. In the attached reproduction, the HTTPS/HTTP/1.1 control case behaves correctly and isolates the attacker, but the HTTP/3 case allows a second unauthenticated client to read victim-only data and execute a state-changing request as `actor=victim`. Validated target: - Repository: `traefik/traefik` - Commit: `f2d0794417e4d06343e6e7c4722143f5b34bee45` - Validation time: `2026-08-25T06:48:02Z` - Commit time: `2026-08-24T08:26:06Z` - Patched status: not evaluated ### Details The issue is caused by a protocol-parity gap between the normal TCP HTTP entrypoint path and the HTTP/3 entrypoint path. For HTTP/1.1 and HTTP/2, Traefik explicitly creates a connection-scoped holder that can later store a dedicated RoundTripper for NTLM or Negotiate: ```go // pkg/server/server_entrypoint_tcp.go:691-703 var connContext multipleConnContext connContext.AddConnContextFunc(func(ctx context.Context, c net.Conn) context.Context { // This adds an empty struct in order to store a RoundTripper in the ConnContext in case of Kerberos or NTLM. ctx = service.AddTransportOnContext(ctx) if tlsConn, ok := c.(*tls.Conn); ok { if tlsConnWithOptionsName, ok := tlsConn.NetConn().(tcp.TLSConn); ok { return tcp.AddTLSOptionsNameInContext(ctx, tlsConnWithOptionsName.TLSOptionsName) } } return ctx }) ``` That helper installs the per-connection holder, and `kerberosRoundTripper` depends on it. If the holder is absent, it falls back to the shared original backend transport. If NTLM or Negotiate is detected, it stores a dedicated cloned RoundTripper into that holder so future requests stay on the authenticated backend connection: ```go // pkg/server/service/transport.go:374-402 func AddTransportOnContext(ctx context.Context) context.Context { return context.WithValue(ctx, transportKey, &stickyRoundTripper{}) } type kerberosRoundTripper struct { new func() http.RoundTripper OriginalRoundTripper http.RoundTripper } func (k *kerberosRoundTripper) RoundTrip(request *http.Request) (*http.Response, error) { value, ok := request.Context().Value(transportKey).(*stickyRoundTripper) if !ok { return k.OriginalRoundTripper.RoundTrip(request) } if value.RoundTripper != nil { return value.RoundTripper.RoundTrip(request) } resp, err := k.OriginalRoundTripper.RoundTrip(request) // If we found that we are authenticating with Kerberos (Negotiate) or NTLM. // We put a dedicated roundTripper in the ConnContext. // This will stick the next calls to the same connection with the backend. if err == nil && containsNTLMorNegotiate(resp.Header.Values("WWW-Authenticate")) { value.RoundTripper = k.new() } return resp, err } ``` For HTTP/3, the server reuses the normal HTTPS handler chain, but its `ConnContext` only propagates the TLS options name and does not call `service.AddTransportOnContext`: ```go // pkg/server/server_entrypoint_tcp_http3.go:65-80 h3.Server = &http3.Server{ Addr: config.GetAddress(), Port: config.HTTP3.AdvertisedPort, Handler: httpsServer.Server.(*http.Server).Handler, TLSConfig: &tls.Config{GetConfigForClient: h3.getTLSConfigForClient}, QUICConfig: &quic.Config{ Allow0RTT: false, }, ConnContext: func(ctx context.Context, c *quic.Conn) context.Context { tlsOptionsName, err := h3.getTLSOptionsName(c) if err != nil { log.Error().Msgf("Error getting TLS options name for client: %v", err) return ctx } return tcp.AddTLSOptionsNameInContext(ctx, tlsOptionsName) }, } ``` This means HTTP/3 requests reach the same reverse-proxy and backend transport logic as HTTPS, but without the connection-scoped transport holder that NTLM and Negotiate isolation relies on. In practice, the flow is: 1. A victim authenticates through Traefik to a backend that binds identity to the backend TCP connection using NTLM or Negotiate. 2. Because the HTTP/3 request context does not contain `transportKey`, `kerberosRoundTripper` uses the shared `OriginalRoundTripper`. 3. No frontend-connection-specific dedicated backend pool is installed for that HTTP/3 client. 4. A second unrelated HTTP/3 client can be assigned the same backend TCP connection after the victim has authenticated it. 5. That second client inherits the victim's backend identity without sending the victim's credentials. The attached verifier demonstrates both the negative control and the exploit path: - HTTPS/HTTP/1.1 control case: the attacker uses a separate frontend connection and correctly receives `401` - HTTP/3 exploit case: the attacker uses a separate HTTP/3 client with no `Authorization` header, reads `resource=secret actor=victim`, executes `action=transfer actor=victim to=attacker amount=5000`, and hits the same backend TCP connection identifier as the victim ### PoC See the reproduction materials at: https://gist.github.com/OneZ3r0/41da8e8b79ebbe444a94f8a2a3a30895 The gist can also be downloaded as a ZIP archive. Files included in this gist: - `run.sh` - `Dockerfile` - `.dockerignore` - `go.mod` - `go.sum` - `verify.go` The package is intentionally kept as a single-container reproduction: 1. `run.sh` builds a local image for the pinned target commit 2. the Dockerfile builds both Traefik and the verifier during image build 3. the container runs the verifier directly as its entrypoint 4. the verifier starts a synthetic backend, launches Traefik, runs the HTTPS/HTTP/1.1 control case, then runs the HTTP/3 exploit case Run: ```bash ./run.sh ``` `run.sh` defaults to the validated commit above. To override it explicitly: ```bash PRODUCT_COMMIT=f2d0794417e4d06343e6e7c4722143f5b34bee45 ./run.sh ``` Expected terminal result: ```text REPRODUCED: HTTP/1.1 isolates the authenticated backend connection, but HTTP/3 reuses the victim-authenticated backend connection for a different client and executes an unauthorized state-changing request as the victim. ``` Important observed behavior from the PoC: - the HTTP/1.1 control case succeeds only if a fresh attacker connection receives `401` - the HTTP/3 exploit case succeeds only if the attacker reads victim-only data without sending `Authorization` - the HTTP/3 exploit case succeeds only if the attacker performs `/transfer?to=attacker&amount=5000` as `actor=victim` - the HTTP/3 exploit case succeeds only if the attacker uses the same backend TCP connection identifier as the victim Environment notes: - Docker is required - the build fetches the target Traefik source from GitHub - no production credentials or external NTLM service are required; the verifier includes a synthetic NTLM-like backend specifically to demonstrate connection-bound identity reuse ### Impact This is a cross-client authorization bypass affecting deployments that expose HTTP/3 routes to backends using connection-bound NTLM or Negotiate authentication with persistent backend connection reuse. In the verified reproduction, an unauthenticated second client can: - read victim-only data - perform a state-changing action as the victim - reuse a backend TCP connection that has already been authenticated as the victim Attack prerequisites: - HTTP/3 enabled on the Traefik entrypoint - a routed backend using connection-bound NTLM or Negotiate authentication - backend keep-alive and backend connection reuse enabled - the attacker can reach the same route as the victim Deployments using ordinary per-request authentication are not affected by this specific issue. </details> ---

Source published
10 Sep 2026 23:04:06 UTC
Source modified
17 Sep 2026 17:40:39 UTC
Saved here
24 Oct 2026 13:19:41 UTC
Source terms
GitHub Advisory Database · CC-BY-4.0

Original source record · Cite this exact observation · Complete original publisher JSON

Source: osv · GitHub Advisory Database · CC-BY-4.0. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

CVSS_V4 · CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Publisher rating · CRITICAL

osv · GO-2026-6466

Published

Traefik HTTP/3 Backend NTLM Connection Reuse in github.com/traefik/traefik

Source published
16 Sep 2026 16:56:22 UTC
Source modified
17 Sep 2026 17:30:12 UTC
Saved here
24 Oct 2026 13:19:41 UTC
Source terms
OSV · upstream source license applies

Original source record · Cite this exact observation · Complete original publisher JSON

Source: osv · OSV · upstream source license applies. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 13 Nov 07:12 UTC · 274 of 275 readable · 272 fully read · documentation 469/469 current