Description
django CMS is an easy-to-use and developer-friendly enterprise content management system powered by Django. Prior to 5.0.8, the move_plugin endpoint in cms/admin/placeholderadmin.py accepts an attacker-controlled plugin_parent value without rejecting a plugin’s own identifier or a descendant identifier. A staff user with plugin-change permission under CMS_PERMISSION can create a parent_id cycle in the plugin tree. The _get_descendants_cte and _get_ancestors_cte queries in cms/models/pluginmodel.py have no cycle guard, so get_descendants() and later rendering, copy, or delete operations can recurse indefinitely or reach a database recursion limit, corrupting the tree and consuming request workers. This issue is fixed in versions 5.0.8.
Published: 2026-08-20
Score: 7.1 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The move_plugin endpoint in django CMS accepts an attacker‑controlled plugin_parent value without rejecting a self‑reference or descendant reference, allowing a staff user with plugin‑change permission to create a cycle in the plugin tree. Subsequent calls to get_descendants() during rendering, copying, or deletion recurse without a guard, causing infinite recursion or a database recursion limit. The corrupted tree and exhausted request workers result in a denial of service.

Affected Systems

All installations of django CMS prior to version 5.0.8 are affected. Any instance where a staff user has the CMS_PERMISSION role and plugin‑change rights can exploit the flaw; the issue does not apply to later releases or to environments lacking the relevant permission set.

Risk and Exploitability

The CVSS score of 7.1 indicates a medium severity risk. EPSS is not available, and the vulnerability is not listed in CISA’s KEV catalog. An attacker must have staff‑level CMS access and an ability to invoke the move_plugin endpoint to craft a cyclic relationship. Once triggered, the resulting recursion can overload application workers and degrade service availability. No public exploits are documented, but the high resource‑consumption potential warrants prompt remediation.

Generated by OpenCVE AI on August 21, 2026 at 01:41 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade django CMS to version 5.0.8 or later.
  • Inspect the existing plugin hierarchy and repair any detected cycles to prevent accidental recursion.
  • Limit CMS_PERMISSION and the plugin‑change privilege to only trusted staff users who legitimately need to modify plugin locations.

Generated by OpenCVE AI on August 21, 2026 at 01:41 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-8jj7-4v57-frf5 django CMS: Plugin move endpoint allows cyclic reparenting (DoS)
History

Thu, 20 Aug 2026 19:45:00 +0000

Type Values Removed Values Added
First Time appeared Django-cms
Django-cms django Cms
Vendors & Products Django-cms
Django-cms django Cms

Thu, 20 Aug 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Thu, 20 Aug 2026 18:15:00 +0000

Type Values Removed Values Added
Description django CMS is an easy-to-use and developer-friendly enterprise content management system powered by Django. Prior to 5.0.8, the move_plugin endpoint in cms/admin/placeholderadmin.py accepts an attacker-controlled plugin_parent value without rejecting a plugin’s own identifier or a descendant identifier. A staff user with plugin-change permission under CMS_PERMISSION can create a parent_id cycle in the plugin tree. The _get_descendants_cte and _get_ancestors_cte queries in cms/models/pluginmodel.py have no cycle guard, so get_descendants() and later rendering, copy, or delete operations can recurse indefinitely or reach a database recursion limit, corrupting the tree and consuming request workers. This issue is fixed in versions 5.0.8.
Title django CMS: Plugin move endpoint allows cyclic reparenting (DoS)
Weaknesses CWE-674
CWE-835
References
Metrics cvssV3_1

{'score': 7.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H'}


Subscriptions

Django-cms Django Cms
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-20T18:47:19.789Z

Reserved: 2026-06-15T20:07:02.184Z

Link: CVE-2026-54623

cve-icon Vulnrichment

Updated: 2026-08-20T18:46:04.145Z

cve-icon NVD

Status : Received

Published: 2026-08-20T18:16:28.013

Modified: 2026-08-20T19:16:55.480

Link: CVE-2026-54623

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-21T01:45:08Z

Weaknesses
  • CWE-674

    Uncontrolled Recursion

  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')