Sep 24, 2026·9 min read·6 visits
Low-privilege authenticated users can trigger an application-level denial of service in Plone by uploading files with extremely long names or saving excessively long titles and descriptions, leading to database indexing bloat and thread crashes.
CVE-2026-57576 is an application-level Denial of Service (DoS) vulnerability in Plone. It resides in the `plone.app.dexterity` and `plone.app.contenttypes` packages, allowing authenticated users with content creation permissions to submit excessively long metadata attributes. Because these fields are stored without length limits and subsequently processed by indexing and rendering engines, they trigger complete server resource exhaustion and thread starvation.
The Plone Content Management System (CMS) relies on an extensible content-type framework known as Dexterity (plone.app.dexterity). This framework handles how schema fields, metadata behaviors, and standard attributes are structured, stored, and managed across the Zope Object Database (ZODB). In an unpatched Plone deployment, standard metadata fields like title and description are defined by the IBasic schema interface without any programmatic limit on input string length. This lack of bounds checking exposes a severe, unauthenticated or low-privilege authenticated application-level Denial of Service (DoS) attack surface.
Because Plone extensively consumes, indexes, and renders these core metadata attributes in various core interfaces, the ingestion of oversized strings directly degrades system availability. When an attacker supplies a Title or Description with hundreds of thousands of characters, the server experiences high processing bottlenecks. This vulnerability is classified as CWE-400: Uncontrolled Resource Consumption, highlighting a failure to restrict the allocation of CPU cycles and memory during content deserialization and page layout rendering.
The vulnerability affects both the core metadata behavior system in plone.app.dexterity and the default content types (such as File, Document, and Image) managed by plone.app.contenttypes. An authenticated user with basic permissions to create or modify content, such as a Contributor or Editor, can trigger this flaw over a standard HTTP connection. The impact is complete thread starvation and server unresponsiveness, which prevents normal system operations and restricts administrators from accessing management panels to clean up the malicious records.
The primary root cause of CVE-2026-57576 resides in the absence of max_length properties on the field schema definitions within plone.app.dexterity.behaviors.metadata.IBasic and standard XML-based content type configurations. By default, Plone's form framework, z3c.form, validates submitted values against the schema constraints. Without an explicit maximum length declared, the framework accepts arbitrarily large strings during content creation or editing forms, passing them directly to the database layer without restriction.
Furthermore, Plone contains helper utilities that automate metadata generation during file uploads to streamline the editor experience. When an image or generic file is uploaded, a custom event subscriber in plone.app.contenttypes.subscribers.set_title_description automatically extracts the original filename and assigns it as the object's title if no title was explicitly provided. Similarly, the NameFromFileName behavior handles title mapping for custom Dexterity objects. Because these handlers did not enforce boundaries on the length of the extracted filename string, uploading a file with a 100,000-character filename results in the immediate creation of a 100,000-character title attribute on the persistent object.
Once these bloated attributes are stored in the ZODB, they trigger severe performance degradation across three major operations. First, Plone's catalog indexing engine, portal_catalog, automatically parses, serializes, and indexes the title and description attributes of new or modified objects to make them searchable. This process causes significant database write bloat and heavy CPU execution. Second, when standard interface elements like the folder contents view, search results page, global navigation tree, or the Zope Management Interface (ZMI) load, Zope Page Templates (ZPT) must parse, encode, and escape these massive strings. The template rendering engine exhausts available memory, leading to thread execution timeouts and system-wide service failure.
The remediation introduced strict validation boundaries and explicit string truncation in automated event subscribers and behaviors. In plone.app.dexterity, a new configuration file (config.py) establishes clear architectural boundaries, setting MAX_TITLE_LENGTH to 1024 and MAX_DESCRIPTION_LENGTH to 10000 characters. These limits are imported directly into the IBasic Python schema behavior to enforce validation at the form level during HTTP POST requests.
In addition, the automated handlers were modified to prevent long strings from bypassing form constraints. Under plone/app/dexterity/behaviors/filename.py, the NameFromFileName behavior was corrected to truncate the filename string during assignment. By applying a safe python slice [:MAX_TITLE_LENGTH], the application guarantees that auto-generated titles will never exceed the allowed threshold, even if the raw uploaded filename is extremely large.
Similarly, in plone.app.contenttypes, the XML-defined schemas for standard content types (including file.xml and image.xml) were updated to declare explicit <max_length> tags. The following code snippet contrasts the vulnerable lack of boundaries with the patched implementation containing explicit schema definitions and subscriber-level truncation:
# Vulnerable implementation in plone.app.contenttypes.subscribers:
# Lacked any length check, resulting in unbound title assignment
def set_title_description(obj, event):
...
if datafield:
filename = datafield.filename or ""
obj.title = filename # Directly assigned without bounds check
# Patched implementation in plone.app.contenttypes.subscribers:
# Enforces a fallback boundary of 1024 characters via slicing
try:
from plone.app.dexterity.config import MAX_TITLE_LENGTH as _MAX_TITLE_LENGTH
except ImportError:
_MAX_TITLE_LENGTH = 1024
def set_title_description(obj, event):
...
if datafield:
filename = datafield.filename or ""
# Truncate filename prior to object assignment
obj.title = filename[:_MAX_TITLE_LENGTH]In addition to python modifications, XML configuration files were secured. For instance, in src/plone/app/contenttypes/schema/file.xml, the title field was explicitly given a <max_length>1024</max_length> element. This prevents the Zope schema engine from accepting overly long text strings during forms parsing, rejecting anomalous requests before they reach backend storage.
Exploitation of CVE-2026-57576 requires network access to the Plone instance and standard authenticated credentials with content creation or edit rights. A user possessing the low-privilege Contributor role is capable of initiating this attack. The attack complexity is low, as it does not require bypassing specialized security controls, race conditions, or complex multi-stage memory layouts. It relies strictly on standard application workflows to submit oversized inputs.
There are two primary exploitation methodologies. The first method targets standard editing and creation forms. The attacker navigates to an add-form (e.g., ++add++Document) and populates the Title field with a payload containing 100,000 repeating characters (e.g., "A" * 100000). The form handler accepts the input because the field does not enforce a maximum length. Upon clicking submit, the server attempts to parse, store, and index the record, leading to an immediate CPU and memory spike.
The second, more silent method leverages the automatic filename mapping. The attacker generates a local image or document file and changes its filename to a highly elongated sequence of characters. They then upload this file through Plone's standard file widget. The backend event subscriber automatically maps this extremely long filename string to the object's title property. Since the upload interface handles file transfers in chunks, the request finishes processing successfully, but the subsequent catalog indexing and rendering workflows cause immediate Zope thread starvation, creating a denial of service.
The direct impact of exploiting CVE-2026-57576 is an application-level Denial of Service (DoS) affecting the entire Plone site. When the oversized fields are indexed by the catalog, or when standard templates try to render these strings, the underlying Zope threads enter a blocked state. This results in heavy memory utilization, causing the physical server to exhaust swap space or trigger the Linux kernel Out-Of-Memory (OOM) killer, terminating the Zope process entirely.
Because the global navigation tree and folder listings render these title attributes, the denial of service propagates to all users. Administrators attempting to clean up the malicious object via the Plone interface or the Zope Management Interface (ZMI) will experience page timeouts and crashes because loading those control panels itself requires rendering the oversized title. This results in a persistent denial of service state that can only be resolved through direct, low-level programmatic database editing using command-line scripts.
From a CVSS v3.1 perspective, the vulnerability evaluates to a base score of 6.5, with high availability impact but zero impact on confidentiality or integrity. The attack vector is Network (AV:N), the complexity is Low (AC:L), and low privileges are required (PR:L). While the exploit does not allow arbitrary code execution, the total disruption of web services presents a significant operational risk for organizations running large, multi-user CMS deployments.
Regarding fix completeness, the applied patches successfully close the vector for standard web submissions and upload routines. However, a programmatic bypass remains possible. If a custom administrative script, an external integration API, or an unmitigated third-party add-on modifies the object attributes directly using low-level API commands (e.g., bypasses the z3c.form and subscribers layer), the database will still accept arbitrary string lengths. Administrators must ensure that third-party schemas are also updated with explicit length limits.
Remediation of CVE-2026-57576 requires upgrading the affected Python packages to their resolved versions. If you are operating on Plone 6.0 branches, upgrade plone.app.dexterity to version 4.1.3 or higher, and plone.app.contenttypes to 4.0.10 or higher. If running on the newer Plone 6.1 release line, upgrade both packages to 5.0.1 or higher. For legacy Plone 5.2 environments, ensure the dependencies are pinned to plone.app.dexterity version 3.2.3 and plone.app.contenttypes version 3.0.12.
If an immediate upgrade of the package dependencies is not feasible due to release freezes or change-management policies, temporary mitigation can be implemented via downstream Python scripts. Administrators can write an initialization script that runs during server startup, programmatically overriding the schema boundaries at runtime. The following monkey patch can be integrated into your site's custom policy package inside an __init__.py file to apply boundaries dynamically:
from plone.app.dexterity.behaviors.metadata import IBasic
# Dynamic hotfix to restrict lengths at the schema layer
IBasic["title"].max_length = 1024
IBasic["description"].max_length = 10000Additionally, security teams should configure Web Application Firewall (WAF) rules to inspect incoming multipart form submissions and block requests containing abnormally large filenames or form inputs exceeding several kilobytes in length. Security teams can also audit the Zope Object Database programmatically to identify and truncate any pre-existing oversized fields that could trigger DoS conditions during catalog re-indexing.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
plone.app.dexterity Plone | < 3.2.3 | 3.2.3 |
plone.app.dexterity Plone | >= 4.0.0, < 4.1.3 | 4.1.3 |
plone.app.dexterity Plone | = 5.0.0 | 5.0.1 |
plone.app.contenttypes Plone | < 3.0.12 | 3.0.12 |
plone.app.contenttypes Plone | >= 4.0.0, < 4.0.10 | 4.0.10 |
plone.app.contenttypes Plone | = 5.0.0 | 5.0.1 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-400 |
| Attack Vector | Network (AV:N) |
| CVSS Base Score | 6.5 |
| EPSS Score | 0.00762 |
| EPSS Percentile | 53.91% |
| Exploit Status | poc |
| CISA KEV Status | Not Listed |
The software does not properly control the allocation and maintenance of a limited resource, thereby enabling an actor to influence the amount of resources consumed in a manner that degrades system performance.
An uncontrolled resource consumption vulnerability in plone.app.contenttypes allows authenticated users to trigger application-level denial of service via oversized filename metadata in file uploads.
An unauthenticated remote SQL injection vulnerability exists in multiple API list endpoints of ReactPress prior to version 3.7.0. The vulnerability stems from unsafe construction of TypeORM QueryBuilder conditions, where untrusted HTTP query parameter keys are interpolated directly into SQL statements as identifiers without sanitization or validation.
CVE-2026-56669 is a high-severity vulnerability in the Elysia web framework (ElysiaJS) that combines Inefficient Algorithmic Complexity (CWE-407) and an Interpretation Conflict (CWE-436). It allows remote, unauthenticated attackers to cause a complete Denial of Service (DoS) via CPU resource exhaustion using specially crafted multipart or urlencoded payloads.
Prior to version 1.7.20, the default-open WebSocket `/subscribe` endpoint in klever-go was vulnerable to remote resource exhaustion. Unauthenticated, remote attackers could crash validator and node processes by exploiting unbounded frame reads, uncapped concurrent connections, unrestricted memory allocation for subscription address keys, and a permanent memory leak in subscription map tracking on client disconnects.
A critical incorrect authorization vulnerability (CWE-863) exists in the Go implementation of the Klever blockchain protocol (klever-go) prior to version 1.7.20. The vulnerability allows an attacker to completely replace a target account's permission set by manipulating the RecipientAddr parameter in a VM built-in function, leading to total account takeover.
A Cross-Site Request Forgery (CSRF) vulnerability in REDAXO CMS prior to version 5.21.2 allows unauthenticated remote attackers to trigger unauthorized package updates by exploiting an insecure default configuration in the base API class.