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.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
django-cms django-cms
< 5.0.8affected>= 5.1.0a1, < 5.1.0affected
References
- https://github.com/django-cms/django-cms/security/advisories/GHSA-fwjf-m4qw-9f2x ↗
- https://github.com/django-cms/django-cms/pull/8646 ↗
- https://github.com/django-cms/django-cms/pull/8647 ↗
- https://github.com/django-cms/django-cms/commit/8758714b865ffa79c6bcd0e5c503958ea48885aa ↗
- https://github.com/django-cms/django-cms/commit/d5dc1efa18d157445491c4b12c2dd1efd56f439f ↗
- https://github.com/django-cms/django-cms/releases/tag/5.0.8 ↗
- https://github.com/django-cms/django-cms/releases/tag/5.1.0 ↗