Description
django CMS is a content management system powered by Django. Prior to 5.0.8 and in 5.1.0a1, the django CMS page cache in cms/cache/page.py ignores request headers declared by plugins through get_vary_cache_on(). The _page_cache_key function includes the cache prefix, site, language, path, and timezone but not the declared header values. Although set_page_cache adds those names to the response Vary header, get_page_cache retrieves the first stored variant under the same header-agnostic key. When CMS_PAGE_CACHE is enabled and a plugin varies content on a header such as Country-Code, one visitor can receive another visitor’s request-specific content, and an unauthenticated attacker can prime the cache with attacker-chosen content. This issue is fixed in versions 5.0.8 and 5.1.0.
Published: 2026-08-20
Score: 4.8 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability occurs because the page cache in django CMS ignores plugin‑declared Vary headers. A plugin can advertise that it varies content based on a request header such as Country-Code, but the cache key does not incorporate those header values. As a result, an unauthenticated attacker can prime the cache with attacker‑chosen content and cause other visitors to receive this content. This cache poisoning can lead to information disclosure or display of content that is meant for a different user. The weakness is reflected by CWE‑349 (Untrusted Data Remapping) and CWE‑524 (Large Deviation from the Expected Behavior). The primary impact is to all visitors who hit a cached page that varies by header, allowing an attacker to inject a variant of that page into the cache.

Affected Systems

The affected product is django‑CMS (django‑cms). Versions prior to 5.0.8 and the 5.1.0a1 release are vulnerable. The issue is fixed in 5.0.8 and 5.1.0. Users who have CMS_PAGE_CACHE enabled and any plugin that uses get_vary_cache_on() are the ones impacted.

Risk and Exploitability

The CVSS score of 4.8 indicates moderate severity. EPSS is not available, and the vulnerability is not listed in CISA's KEV catalog. The attack vector is a simple HTTP request to a cached page, requiring no authentication. Once the vulnerability is exploited, a single unauthenticated attacker can poison the cache and cause other users to see attacker‑chosen content, which is a significant privacy and integrity risk.

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 newer, which includes a fixed cache key that incorporates all vary header names.
  • If an upgrade is not immediately possible, disable CMS_PAGE_CACHE until a patched version is deployed.
  • After disabling the cache or upgrading, review any plugins that declare Vary headers and either remove the declaration or confirm that they are compatible with the patched cache logic.

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-fwjf-m4qw-9f2x django CMS: Page cache ignores plugin-declared Vary headers (disclosure & poisoning)
History

Thu, 20 Aug 2026 21:15: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 20: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 a content management system powered by Django. Prior to 5.0.8 and in 5.1.0a1, the django CMS page cache in cms/cache/page.py ignores request headers declared by plugins through get_vary_cache_on(). The _page_cache_key function includes the cache prefix, site, language, path, and timezone but not the declared header values. Although set_page_cache adds those names to the response Vary header, get_page_cache retrieves the first stored variant under the same header-agnostic key. When CMS_PAGE_CACHE is enabled and a plugin varies content on a header such as Country-Code, one visitor can receive another visitor’s request-specific content, and an unauthenticated attacker can prime the cache with attacker-chosen content. This issue is fixed in versions 5.0.8 and 5.1.0.
Title django CMS: Page cache ignores plugin-declared Vary headers (disclosure & poisoning)
Weaknesses CWE-349
CWE-524
References
Metrics cvssV3_1

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


Subscriptions

Django-cms Django Cms
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-20T19:45:17.403Z

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

Link: CVE-2026-54625

cve-icon Vulnrichment

Updated: 2026-08-20T19:45:11.491Z

cve-icon NVD

Status : Received

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

Modified: 2026-08-20T20:17:35.133

Link: CVE-2026-54625

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

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

Weaknesses
  • CWE-349

    Acceptance of Extraneous Untrusted Data With Trusted Data

  • CWE-524

    Use of Cache Containing Sensitive Information