Vulnerabilities in pkg:pypi/starlette
PACKAGECVE-2026-48710 is a MODERATE (CVSS 6.5) starlette has missing host header vulnerability (CWE-1289: Improper Validation of Unsafe Equivalence in Input) affecting Starlette libraries in the PyPI ecosystem. The issue involves starlette has missing host header validation that poisons request.url.path, bypassing path-based security checks. Remediation is available by upgrading affected packages to version 1.0.1.
pkg:pypi/starlette
Vulnerability advisories affecting package pkg:pypi/starlette. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-86qp-5c8j-p5mr | CVE-2026-48710 | MODERATE | Starlette has missing Host header validation that poisons request.url.path, bypassing path-based security checks |
| GHSA-x746-7m8f-x49c | CVE-2026-48817 | MODERATE | Starlette: Arbitrary HTTP method dispatched to `HTTPEndpoint` attributes via `getattr` |
| GHSA-82w8-qh3p-5jfq | CVE-2026-54283 | HIGH | Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS |
| GHSA-wqp7-x3pw-xc5r | CVE-2026-48818 | HIGH | Starlette: SSRF and NTLM credential theft via UNC paths in StaticFiles on Windows |
| GHSA-7f5h-v6xp-fcq8 | CVE-2025-62727 | HIGH | Starlette vulnerable to O(n^2) DoS via Range header merging in ``starlette.responses.FileResponse`` |
| GHSA-2c2j-9gv5-cj73 | CVE-2025-54121 | MODERATE | Starlette has possible denial-of-service vector when parsing large files in multipart forms |
| GHSA-74m5-2c7w-9w3x | CVE-2023-30798 | HIGH | MultipartParser denial of service with too many fields or files |
| GHSA-3qj8-93xh-pwh2 | - | HIGH | Duplicate Advisory: Starlette allows an unauthenticated and remote attacker to specify any number of form fields or files |
| GHSA-v5gw-mw7f-84px | CVE-2023-29159 | MODERATE | Starlette has Path Traversal vulnerability in StaticFiles |
| GHSA-f96h-pmfr-66vw | CVE-2024-47874 | HIGH | Starlette Denial of service (DoS) via multipart/form-data |
| GHSA-93gm-qmq6-w238 | - | HIGH | Duplicate Advisory: Starlette Content-Type Header ReDoS |
| GHSA-qj8w-rv5x-2v9h | - | HIGH | Duplicate Advisory: Starlette vulnerable to directory traversal |
CVE-2026-48710 at a Glance
Security Impact
CVSS: 6.5
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N).
How to Fix CVE-2026-48710
To remediate this vulnerability, upgrade all affected Starlette dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install starlette>=1.0.1
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show starlette
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2026-48710, inspect your installed packages using pip:
pip show starlette
Analyze the terminal output to locate any version of Starlette in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.0.1), your application is affected.
Note: The pip show starlette command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-1289: Improper Validation of Unsafe Equivalence in Input, where the product receives an input value that is used as a resource identifier or other type of reference, but it does not validate or incorrectly validates that the input is equivalent to a potentially-unsafe value. In Starlette, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-48710 Affected Starlette Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
starlette
|
PyPI |
< 1.0.1
|
1.0.1
|
References
Frequently Asked Questions
What is CVE-2026-48710?
Which Starlette versions are affected?
What version fixes CVE-2026-48710?
Is starlette affected?
What is the CVSS score of CVE-2026-48710?
What CWE is associated with CVE-2026-48710?
How can I check PyPI dependencies for CVE-2026-48710?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-86qp-5c8j-p5mr",
"modified" : "2026-08-28T18:30:59Z",
"published" : "2026-06-04T13:15:17Z",
"aliases" : [ "CVE-2026-48710" ],
"summary" : "Starlette has missing Host header validation that poisons request.url.path, bypassing path-based security checks",
"details" : "### Summary\nIn affected versions, the HTTP `Host` request header was not validated before being used to reconstruct `request.url`. Because the routing algorithm relies on the raw HTTP path while `request.url` is rebuilt from the `Host` header, a malformed header could make `request.url.path` differ from the path that was actually requested. Middleware and endpoints that apply security restrictions based on `request.url` (rather than the raw `scope` path) could therefore be bypassed.\n\n### Details\nWhen a client requests `http://example.com/foo`, it sends:\n\n```http\nGET /foo HTTP/1.1\nHost: example.com\n```\n\nAffected versions reconstructed the URL by concatenating `http://{host}{path}` and re-parsing the result. The `Host` value is only valid as a `uri-host [ \":\" port ]` per [RFC 9112 §3.2](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2-6), where `uri-host` follows the restricted `host` grammar of [RFC 3986 §3.2.2](https://www.rfc-editor.org/rfc/rfc3986.html#section-3.2.2). When it contains characters outside that grammar - notably `/`, `?`, or `#` - those characters move the path/query/fragment boundaries during re-parsing, so the parsed `request.url.path` no longer matches the path the server actually received. For example:\n\n```http\nGET /foo HTTP/1.1\nHost: example.com/abc?bar=\n```\n\nreconstructs to `http://example.com/abc?bar=/foo`, whose parsed `path` is `/abc` - even though routing used the real path `/foo`. The router still dispatches to `/foo` and the endpoint executes, but any middleware or code that reads `request.url.path` sees `/abc`, so path-based authorization checks can be bypassed.\n\n### Impact\nAny application running an affected version that relies on `request.url` (or `request.url.path`) for security-sensitive decisions is affected. The most common case is middleware that gates access to certain path prefixes based on `request.url.path`. Deployments fronted by a proxy or load balancer are mitigated only if that proxy rejects or normalizes the malformed `Host` header before forwarding and the application does not trust attacker-controlled host headers (e.g. `X-Forwarded-Host`) elsewhere.\n\n### Mitigation\nUpgrade to a patched version, which validates the `Host` header against the grammar of [RFC 9112 §3.2](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2-6) / [RFC 3986 §3.2.2](https://www.rfc-editor.org/rfc/rfc3986.html#section-3.2.2) when constructing `request.url` and falls back to `scope[\"server\"]` for malformed values.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "starlette"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "1.0.1"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.0.0"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-48710"
}, {
"type" : "WEB",
"url" : "https://github.com/Kludex/starlette/commit/764dab0dcfb9033d75442d7a359645c9f94648c6"
}, {
"type" : "WEB",
"url" : "https://www.x41-dsec.de/lab/advisories/x41-2026-002-starlette"
}, {
"type" : "WEB",
"url" : "https://www.secwest.net/starlette"
}, {
"type" : "WEB",
"url" : "https://www.cve.org/CVERecord?id=CVE-2026-48710"
}, {
"type" : "WEB",
"url" : "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-48710.json"
}, {
"type" : "WEB",
"url" : "https://ostif.org/disclosing-the-badhost-vulnerability-in-starlette"
}, {
"type" : "WEB",
"url" : "https://github.com/pypa/advisory-database/tree/main/vulns/starlette/PYSEC-2026-161.yaml"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/Kludex/starlette"
}, {
"type" : "WEB",
"url" : "https://bugzilla.redhat.com/show_bug.cgi?id=2481742"
}, {
"type" : "WEB",
"url" : "https://badhost.org"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/security/cve/CVE-2026-48710"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:60520"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:51357"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:44696"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:43038"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:37275"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:34532"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:34526"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:34456"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:30089"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:30088"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:26226"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:24866"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:23346"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:22993"
}, {
"type" : "WEB",
"url" : "https://access.redhat.com/errata/RHSA-2026:22992"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-1289", "CWE-444" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-06-04T13:15:17Z",
"nvd_published_at" : "2026-05-26T22:16:44Z"
}
}