CVE-2026-54624
Python vulnerability analysis and mitigation

Overview

CVE-2026-54624 is a missing authorization vulnerability in django CMS (also classified as CWE-285 Improper Authorization) that allows any staff user to access the plugin structure of view-restricted pages via the structure-board endpoint. The vulnerability affects django CMS versions prior to 5.0.8 and was published on August 20, 2026. It was originally reported by the security team at the University of Sydney and disclosed via GitHub Security Advisory GHSA-vgxm-h9gx-h9w7. The CVSS v3.1 base score is 6.5 (Medium) (GitHub Advisory, Feedly).

Technical details

The root cause is that render_object_structure in cms/views.py renders cms/toolbar/structure.html for a PageContent object without invoking user_can_view_page(), the authorization check used by the edit and preview endpoints (classified as CWE-862: Missing Authorization and CWE-285: Improper Authorization). While render_object_endpoint (used by edit/preview) routes through render_pagecontent → render_page and calls user_can_view_page(request.user, page) — returning HTTP 404 when access is denied — the structure endpoint performs no equivalent page-level authorization check. The fix, introduced in commit 7642a98, adds a call to user_can_view_page() in render_object_structure and raises Http404 when the check fails, aligning it with the behavior of the other endpoints. This vulnerability only applies when CMS_PERMISSION=True and the page has view restrictions, or when CMS_PUBLIC_FOR='staff' is configured (GitHub Advisory, Fix Commit).

Impact

A staff user (any account with is_staff=True) who lacks view permission on a view-restricted page can retrieve that page's full plugin structure and short descriptions by directly requesting the structure endpoint with the page's content-type ID and object ID. The response exposes plugin get_short_description() values, which can include link names, URLs, and text snippets — meaning actual page content is disclosed, not merely the structural layout. This is a confidentiality-only impact (no integrity or availability impact), scoped to sites using CMS_PERMISSION=True with per-page view restrictions or CMS_PUBLIC_FOR='staff'; sites without these configurations are not affected (GitHub Advisory).

Exploitability

No public exploit code or in-the-wild exploitation has been reported for this vulnerability. The NVD SSVC assessment indicates exploitation is "none" and the vulnerability is not automatable, as it requires a valid staff account. The EPSS score is 0.0, and the vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Exploitation requires an authenticated staff user account, limiting the attack surface to insider threats or compromised staff credentials (Feedly, GitHub Advisory).

Exploitation steps

  1. Obtain staff credentials: Acquire a valid django CMS staff account (is_staff=True) that does not have view permission on the target restricted page. This could be a low-privileged staff account with no specific page permissions assigned.
  2. Identify target page: Enumerate page content-type IDs and object IDs for PageContent objects. The content-type ID for cms.pagecontent can be retrieved from the Django admin or by querying the django_content_type table.
  3. Craft the structure endpoint request: Construct an authenticated HTTP GET request to the structure endpoint URL, e.g., /en/admin/cms/placeholder/render-object-structure/<content_type_id>/<object_id>/, substituting the target page's content-type and object IDs.
  4. Retrieve restricted content: The endpoint returns the rendered cms/toolbar/structure.html page, which includes each plugin's get_short_description() output — exposing link names, URLs, text snippets, and other plugin content from the view-restricted page without triggering a 404 (GitHub Advisory, Fix Commit).

Indicators of compromise

  • Network: Authenticated HTTP GET requests to the structure endpoint (/en/admin/cms/placeholder/render-object-structure/<content_type_id>/<object_id>/) from staff accounts that do not have view permissions on the corresponding pages.
  • Logs: Django access logs showing repeated GET requests to the cms_placeholder_render_object_structure URL pattern by staff users, particularly for page object IDs they are not authorized to view; absence of corresponding 404 responses in pre-patch versions.
  • Application Behavior: Staff users accessing the structure endpoint for pages they are not assigned view permissions on, especially in environments with CMS_PERMISSION=True and per-page view restrictions configured (GitHub Advisory).

Mitigation and workarounds

Upgrade django CMS to version 5.0.8 or later, which enforces user_can_view_page() on the structure endpoint, matching the behavior of the edit and preview endpoints (Release 5.0.8). The fix was merged via pull request #8645 and commit 7642a98. No configuration-based workaround exists other than restricting staff access entirely; the vendor explicitly recommends upgrading as the only effective remediation (GitHub Advisory). Sites not using CMS_PERMISSION=True with per-page view restrictions, or not setting CMS_PUBLIC_FOR='staff', are not affected by this vulnerability.

Community reactions

The vulnerability was reported by the security team at the University of Sydney and credited to researchers Zyy0530, Str1ckl4nd, 7thParkk, and analyst mauriceng98 (GitHub Advisory). The fix was developed and merged by django CMS maintainer fsbraun. No significant broader media coverage or notable community discussion beyond the GitHub advisory and standard vulnerability tracking feeds has been observed.

Additional resources


SourceThis report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-63003MEDIUM6.5
  • Python logoPython
  • django-cms
NoYesAug 20, 2026
CVE-2026-54624MEDIUM6.5
  • Python logoPython
  • django-cms
NoYesAug 20, 2026
CVE-2026-54622MEDIUM6.5
  • Python logoPython
  • django-cms
NoYesAug 20, 2026
CVE-2026-75526MEDIUM4.4
  • Python logoPython
  • django-cms
NoYesAug 20, 2026
CVE-2026-61663MEDIUM4.3
  • Python logoPython
  • django-cms
NoYesAug 20, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management