CVE-2026-88004
Executive Summary
CVE-2026-88004 is a header-smuggling / trust-boundary bypass vulnerability (CWE-436: Interpretation Conflict) in Traefik, the open-source HTTP reverse proxy and load balancer. From Traefik 3.2.0 through 3.7.12, the aliasHeadersStrategy, underscoreHeadersStrategy, and forwardedHeaders entrypoint defenses inspect only req.Header and not req.Trailer. An unauthenticated remote client can therefore inject an aliased or trusted header name inside an HTTP/1.1 chunked trailer or an HTTP/2 trailer, which the retry or buffering middleware reads when it consumes the request body before the reverse proxy clones the request.
When a downstream backend merges trailers into the header namespace, the attacker-controlled trailer value reaches the application even though Traefik's documented delete or reject behavior was applied to the header namespace. This defeats header sanitization and can spoof identity or forwarded routing data, including trusted-header handling — a serious issue for deployments using header-injection identity patterns. The vulnerability is remotely reachable without credentials; no public PoC, exploit code, or Nuclei template was available at the time of reporting, and the CVE has no assigned CVSS score or EPSS value in the supplied data. The fix is documented as available in Traefik 3.7.13.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Root cause and mechanism
The vulnerability is an HTTP Request Smuggling variant rooted in an interpretation conflict between two components that disagree about which message element is authoritative: Traefik's entrypoint defenses and the backend receiving the proxied request.
Traefik's entrypoint defenses aliasHeadersStrategy, underscoreHeadersStrategy, and forwardedHeaders are responsible for enforcing trust policy on inbound header names. Per the NVD description, they inspect req.Header but not req.Trailer. In Go's HTTP implementation, req.Header and req.Trailer are distinct maps; header-hardening logic written against req.Header has no visibility into values delivered in req.Trailer.
Trailers are part of the HTTP message framing specification. They appear after the message body:
- HTTP/1.1: in a chunked transfer encoding, a trailer section follows the final
0-length chunk and carries name–value fields asfield-name: field-value. - HTTP/2: trailers are conveyed in the
HEADERSframe afterDATA, and carry the same semantic role as HTTP/1.1 trailers.
Because the defenses never read req.Trailer, an attacker who knows an aliased header name (e.g., a vendor-specific equivalent of X-Forwarded-For that maps to a trusted header name in the backend) or the name of a "trusted header" can place that name in a trailer and it will pass through unmodified, bypassing the documented delete or reject behavior.
The middleware timing condition is the crux. Traefik's retry and buffering middleware both force the request body to be read on the proxy side before the reverse proxy clones the request. Once the body is read, the trailers are parsed and materialized, and the cloned request forwarded upstream carries a populated trailer map. In the absence of this middleware (or with middlewares that do not consume the body before cloning), the trailer may not be materialized in the cloned request, so the exploitability window depends on middleware configuration.
The backend merge
The final link in the chain is bolded for a reason: the NVD description explicitly conditions exploitation on a backend that "merges trailers into the header namespace." Not all backends do this — this is an implementation-specific behavior of the upstream application/framework that treats trailers as headers or normalizes trailer fields into the request header map. When that merge occurs, the attacker-supplied trailer value is presented to the application as a request header, indistinguishable from the real header namespace.
Attack surface
- Reachability: unauthenticated, remote. Any exposed Traefik entrypoint that fronts a backend performing header merging is a potential target.
- Protocols: HTTP/1.1 chunked-encoding trailers and HTTP/2 trailers.
- Data type: header/trailer name–value pairs. No file parsing, no deserialization, no memory corruption.
- Preconditions: (a) Traefik
3.2.0through3.7.12; (b) retry or buffering middleware in the request path that reads the body before clone; (c) downstream backend that merges trailers into its header namespace.
Code-level detail available
The NVD description names the offender precisely: defenses operating on req.Header, not req.Trailer. No function names, claim keys, internal struct names, or configuration keys beyond the three named entrypoint defenses (aliasHeadersStrategy, underscoreHeadersStrategy, forwardedHeaders) are provided in the data. Anything further about implementation would be fabrication.
Exploitation Scenarios
No public PoC, exploit code, or Nuclei template is available for this CVE. The steps below are inferred from the vulnerability class (CWE-436 interpretation conflict / HTTP trailer header smuggling) and are bounded strictly by the mechanisms named in the NVD description.
1) Reconnaissance and target identification.
An attacker identifies a Traefik-protected application — observable via Server: Traefik style banners, X-Forwarded-For/X-Forwarded-Proto handling, or default 404 behavior — and determines whether the deployment is a vulnerable version. Fingerprinting the version range (3.2.0 ≤ version < 3.7.13) via headers, error pages, or prior disclosed behavior narrows the target list. The attacker then needs to know: Does the backend merge trailers into its header namespace? Which header names does the deployment trust (identity, forwarded routing)?
2) Triggering the vulnerability class.
The attacker sends a request to the Traefik entrypoint whose forwarded message carries a trailer rather than a regular header. In the HTTP/1.1 case, the request uses Transfer-Encoding: chunked and appends a trailer section after the terminating chunk. In the HTTP/2 case, the trailer is carried in a trailing HEADERS frame after the DATA frames. The trailer field name is the aliased or trusted header name that the entrypoint defense would have deleted or rejected — had it looked at req.Trailer. Because the defense only inspects req.Header, it does not see the value.
3) Payload/execution method. The middleware path must consume the body before the request clone. If the deployment routes the request through the retry or buffering middleware, the body is read and the trailer is materialized; the cloned request forwarded to the backend therefore carries a trailer map containing the attacker-controlled value. The attacker does not need to craft an exploit payload beyond a well-formed trailer section; the "payload" is the trust-bypassing field name itself and the value used to spoof identity or forwarded routing data.
4) Post-exploitation impact. If the backend merges trailers into the header namespace, the attacker-controlled value is treated as a header by the application. Concretely, this yields:
- Identity spoofing — providing a trailer for a header name the backend trusts for authentication/authorization decisions (e.g., a trusted upstream identity header). If the application trusts Traefik to delete or reject such a client-supplied name, the defense has silently failed.
- Forwarded routing data spoofing — providing a trailer for a name consumed by routing, rate-limiting, IP allow-listing, or access-log attribution logic, facilitating logic bypass or audit-log poisoning.
The NVD description explicitly says "potentially spoofing identity or forwarded routing data." No specific downstream CVE, RCE, or data-exfiltration chain is documented.
Impact Assessment
Confidentiality: Medium — identity or routing spoofing can expose application areas gated by trust in gateway-sanitized headers. Integrity: Medium/High — attacker-controlled data is accepted as trusted header data; log and audit attribution may be falsified. Availability: Low — no availability-relevant primitive is described. Scope: Changed (S:C) — the impact crosses the security authority of Traefik (whose defense is bypassed) into the backend (which consumes the spoofed value). Scope change is defensible here because the vulnerable component fails to enforce a boundary that downstream components explicitly rely on.
Business impact. Traefik is a widely deployed cloud-native ingress/edge component. Where it terminates untrusted internet traffic and sits in front of backends that merge trailers, the gateway's header-trust guarantees are degraded. Impacts depend entirely on what the backend does with the spoofed header: application-level access control bypass, fraudulent audit attribution, or misrouted/rate-limit-evading traffic.
Blast radius. All deployments running 3.2.0–3.7.12 with retry/buffering middleware and a trailer-merging backend. Because the exploit requires no authentication, a publicly exposed entrypoint qualifies. Deployments without the affected middleware or with non-merge backends are not exploitable via this path.
Uncertainty. No CVSS score or EPSS value is provided; treat numeric severity as undetermined. CISA KEV does not list this CVE. No observed-in-the-wild exploitation is documented in the supplied data. The patch-confidence metadata (0/4 unpatched) conflicts with the NVD description's fix statement and should be resolved by the reader against upstream sources.
Detection Guidance
Detection is difficult because the anomaly is application-layer framing — a valid trailer carrying a suspicious or trusted header name. Best practice is to alert on trailers that contain names the entrypoint should have sanitized, especially when the request traverses retry or buffering middleware.
Sigma Rule
title: Potential Traefik Header Smuggling via HTTP Trailers (CVE-2026-88004)
id: 7f3c9a2e-4b1d-4e5a-9c88-cve20268800
status: experimental
description: Detects requests carrying HTTP trailers whose names correspond to
trusted or aliased header names, indicative of CWE-436 trailer smuggling against
Traefik entrypoint defenses (aliasHeadersStrategy, underscoreHeadersStrategy,
forwardedHeaders).
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-88004
author: valtersit.com
date: 2026/01/01
logsource:
category: proxy
product: traefik
detection:
selection_trailer_marker:
cs-method: '*'
sc-status: '*'
cs-headers|contains:
- 'trailer:'
selection_suspicious_trailer_names:
cs-headers|contains:
- 'x-forwarded-for'
- 'x-forwarded-host'
- 'x-forwarded-proto'
- 'x-real-ip'
- 'forwarded'
- 'x-user'
- 'x-authenticated-user'
- 'x-remote-user'
- 'authorization'
condition: selection_trailer_marker and selection_suspicious_trailer_names
falsepositives:
- Legitimate gRPC/HTTP2 clients using trailers for observability metadata
- Backends that intentionally consume trailers
level: medium
YARA Rule
rule CVE_2026_88004_Traefik_Trailer_Header_Smuggling
{
meta:
author = "valtersit.com"
description = "Detects HTTP/1.1 chunked requests whose trailer section
smuggles a trusted/aliased header name past Traefik
entrypoint defenses (CVE-2026-88004)."
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-88004"
date = "2026-01-01"
severity = "medium"
strings:
$h1_chunked = "Transfer-Encoding: chunked" nocase
$h1_chunked2 = "Transfer-Encoding: chunked" nocase
$trailer_decl = "Trailer:" nocase
$xfwd = "X-Forwarded-For:" nocase
$xfwdh = "X-Forwarded-Host:" nocase
$xfwdp = "X-Forwarded-Proto:" nocase
$xreal = "X-Real-IP:" nocase
$fwd = "Forwarded:" nocase
$xuser = "X-Authenticated-User:" nocase
$xremu = "X-Remote-User:" nocase
$authz = "Authorization:" nocase
condition:
($h1_chunked or $h1_chunked2) and
(1 of ($xfwd, $xfwdh, $xfwdp, $xreal, $fwd, $xuser, $xremu, $authz))
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-88004 Traefik HTTP Trailer Header Smuggling Attempt"; flow:established,to_server; http.request_header; content:"Transfer-Encoding"; nocase; http.header; content:"chunked"; nocase; http.request_header; content:"Trailer"; nocase; http.request_trailer; content:"X-Forwarded-For"; nocase; sid:202688004; rev:1; metadata:cve CVE-2026-88004, attack_target Server, deployment Perimeter, signature_severity Major; classtype:attempted-admin;)
alert http any any -> any any (msg:"CVE-2026-88004 Traefik HTTP/2 Trailer Trusted Header Injection"; flow:established,to_server; http2.header_name; content:"Trailer"; nocase; http2.header_name; content:"Authorization"; nocase; sid:202688005; rev:1; metadata:cve CVE-2026-88004, signature_severity Major; classtype:attempted-admin;)
Note: modern Suricata does not expose a dedicated
http.request_trailersticky buffer in all builds; validate against your Suricata version and, if unavailable, correlatehttp.request_header/http.headermatches forTrailerwith subsequent flowbytes payload inspection.
Elastic Detection
sequence by source.ip with maxspan=5s
[ any where event.category == "network" and
http request.method is not null and
http.request.headers contains "Trailer" ]
[ any where event.category == "network" and
(http.request.headers contains "X-Forwarded-For" or
http.request.headers contains "X-Forwarded-Host" or
http.request.headers contains "Authorization" or
http.request.headers contains "X-Real-IP") and
http.request.body_bytes > 0 ]
Note: as a fallback where request headers are flattened into
http.request.headers, this EQL targets requests that both declare aTrailerheader and subsequently carry trusted-header names. Tune to reduce false positives from gRPC clients.
Splunk SPL Query
index=proxy sourcetype=traefik OR sourcetype=suricata
| eval raw_lower = lower(_raw)
| where like(raw_lower, "%transfer-encoding%chunked%")
OR like(raw_lower, "%trailer:%")
| where like(raw_lower, "%x-forwarded-for%")
OR like(raw_lower, "%x-forwarded-host%")
OR like(raw_lower, "%x-real-ip%")
OR like(raw_lower, "%forwarded%")
OR like(raw_lower, "%authorization%")
| eval src_ip = coalesce(src_ip, client_ip, c_ip)
| stats count values(http_method) as methods values(uri_path) as uris by src_ip
| where count > 3
| sort - count
Wazuh OSSEC Rule
<group name="web,traefik,attack,">
<rule id="2026880" level="8">
<decoded_as>json</decoded_as>
<field name="http.request.headers">Trailer</field>
<description>Traefik: HTTP request declares Trailer header (potential CWE-436 trailer smuggling - CVE-2026-88004)</description>
<mitre>
<id>T1190</id>
</mitre>
</rule>
<rule id="2026881" level="10">
<decoded_as>json</decoded_as>
<field name="http.request.headers">Transfer-Encoding</field>
<field name="http.request.headers">chunked</field>
<field name="http.request.trailer">X-Forwarded-For|X-Forwarded-Host|X-Real-IP|Authorization|Forwarded</field>
<description>Traefik: trusted/aliased header name delivered in HTTP trailer - probable CVE-2026-88004 exploitation attempt</description>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 — UNPATCHED per tracked-source metadata. However, the NVD description explicitly states the issue "is fixed in 3.7.13." These conflict. Treat 3.7.13 as the vendor-stated fix target and independently verify against the upstream release notes before relying on it; do not assume any tracked source has validated the fix.
1) Immediate mitigations (pre-verification):
- Remove or constrain
retryandbufferingmiddleware from request paths handling untrusted internet traffic. The exploit is conditioned on middleware that reads the body before the proxy clones the request; deploying without it removes the materialization condition for the trailer on the cloned request. - Reject requests containing trailer sections at the entrypoint where operationally feasible. If the backend does not need trailers, a reject rule is the cleanest control.
- Harden backends against trailer merging: configure downstream applications/frameworks to not merge trailer fields into the header namespace. This is the single most direct defensive fix for the backend half of the interpretation conflict.
- Do not rely on header deletion/rejection alone at Traefik for 3.2.0–3.7.12 — that is precisely the control being bypassed. Any trusted-header identity scheme (gateway-injected user identity) must be re-examined.
- Segment trusted-header flows so that only Traefik's own internal component (not internet-facing traffic) can reach backends that trust header-based identity.
2) Patch/upgrade steps:
- Review the Traefik release notes for 3.7.13 and apply the upgrade across all affected entrypoints (all releases 3.2.0 through 3.7.12).
- Verify the fix specifically covers
req.Trailerhandling inaliasHeadersStrategy,underscoreHeadersStrategy, andforwardedHeadersbefore considering the issue closed. - After upgrading, re-test with HTTP/1.1 chunked trailers and HTTP/2 trailer frames against a trailer-merging test backend to confirm delete/reject now applies.
- If an in-place upgrade cannot be performed immediately, treat the immediate mitigations above as compensating controls and track the patch-verification task to closure.
3) Long-term hardening:
- Enforce the invariant in code: header-trust defenses must operate over the union of
req.Headerandreq.Trailer, or explicitly strip trailers when trust policy is enforced. - Normalize at the boundary: strip or reject unexpected trailers at the outermost entrypoint by default; allowlist trailers only for protocols that require them (e.g., gRPC).
- Contract-test backends to assert that trailers never migrate into the header namespace, and add trailer-smuggling cases to CI for any gateway/backend combination where Traefik enforces header trust.
- Version discipline: maintain an inventory of Traefik versions across clusters and subscribe to upstream security notices; CWE-436 issues frequently recur when framing features (trailers,
Forwarded,X-Forwarded-*) are handled by different layers. - Defense in depth for identity: prefer cryptographic or channel-bound identity assertions over header-injection trust, which is structurally vulnerable to gateway interpretation conflicts.
References
- NVD — CVE-2026-88004: https://nvd.nist.gov/vuln/detail/CVE-2026-88004
- Traefik project security advisories / release notes (verify fix in 3.7.13): https://github.com/traefik/traefik/releases
- Traefik documentation — entrypoint header handling (
forwardedHeaders,underscoreHeadersStrategy,aliasHeadersStrategy) and retry/buffering middleware: https://doc.traefik.io/traefik/ - MITRE CWE-436 — Interpretation Conflict: https://cwe.mitre.org/data/definitions/436.html
- CISA Known Exploited Vulnerabilities Catalog (check current status; not listed as of reporting): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Exploit-in-the-wild / threat actor note: No public PoC, exploit code, Nuclei template, or threat-actor campaign is documented for CVE-2026-88004 in the supplied data. EPSS has not scored this CVE. CISA KEV does not list it. Any claim of active exploitation would be unsupported and is not made here.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.