<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 18:19:02 +0000</lastBuildDate>
    <item>
      <title>GHSA-82w8-qh3p-5jfq — Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS</title>
      <link>https://db.gcve.eu/vuln/ghsa-82w8-qh3p-5jfq</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: starlette&lt;/p&gt;
&lt;p&gt;### 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.&lt;/p&gt;
&lt;p&gt;### 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&amp;#39;s name and value with no size check. The configured limits are therefore both unreachable and unenforced for url-encoded bodies.&lt;/p&gt;
&lt;p&gt;Because the url-encoded parser does its work synchronously between stream reads, the two attack shapes have different effects:&lt;/p&gt;
&lt;p&gt;- **Field count** drives CPU and event-loop blocking. A body of ~1,000,000 fields (a sub-10MB payload such as `f0=v&amp;amp;f1=v&amp;amp;...`) blocks the worker&amp;#39;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 `Fo…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: starlette&lt;/p&gt;
&lt;p&gt;### 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.&lt;/p&gt;
&lt;p&gt;### 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&amp;#39;s name and value with no size check. The configured limits are therefore both unreachable and unenforced for url-encoded bodies.&lt;/p&gt;
&lt;p&gt;Because the url-encoded parser does its work synchronously between stream reads, the two attack shapes have different effects:&lt;/p&gt;
&lt;p&gt;- **Field count** drives CPU and event-loop blocking. A body of ~1,000,000 fields (a sub-10MB payload such as `f0=v&amp;amp;f1=v&amp;amp;...`) blocks the worker&amp;#39;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 `Fo…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-82w8-qh3p-5jfq</guid>
    </item>
  </channel>
</rss>
