☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Django logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N 🐛 CWE-285
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-54624

CVE-2026-54624 Vulnerability in Django
📅 PUBLISHED: 2026-08-20 00:00 UTC 🔄 UPDATED: 2026-08-26 10:10 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.24%
👁️
0.24% probability
6.1× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1592
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: USA License: Open Source
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 6.5
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: H Confidentiality High
I: N Integrity None
A: N Availability None
6.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-54624 is an authorization bypass vulnerability in django CMS affecting versions prior to 5.0.8. An authenticated staff-level account can access the structure view of a restricted PageContent object without passing the user_can_view_page() authorization check, leaking sensitive plugin content (link names, URLs, and text snippets) that should be hidden under view restrictions. The vulnerability is network-exploitable with low attack complexity and requires only low-privilege staff credentials, carrying a CVSS base score of 6.5 with a High confidentiality impact.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

Vulnerability Mechanism

The flaw resides in the render_object_structure function within cms/views.py. This endpoint renders cms/toolbar/structure.html for a PageContent object. The critical omission is the absence of a call to user_can_view_page() before rendering the template. In django CMS versions prior to 5.0.8, the authorization check that normally gates access to page content is bypassed specifically for the structure rendering path.

Conditions for Exploitation

The vulnerability materializes when both of the following conditions are met:

  1. CMS_PERMISSION is enabled — This Django setting activates the permission framework that governs per-page access control.
  2. The PageContent object has view restrictions configured, OR CMS_PUBLIC_FOR is set to staff — These mechanisms restrict page visibility to authorized users or staff members.

Under these configurations, any authenticated staff account — regardless of whether that account has been granted explicit view permission for the specific restricted page — can request the page's structure view.

Information Leakage Scope

The security impact stems from the content rendered by structure.html. Rather than outputting only the structural skeleton of the page (i.e., the layout hierarchy of placeholders and plugins), the template exposes each plugin's get_short_description() return value. These short descriptions frequently contain:

  • Human-readable link anchor text (link names)
  • Underlying destination URLs
  • Text snippets extracted from the plugin's content

This transforms the vulnerability from a purely theoretical authorization bypass into a concrete confidentiality breach, as the leaked content may include sensitive information that was deliberately withheld from general staff visibility via view restrictions.

Attack Surface

The affected endpoint is reachable over HTTP/HTTPS by any authenticated user with staff-level privileges. No special role such as a dedicated "content manager" or "page editor" is required — merely is_staff = True on the user account. The attack complexity is Low, requiring no user interaction and no special preconditions beyond possessing valid staff credentials.


Exploitation Scenarios

Scenario 1 — Internal Staff Intelligence Gathering

  1. Reconnaissance: An attacker with staff credentials enumerates the django CMS instance to identify pages with restricted visibility. This can be accomplished by observing the page tree in the admin interface, where restricted pages are typically marked, or by querying the CMS's internal API endpoints.
  2. Trigger: The attacker constructs a direct request to the structure view for a target restricted page. The request path targets the render_object_structure handler with the specific PageContent object ID of the restricted page. Since djang CMS uses predictable object identifiers, enumerating sequential IDs is trivial.
  3. Execution: No crafted payload is required — the authorization bypass is inherent. A simple HTTP GET request to the structure endpoint for the restricted page triggers the template render without the user_can_view_page() gate. The server responds with the rendered structure.html, containing plugin short descriptions.
  4. Post-Exploitation: The attacker parses the response to extract link names, URLs, and text snippets. This data can reveal internal network paths, project names, document links, or proprietary information that was meant to be staff-restricted. The collected intelligence can then be used for further targeted attacks against internal services or for social engineering.

Scenario 2 — Multi-Tenant CMS Data Leakage

In deployments where a single django CMS instance hosts multiple organizational units with separate page access policies, a staff user from one unit can access restricted content belonging to another unit. This is particularly damaging because the staff user is not "external" — they have legitimate credentials, making the breach difficult to distinguish from regular staff-page interactions without adequate logging.

Note on PoC Availability: No public proof-of-concept or exploit code has been disclosed at the time of this report. The attack chain described above is inferred from the NVD description, the affected function name, and the behavior of the rendering template. The mechanism is straightforward and requires no complex payload construction, suggesting that weaponization would be trivial once an attacker identifies the affected endpoint pattern.


Impact Assessment

Business Impact

The confidentiality breach affects organizations that rely on django CMS's permission system to segment content visibility. Typical scenarios include:

  • Intranet portals where staff-only pages contain internal project details, pricing information, or HR content
  • Partner or reseller portals where page-level restrictions control what different staff tiers can access
  • Regulated environments (financial services, healthcare) where access to specific content must be strictly controlled

Technical Impact

  • Confidentiality Impact: High — plugin short descriptions leak link names, URLs, and text snippets
  • Integrity Impact: None — the attacker cannot modify content or page structure
  • Availability Impact: None — the vulnerability does not affect system uptime

CVSS Rationale

  • Attack Vector: Network — the structure view is accessible over HTTP/HTTPS
  • Attack Complexity: Low — no special conditions or user interaction required
  • Privileges Required: Low — only staff authentication
  • Scope: Unchanged — the impact is confined to the vulnerable component
  • Base Score: 6.5 (Medium)

Blast Radius

Any django CMS deployment running a version prior to 5.0.8 with CMS_PERMISSION enabled and at least one page with view restrictions or CMS_PUBLIC_FOR = "staff" is potentially affected. The vulnerability is silent — it produces no error, requires no unusual request pattern, and leaves no trace in standard CMS audit logs unless custom logging is implemented for the structure view.


Detection Guidance

Sigma Rule

title: Django CMS Structure View Access Without User Permission Check
id: 3d4f7c9e-5a2b-4c8d-9e1f-6a3b8c2d5e7a
status: experimental
description: Detects requests to the Django CMS structure view endpoint, which may indicate exploitation of CVE-2026-54624 (authorization bypass in render_object_structure).
logsource:
  category: webserver
  product: apache
  definition: 'Requires web server access logs for Django CMS instances with CMS_PERMISSION enabled.'
detection:
  selection:
    cs-method: GET
    c-uri|contains:
      - '/structure/'
      - '?structure'
  filter_known_admin:
    c-uri|contains:
      - '/admin/'
  condition: selection and not filter_known_admin
  timeframe: 5m
level: medium
falsepositives:
  - Legitimate content managers using the structure view for authorized pages
  - CMS editors with proper page-level permissions
fields:
  - c-uri
  - cs-username
  - sc-status
  - time
tags:
  - attack.t1592
  - attack.t1190
  - cve.2026.54624

YARA Rule

rule django_cms_structure_bypass_cve_2026_54624
{
    meta:
        author = "Valters IT Security Research"
        description = "Detects HTTP responses containing distinctive Django CMS structure template markers combined with plugin short description content."
        date = "2026-01-15"
        cve = "CVE-2026-54624"
        severity = "high"
        reference = "NVD CVE-2026-54624"
    strings:
        $structure_div = "cms-structure" ascii wide
        $plugin_desc = "plugin-description" ascii wide
        $structure_html = "structure.html" ascii wide
        $data_plugin = "data-plugin" ascii wide
        $render_obj = "render_object_structure" ascii wide
        $no_perm = "CMS_PERMISSION" ascii wide
    condition:
        (uint16(0) == 0x4D5A or filesize > 100KB) and
        1 of ($structure*) and (
            $plugin_desc or
            $data_plugin
        )
}

Suricata IDS Rule

alert http any any -> $HOME_NET any (
    msg:"CVE-2026-54624 Django CMS Structure View Authorization Bypass Attempt";
    flow:established,to_server;
    http.method;
    content:"GET";
    http.uri;
    content:"/structure/";
    distance:0;
    http.uri;
    content:"!";
    pcre:"/^\/[^\/]+\/structure\//i";
    sid:2910246001;
    rev:1;
    metadata:attack_target_web_server, deployment_internet, signature_severity_high, created_at_2026_01_15, cve_2026_54624;
    reference:url,nvd.nist.gov/vuln/detail/CVE-2026-54624;
    classtype:attempted-user;
)

Elastic Detection

sequence by source.ip with maxspan=5m
  [ network where event.category == "network" and
    network.protocol == "http" and
    http.request.method == "GET" and
    url.path like "*structure*" ]
  [ authentication where event.action == "authentication_success" and
    user.id != null and
    outcome.result == "success" ]

Splunk SPL Query

index=web* OR index=proxy* sourcetype=iis OR sourcetype=access_combined
| search uri="*/structure/*"
| search NOT uri="/admin/*"
| eval cve_trigger=if(match(uri, "^\S+/structure/"), "CVE-2026-54624-POTENTIAL", "normal")
| where cve_trigger="CVE-2026-54624-POTENTIAL"
| stats count by src_ip, uri, user, method, status
| sort - count
| table _time, src_ip, user, uri, method, status, count

Wazuh OSSEC Rule

<group name="web,django_cms,cve_2026_54624,">
  <rule id="291024" level="10" frequency="3" timeframe="120">
    <if_sid>31122</if_sid>
    <url>/structure/</url>
    <description>CVE-2026-54624: Django CMS structure view requested - possible authorization bypass</description>
    <group>web_application_attack</group>
    <mitre>
      <id>T1190</id>
    </mitre>
    <mitre>
      <id>T1592</id>
    </mitre>
  </rule>
</group>

Mitigation & Patch Guidance

Patch Confidence Assessment: The patch claim is rated 2/4 (CLAIMED) — the fix is documented in OSV trackers indicating that versions 5.0.8 and later resolve the vulnerability, but this has not been independently verified beyond the single source. Organizations should validate the patch in a staging environment before production deployment.

Immediate Mitigations (until patching)

  1. Disable CMS_PERMISSION temporarily — if permissible within your security posture, disabling this setting eliminates the vulnerable configuration scope. Caution: This removes all permission-based restrictions and may expose content more broadly, so weigh this against your risk tolerance.
  2. Audit staff accounts — review all accounts with is_staff = True and revoke staff status from any accounts that do not require CMS back-end access.
  3. Restrict network access — place the CMS admin backend (serving the structure view) behind a VPN.
  4. Monitor the structure endpoint — implement the detection rules above to alert on anomalous structure view requests.

Patch and Upgrade Steps

  1. Upgrade to django CMS 5.0.8 or later, where render_object_structure now invokes user_can_view_page() before rendering the template.
  2. Test the upgrade in staging, verifying that legitimate content managers can still access structure views for pages they have permission to edit.
  3. Confirm post-patch behavior by attempting to access a restricted page's structure view with a staff account that lacks view permission — the request should now be denied.
  4. Check release notes for any breaking changes introduced between your current version and 5.0.8.

Long-Term Hardening

  1. Enforce the principle of least privilege: Only grant staff status to accounts that require it — consider using Django's built-in groups for fine-grained permissions.
  2. Enable comprehensive access logging: Log all access to structure views with user identity and page identifiers to ensure auditability.
  3. Introduce a WAF rule to block requests matching the structure view URL pattern for non-editor roles.
  4. Track CVE publications for django CMS and subscribe to the project's security announcement mailing list.
  5. Conduct quarterly privilege reviews to prune dormant staff accounts.

References

  1. NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-54624
  2. OSV Advisory (Patch Source): https://osv.dev/vulnerability/CVE-2026-54624
  3. django CMS Official Site: https://www.django-cms.org/
  4. django CMS GitHub Repository (Release 5.0.8): https://github.com/django-cms/django-cms/releases/tag/5.0.8
  5. CWE-285 (Improper Authorization): https://cwe.mitre.org/data/definitions/285.html

Threat Actor Activity: No known threat actor campaigns have been attributed to this CVE at the time of writing. No evidence of exploitation in the wild has been reported. The vulnerability's low complexity and the fact that it only requires staff credentials suggest that it may be targeted by internal actors or low-sophistication external attackers who have obtained staff credentials through other means (e.g., phishing, credential stuffing).

EPSS: Not yet scored by FIRST.org — no probability-of-exploitation metric is available.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-54624/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.