Every CVE Search/ Get API key

CVE-2026-54283

Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS

7.5 HighFix available

Starlette is a lightweight ASGI framework/toolkit. From 0.4.1 until 1.3.1, request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply. This vulnerability is fixed in 1.3.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

0.48%Up 0.4 points since Jun 13, 2026
90%50%10%1%

What each source reports

CVE List Score used 7.5

Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS

Starlette is a lightweight ASGI framework/toolkit. From 0.4.1 until 1.3.1, request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply. This vulnerability is fixed in 1.3.1.

Record
CVE-2026-54283
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-770
Updated
2026-11-02
EUVDEUVD-2026-38319 7.5

Starlette is a lightweight ASGI framework/toolkit. From 0.4.1 until 1.3.1, request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply. This vulnerability is fixed in 1.3.1.

Record
EUVD-2026-38319
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
GitHub AdvisoriesGHSA-82w8-qh3p-5jfq 7.5

Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS

Summary

request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply.

Details

request.form() dispatches to a different parser depending on the Content-Type. For multipart/form-data the max_files, max_fields, and max_part_size limits are forwarded to the parser, but for application/x-www-form-urlencoded the parser is constructed without them. It has no max_fields or max_part_size parameter to receive them, and it appends every field with no count check and accumulates each field's name and value with no size check. The configured limits are therefore both unreachable and unenforced for url-encoded bodies.

Because the url-encoded parser does its work synchronously between stream reads, the two attack shapes have different effects:

  • Field count drives CPU and event-loop blocking. A body of ~1,000,000 fields (a sub-10MB payload such as f0=v&f1=v&...) blocks the worker's event loop for several seconds while parsing, during which the worker serves no other request.
  • Field size drives memory. A single large field value (e.g. a 50MB value) is buffered in full to build the FormData, forcing memory allocation proportional to the request body.

The equivalent multipart/form-data request is correctly rejected with 400 Too many fields / 400 Field exceeded maximum size.

Impact

This Denial of service (DoS) vulnerability affects all applications built with Starlette (or FastAPI) that call request.form() on application/x-www-form-urlencoded requests. A single request with a very large number of fields blocks the event loop for several seconds, and a single request with a very large field forces unbounded memory allocation; in either case, parallel requests can render the service unusable. A reverse proxy that enforces a request body size limit reduces but does not eliminate the exposure, since a sub-10MB body is already enough to block the event loop.

Mitigation

Upgrade to a patched version, which forwards max_fields and max_part_size to the url-encoded parser and enforces them while parsing, raising before the oversized field or excess fields are accumulated. The defaults match multipart/form-data (max_fields=1000, max_part_size=1MB) and can be customized via request.form(max_fields=..., max_part_size=...).

Record
GHSA-82w8-qh3p-5jfq
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-770
Updated
2026-11-02
NVD 7.5

Starlette is a lightweight ASGI framework/toolkit. From 0.4.1 until 1.3.1, request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply. This vulnerability is fixed in 1.3.1.

Record
CVE-2026-54283
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-770
Updated
2026-11-02
OSV 7.5

Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS

Starlette is a lightweight ASGI framework/toolkit. From 0.4.1 until 1.3.1, request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply. This vulnerability is fixed in 1.3.1.

Record
CVE-2026-54283
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-770
Updated
2026-11-02
OSVDEBIAN-CVE-2026-54283 7.5

Starlette is a lightweight ASGI framework/toolkit. From 0.4.1 until 1.3.1, request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply. This vulnerability is fixed in 1.3.1.

Record
DEBIAN-CVE-2026-54283
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
Show 10 moreShow less
OSVGHSA-82w8-qh3p-5jfq 7.5

Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS

Summary

request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply.

Details

request.form() dispatches to a different parser depending on the Content-Type. For multipart/form-data the max_files, max_fields, and max_part_size limits are forwarded to the parser, but for application/x-www-form-urlencoded the parser is constructed without them. It has no max_fields or max_part_size parameter to receive them, and it appends every field with no count check and accumulates each field's name and value with no size check. The configured limits are therefore both unreachable and unenforced for url-encoded bodies.

Because the url-encoded parser does its work synchronously between stream reads, the two attack shapes have different effects:

  • Field count drives CPU and event-loop blocking. A body of ~1,000,000 fields (a sub-10MB payload such as f0=v&f1=v&...) blocks the worker's event loop for several seconds while parsing, during which the worker serves no other request.
  • Field size drives memory. A single large field value (e.g. a 50MB value) is buffered in full to build the FormData, forcing memory allocation proportional to the request body.

The equivalent multipart/form-data request is correctly rejected with 400 Too many fields / 400 Field exceeded maximum size.

Impact

This Denial of service (DoS) vulnerability affects all applications built with Starlette (or FastAPI) that call request.form() on application/x-www-form-urlencoded requests. A single request with a very large number of fields blocks the event loop for several seconds, and a single request with a very large field forces unbounded memory allocation; in either case, parallel requests can render the service unusable. A reverse proxy that enforces a request body size limit reduces but does not eliminate the exposure, since a sub-10MB body is already enough to block the event loop.

Mitigation

Upgrade to a patched version, which forwards max_fields and max_part_size to the url-encoded parser and enforces them while parsing, raising before the oversized field or excess fields are accumulated. The defaults match multipart/form-data (max_fields=1000, max_part_size=1MB) and can be customized via request.form(max_fields=..., max_part_size=...).

Record
GHSA-82w8-qh3p-5jfq
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-770
Updated
2026-11-02
OSVPYSEC-2026-249 7.5

Starlette is a lightweight ASGI framework/toolkit. From 0.4.1 until 1.3.1, request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply. This vulnerability is fixed in 1.3.1.

Record
PYSEC-2026-249
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-54283 7.5

Starlette is a lightweight ASGI framework/toolkit. From 0.4.1 until 1.3.1, request.form() accepts max_fields and max_part_size to bound resource consumption while parsing form data. These limits are enforced for multipart/form-data, but silently ignored for application/x-www-form-urlencoded. An unauthenticated attacker can therefore send a urlencoded body with an arbitrarily large number of fields or an arbitrarily large field, even when the application configured limits it believed would apply. This vulnerability is fixed in 1.3.1.

Record
UBUNTU-CVE-2026-54283
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVCLSA-2026-1782954022 No score

TuxCare security update for starlette (1 CVE)

TuxCare rebuilt starlette to address 1 CVE. Fixed in 0.27.0.post5+tuxcare.

Record
CLSA-2026-1782954022
Updated
2026-11-02
OSVCLSA-2026-1789447406 No score

TuxCare security update for starlette (8 CVEs)

TuxCare rebuilt starlette to address 8 CVEs. Fixed in 0.25.0.post1+tuxcare.

Record
CLSA-2026-1789447406
Updated
2026-11-02
OSVCLSA-2026-1789537996 No score

TuxCare security update for starlette (4 CVEs)

TuxCare rebuilt starlette to address 4 CVEs. Fixed in 0.13.6.post5+tuxcare.

Record
CLSA-2026-1789537996
Updated
2026-11-02
OSVMGASA-2026-0413 No score

Updated python-starlette package fixes security vulnerabilities

Arbitrary HTTP method dispatched to HTTPEndpoint attributes via getattr. (CVE-2026-48817) Unvalidated request path concatenated into authority poisons request.url.hostname. (CVE-2026-54282)

Record
MGASA-2026-0413
Updated
2026-11-02
OSVopenSUSE-SU-2026:21053-1 No score

Security update for python-starlette

This update for python-starlette fixes the following issues

  • CVE-2026-48817: arbitrary HTTP method dispatched to HTTPEndpoint attributes via getattr (bsc#1268389).
  • CVE-2026-54282: request path that lacks a leading forward slash can lead to request.url.hostname manipulation (bsc#1268520).
  • CVE-2026-54283: urlencoded request body with an oversized data can lead to a denial of service (bsc#1268517).
Record
openSUSE-SU-2026:21053-1
Updated
2026-11-02
OSVROOT-APP-PYPI-CVE-2026-54283 No score

CVE-2026-54283 in starlette - Patched by Root

Root has patched CVE-2026-54283 in the starlette package for Root:PyPI. Multiple fixed versions available.

Record
ROOT-APP-PYPI-CVE-2026-54283
Updated
2026-11-02
OSVSUSE-SU-2026:22360-1 No score

Security update for python-starlette

This update for python-starlette fixes the following issues

  • CVE-2026-48817: arbitrary HTTP method dispatched to HTTPEndpoint attributes via getattr (bsc#1268389).
  • CVE-2026-54282: request path that lacks a leading forward slash can lead to request.url.hostname manipulation (bsc#1268520).
  • CVE-2026-54283: urlencoded request body with an oversized data can lead to a denial of service (bsc#1268517).
Record
SUSE-SU-2026:22360-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
starlette
PyPI
0.4.1 up to 1.3.1
1.3.1
starlette
TuxCare:PyPI
0.27.0 up to 0.27.0.post5+tuxcare, plus listed versions
0.27.0.post1+tuxcare0.27.0.post2+tuxcare0.27.0.post3+tuxcare0.27.0.post4+tuxcare
0.27.0.post5+tuxcare
starlette
TuxCare:PyPI
From an advisory covering 8 CVEs
0.25.0 up to 0.25.0.post1+tuxcare
0.25.0.post1+tuxcare
starlette
TuxCare:PyPI
From an advisory covering 4 CVEs
0.13.6 up to 0.13.6.post5+tuxcare, plus listed versions
0.13.6.post1+tuxcare0.13.6.post2+tuxcare0.13.6.post3+tuxcare0.13.6.post4+tuxcare
0.13.6.post5+tuxcare
starlette
Debian:12
before 0.26.1-1+deb12u2, plus listed versions
0.26.1-10.26.1-1+deb12u1
0.26.1-1+deb12u2
starlette
Debian:13
before 0.46.1-3+deb13u3, plus listed versions
0.46.1-30.46.1-3+deb13u10.46.1-3+deb13u2
0.46.1-3+deb13u3
starlette
Debian:14
before 1.3.1-1, plus listed versions
0.46.1-30.50.0-11.0.0-11.1.0-1
1.3.1-1
starlette
PyPI
0.4.1 up to 1.3.1, plus listed versions
0.10.00.10.10.10.20.10.30.10.4
Show 45 moreShow less
0.10.50.10.60.10.70.11.00.11.10.11.20.11.30.11.40.12.00.12.0b10.12.0b20.12.0b30.12.10.12.100.12.110.12.120.12.130.12.20.12.30.12.40.12.50.12.60.12.70.12.80.12.90.13.00.13.10.13.20.13.30.13.40.13.50.13.60.13.70.13.80.14.00.14.10.14.20.15.00.16.00.17.00.17.10.18.00.19.00.19.10.20.0
1.3.1
python-starlette
Mageia:10
From an advisory covering 3 CVEs
before 0.46.0-3.2.mga10
0.46.0-3.2.mga10
starlette
Root:PyPI
before 0.27.0+aikido.11
0.27.0+aikido.110.22.0+aikido.71.0.0+aikido.10.41.3+aikido.50.41.3+aikido.60.49.3+aikido.30.46.2+aikido.61.0.1+aikido.10.45.3+aikido.130.52.1+aikido.21.2.1+aikido.11.2.0+aikido.10.49.1+aikido.21.1.0+aikido.10.50.0+aikido.10.49.2+aikido.31.3.0+aikido.10.50.0+aikido.20.45.3+aikido.140.49.3+aikido.40.49.2+aikido.40.41.3+aikido.70.46.2+aikido.70.52.1+aikido.31.0.0+aikido.21.0.1+aikido.20.49.1+aikido.31.0.0+aikido.30.45.3+aikido.150.50.0+aikido.30.22.0+aikido.60.27.0+aikido.10
Show 8 moreShow less
Affected packages
PackageAffectedFixed
python-starlette
SUSE:Linux Enterprise Server 16.0
From an advisory covering 3 CVEs
before 0.41.3-160000.4.1
0.41.3-160000.4.1
python-starlette
SUSE:Linux Enterprise Server for SAP applications 16.0
From an advisory covering 3 CVEs
before 0.41.3-160000.4.1
0.41.3-160000.4.1
starlette
Ubuntu:22.04:LTS
All versions, plus listed versions
0.14.1-10.16.0-10.18.0-1
None known
starlette
Ubuntu:24.04:LTS
All versions, plus listed versions
0.30.0-10.31.1-1
None known
starlette
Ubuntu:25.10
All versions, plus listed versions
0.46.1-20.46.1-3
None known
starlette
Ubuntu:26.10
All versions, plus listed versions
0.50.0-11.1.0-11.3.1-11.7.0-2
None known
starlette
Ubuntu:26.04:LTS
All versions, plus listed versions
0.46.1-30.50.0-1
None known
python-starlette
openSUSE:Leap 16.0
From an advisory covering 3 CVEs
before 0.41.3-160000.4.1
0.41.3-160000.4.1

History

History
RecordedChangedSources
affected, facts
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-54283 is a high vulnerability (CVSS 7.5) in Encode Starlette, published June 15, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.48%, the 41st percentile. Fixed in starlette 1.3.1.

References

Show 13 moreShow less
This page doesn't list everything

Left out here: 114 versions. The JSON record has them.

MoveEnter Open