CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-88009

CVE-2026-88009: HTTP Request Smuggling and Authorization Bypass via Opaque Target Processing in Traefik

Alon Barad
Alon Barad
Software Engineer

Sep 11, 2026·7 min read·42 visits

Executive Summary (TL;DR)

A parser differential between Go's HTTP parser and lenient backend servers allows attackers to smuggle requests, bypass Traefik's path-scoped middleware (such as authentication), and access administrative endpoints undetected.

An architectural parser-differential vulnerability in Traefik's routing engine allows unauthenticated attackers to bypass path-based routing rules, authentication middleware, and access logs. The issue stems from inconsistencies in handling rootless/opaque request targets between Go's standard net/http parser and Traefik's internal routing and sanitization layers. This vulnerability compromises the authorization boundary of upstream microservices.

Vulnerability Overview

Traefik is a widely deployed cloud-native HTTP reverse proxy and load balancer used to route traffic within containerized environments, Kubernetes ingress controllers, and traditional bare-metal setups. Because of its position at the edge of the network architecture, Traefik is responsible for enforcing security boundaries. These boundaries include path-based access control lists (ACLs), authentication middleware, request sanitization, and comprehensive access logging.\n\nThe vulnerability designated as CVE-2026-88009 (and tracked under GHSA-f52w-8j3h-j724) represents an HTTP request smuggling variant caused by a parser-differential inconsistency. This flaw exists between Go's standard library net/http parser and Traefik's internal request routing and middleware pipeline. When processing unconventional HTTP request targets, the edge proxy and downstream backend interpret the same request line differently.\n\nThe attack surface is exposed to any unauthenticated client capable of sending HTTP/1.x traffic to a Traefik entrypoint. If the backend microservice utilizes a lenient HTTP parser (such as those written in Go's fasthttp or other relaxed frameworks), the attacker can bypass all path-scoped middleware. This results in the unauthorized execution of privileged operations on backend endpoints without leaving an audit trail in Traefik's access logs.

Root Cause Analysis

To understand the mechanics of this vulnerability, one must examine RFC 9112 Section 3.2, which governs HTTP/1.x request-target forms. Under standard operation, clients send requests in origin-form or absolute-form. However, the RFC also permits the processing of rootless or opaque request targets where a scheme is declared but is not followed by a forward slash. An example of such a target is GET http:admin/secret HTTP/1.1.\n\nWhen Go's url.ParseRequestURI() standard library function encounters an opaque target, its parsing logic diverges from standard URL processing. The parser identifies the scheme prefix http: and determines that the subsequent characters do not start with a slash. Consequently, Go populates the URL.Opaque field of the instantiated url.URL object with the remaining string (admin/secret) while leaving URL.Path and URL.RawPath entirely empty.\n\nThis empty state triggers the core vulnerability within Traefik's request-processing pipeline. Because Traefik relies on URL.Path to evaluate path-scoped routing rules and execute security middleware (such as forwardAuth or basic authentication), it perceives the request path as a single forward slash (/). This path normalization occurs because an empty path defaults to the root directory during evaluation, effectively masking the true target.\n\nThe final stage of the desynchronization occurs during upstream forwarding. When forwarding the HTTP request, Go's reverse proxy client calls URL.RequestURI() to reconstruct the raw request line. The standard library implementation specifies that if URL.Opaque is populated, its value is printed verbatim, overriding the empty URL.Path field. The lenient backend parser then processes this raw string as a normal path, executing the request on the administrative endpoint.

Code Analysis

The remediation of this vulnerability required modifications in two distinct areas of Traefik's codebase: the outermost entrypoint handler and the reverse proxy forwarding layer. The primary fix is implemented in pkg/server/server_entrypoint_tcp.go through the introduction of the denyOpaque middleware. This middleware acts as a gatekeeper for all incoming HTTP requests.\n\ngo\n// denyOpaque rejects the request if the URL is opaque.\n// Go only populates URL.Opaque for a request target which is none of the four forms allowed by RFC 9112 section 3.2:\n// origin-form and absolute-form both leave a rest starting with a slash after the scheme,\n// and asterisk-form and authority-form are special-cased.\n// Such a target leaves Path, RawPath and Host empty, hence going unnoticed by the path handling and the routing,\n// while URL.RequestURI gives Opaque precedence over the path, which reinstates the target when forwarding to the backend.\nfunc denyOpaque(h http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {\n\t\tif req.URL.Opaque != "" {\n\t\t\tlog.WithoutContext().Debugf("Rejecting request because it has an opaque URL: %s", req.URL.Opaque)\n\t\t\trw.WriteHeader(http.StatusBadRequest)\n\n\t\t\treturn\n\t\t}\n\n\t\th.ServeHTTP(rw, req)\n\t})\n}\n\n\nBy positioning this handler at the entrypoint of the TCP server, Traefik immediately rejects any incoming request where req.URL.Opaque is populated. The client receives an immediate HTTP 400 Bad Request status code, and execution is halted before any routing decisions, authentication lookups, or downstream logging processes take place.\n\nIn addition to the entrypoint block, a defense-in-depth modification was added to the proxy execution logic in pkg/server/service/proxy.go. This change ensures that even if an opaque URL is constructed internally by a plugin or a downstream middleware component, it is sanitized before transmission.\n\ngo\n// URL.RequestURI gives Opaque precedence over the path, an opaque outgoing URL would discard the path set above.\npr.Out.URL.Opaque = ""\n\n\nThis assignment strips the Opaque field entirely from the outgoing request. When the downstream HTTP client compiles the request, it is forced to construct the target line using the validated and parsed URL.Path and URL.RawQuery values. This dual-layer defense renders the attack path completely unexploitable.

Exploitation Methodology

Exploiting CVE-2026-88009 requires three main conditions: a vulnerable Traefik instance, a path-scoped security configuration, and a downstream backend that uses a lenient parser. If the downstream server parses the raw TCP request stream in a manner that ignores the http: scheme header or treats absolute URI schemes without slashes as relative paths, the vulnerability can be leveraged.\n\nAn attacker can use a utility like Netcat (nc) or custom socket-level scripts to send raw HTTP/1.x requests to the Traefik listener. Standard HTTP clients and libraries (such as modern web browsers or advanced API clients) often automatically normalize or reject rootless request targets prior to sending them. Therefore, raw socket-level manipulation is the preferred method for exploitation.\n\nmermaid\ngraph LR\n A["Attacker Client"] -->|"GET http:admin/secret HTTP/1.1"| B["Traefik Proxy (Vulnerable)"]\n B -->|"Evaluates path as '/'"| B\n B -->|"Forwards target Opaque verbatim"| C["Lenient Backend Server"]\n C -->|"Parses http:admin/secret as /admin/secret"| C\n\n\nA typical exploit payload consists of a manually crafted HTTP request line: GET http:admin/secret HTTP/1.1. When sent over an established TCP socket, this payload initiates the differential parsing flow.\n\nhttp\nGET http:admin/secret HTTP/1.1\nHost: vulnerable-vhost.local\nConnection: close\n\n\n\nUpon receiving this request, Traefik's routing logic matches the root domain but bypasses any middleware configured to protect /admin/secret because the evaluated path is normalized to /. The request is forwarded verbatim, and the lenient backend processes the target as /admin/secret. The attacker receives the response intended for authorized administrators, completely bypassing access control mechanisms.

Impact Assessment

The impact of this vulnerability is classified as High, with a CVSS base score of 8.8. Because Traefik is frequently deployed as the central gateway for microservice architectures, a bypass of this nature compromises the security controls of all internal services. Attackers can leverage the flaw to gain unauthorized access to administrative endpoints, internal APIs, and configuration consoles.\n\nAn important operational consequence of this vulnerability is access log evasion. Because Traefik normalizes the parsed path to / during its routing evaluation, the access logging middleware records the request as a successful retrieval of the root path. The actual target path (admin/secret) is never captured in standard proxy access logs.\n\nThis logging behavior hampers threat detection and incident response operations. Intrusion detection systems (IDS) and Security Information and Event Management (SIEM) platforms monitoring proxy logs will observe normal, benign traffic patterns. Consequently, active exploitation attempts will appear as regular homepage hits, allowing attackers to perform internal reconnaissance and data exfiltration without triggering automated alerts.

Remediation and Mitigation Guidance

The primary and recommended remediation is to upgrade all Traefik instances to a patched release. Traefik Labs has issued two main patches depending on the deployment branch. For organizations utilizing the legacy v2 release line, they must upgrade to version 2.11.57 or later. For those utilizing the current v3 release line, they must upgrade to version 3.7.13 or later.\n\nIn environments where immediate software upgrades are not feasible, network administrators must deploy hotfixes at the network edge or perimeter. Web Application Firewalls (WAFs) can be configured to block request targets that conform to the rootless URI schema. A ModSecurity rule can be implemented to drop requests containing scheme identifiers followed immediately by non-slash characters.\n\nAdditionally, organizations should evaluate the parsing behavior of their downstream backend applications. Configuring backend services to utilize strict HTTP parsers that reject malformed absolute-form targets provides an essential layer of security. Ensuring that both the edge proxy and internal microservices adhere to identical parser standards prevents the desynchronization necessary to exploit parser-differential flaws.

Official Patches

Traefik LabsOfficial GitHub Security Advisory
Traefik LabsOfficial Fix Pull Request

Fix Analysis (1)

Technical Appendix

CVSS Score
8.8/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N

Affected Systems

Traefik

Affected Versions Detail

Product
Affected Versions
Fixed Version
Traefik
Traefik Labs
< 2.11.572.11.57
Traefik
Traefik Labs
>= 3.0.0, < 3.7.133.7.13
AttributeDetail
CWE IDCWE-444
Attack VectorNetwork (AV:N)
CVSS Base Score8.8 (High)
Exploit StatusProof-of-Concept
CISA KEV StatusNot Listed
Affected ComponentCore Entrypoint Routing Engine

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1556Modify Authentication Process
Credential Access
CWE-444
Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')

The software does not properly parse or sanitize HTTP requests, leading to inconsistent interpretations by upstream and downstream components.

Vulnerability Timeline

Official patch commit 58d1e9ca204526823211e30fd4634101c59d58e9 compiled by Traefik maintainers
2026-08-28
CVE-2026-88009 and GHSA-f52w-8j3h-j724 published to the public
2026-09-10
Verified as not actively exploited in the wild (CISA KEV: False)
2026-09-10

References & Sources

  • [1]GitHub Security Advisory GHSA-f52w-8j3h-j724
  • [2]Traefik Pull Request #13796
  • [3]Fix Commit
  • [4]Traefik v2.11.57 Release Notes
  • [5]Traefik v3.7.13 Release Notes
  • [6]CVE.org Record
  • [7]NVD Detail

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 24 hours ago•CVE-2026-107844
5.3

CVE-2026-107844: Path Traversal Vulnerability in Contao ImagesController

A path traversal vulnerability (CWE-22) in Contao CMS allows unauthenticated remote attackers to bypass directory boundary restrictions in ImagesController and access files within the project directory.

Amit Schendel
Amit Schendel
8 views•5 min read
•1 day ago•CVE-2026-107848
3.5

CVE-2026-107848: Cross-Site Request Forgery (CSRF) in Contao Backend Actions via GET Requests

Contao Open Source CMS versions 4.0.0 through 5.3.49 and 5.4.0-RC1 through 5.7.11 contain a Cross-Site Request Forgery (CSRF) vulnerability in backend parameter handling. The `RequestTokenListener` component validates anti-CSRF tokens solely for HTTP POST requests, while GET-based declarative guards run only when an `act` parameter is present in the query string. Consequently, custom backend actions dispatched via alternative parameters such as `key=` can execute without CSRF token verification when triggered by an authenticated user.

Amit Schendel
Amit Schendel
7 views•5 min read
•1 day ago•CVE-2026-107843
5.3

CVE-2026-107843: Unthrottled Activation Email Resend and Account Enumeration in Contao CMS

Contao CMS versions 4.1.0 through 5.3.49 and 5.4.0-RC1 through 5.7.11 fail to validate form submission tokens and enforce rate limiting when processing activation email resend requests via HTTP POST, enabling resource exhaustion and account state enumeration.

Amit Schendel
Amit Schendel
8 views•4 min read
•1 day ago•CVE-2026-107842
5.3

CVE-2026-107842: Information Disclosure via Stale Indexing in Contao Search Module

An information disclosure vulnerability in Contao CMS allows unauthenticated site visitors to view protected page titles, URLs, and text excerpts through search queries when protected page indexing is disabled after previously being enabled.

Amit Schendel
Amit Schendel
10 views•4 min read
•1 day ago•GHSA-G38J-7V97-X298
6.5

GHSA-G38J-7V97-X298: Missing Authorization Check in Vikunja CalDAV Task Relation Creation

In Vikunja prior to version 2.6.0, relation creation via the CalDAV endpoint fails to invoke the TaskRelation.CanCreate authorization check. This missing access control allows an authenticated user to establish unauthorized relationships and perform write operations against any task, provided its unique identifier (UID) is known.

Alon Barad
Alon Barad
12 views•5 min read
•1 day ago•GHSA-3HC7-R24J-RPWC
6.8

GHSA-3hc7-r24j-rpwc: Cross-Project Task Disclosure via Subtask Expansion in Vikunja

A cross-project information disclosure vulnerability in Vikunja allows authenticated users with read access to one project to view private task details from unauthorized projects via subtask expansion parameters.

Alon Barad
Alon Barad
9 views•5 min read