Skip to main content

django-page-cms EUVDEUVD-2026-82616

| CVE-2026-93456 HIGH
Cross-Site Request Forgery (CSRF) (CWE-352)
2026-09-18 VulnCheck GHSA-5j3h-q5f7-g2vq
8.4
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Host malicious page with forged admin request
  2. Delivery
    Lure signed-in editor to visit
  3. Exploit
    Browser auto-submits to CSRF-exempt mutation view
  4. Execution
    Store unescaped page content
  5. Impact
    Stored XSS executes in all visitors' browsers

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V3 - Web Frontend Security Anti-CSRF tokens, SameSite cookies
MITRE ATT&CK

1 technique across 1 tactic: Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires (1) a target running django-page-cms at or below 2.0.13 with the five CSRF-exempt admin mutation views in pages/admin/views.py, and (2) a user with editor/admin privileges who is currently authenticated to the CMS and who is tricked into visiting attacker-controlled content (UI:P). The attacker themselves needs no account (PR:N), but cannot succeed without the authenticated victim's browser and their active session. Limiting factors: the social-engineering/user-interaction requirement, the need for the victim to hold content-editing rights, and reliance on the browser sending the session cookie cross-site (standard SameSite cookie policies on the session cookie could blunt the CSRF). Stored XSS payload only fires for visitors after a successful forged mutation.

Impact

This is a genuine but conditional risk, not a drop-everything emergency. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:P) correctly models a CSRF flaw: the attacker is unauthenticated (PR:N) but success depends on a signed-in editor being lured into visiting a malicious page (UI:P), which meaningfully limits automatability and scale. There is no EPSS score, no CISA KEV listing, and no public exploit code referenced - only the VulnCheck advisory, the source lines, and GitHub issue #244 - so exploitation status is 'no public exploit identified at time of analysis.' The vendor's 8.4 (HIGH) is driven largely by VI:H and SI:H (integrity of page content plus stored XSS to visitors); I consider VI:H/SI:H aggressive for a socially-engineered, victim-gated CSRF-to-stored-XSS chain and assess it closer to a 3.1 6.1 (S:C/C:L/I:L). No signals conflict outright, but the headline severity overstates real-world urgency because exploitation requires an authenticated editor to interact with attacker content. No fix version is stated in the input, which is a gap for remediation planning.

Exploit ScenarioDerived

An attacker crafts a web page containing a hidden auto-submitting form (or image/fetch) targeting one of the five CSRF-exempt admin mutation endpoints in pages/admin/views.py, then lures a signed-in django-page-cms editor to visit it. The editor's authenticated browser silently submits the forged request, storing unescaped HTML that becomes persistent XSS executed in every visitor's browser. No public proof-of-concept is referenced; exploitation relies on social engineering (UI:P) rather than an automated remote exploit.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
1 public PoC No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 18, 2026

Forged content modification in django-page-cms through 2.0.13 lets unauthenticated remote attackers exploit five CSRF-exempt admin mutation views in pages/admin/views.py to store unescaped page content that then renders to every site visitor as stored cross-site scripting. The attack is unauthenticated from the attacker's side (CVSS vectors list PR:N) but requires user interaction: an authenticated editor or admin must be lured to attacker-controlled HTML while holding an active CMS session (UI:P), so this is a genuine but conditional risk rather than a drop-everything emergency. No public exploit code and no confirmed active exploitation have been identified at time of analysis, and the secondary effects are bounded - the forged mutation only persists once a privileged victim's browser has sent the request successfully.

RemediationAI

No vendor-released patch identified at time of analysis: the available references point to the upstream GitHub issue (https://github.com/batiste/django-page-cms/issues/244) and commit-pinned source locations rather than a tagged fixed release, so a patched version number cannot be confirmed and must be verified with the maintainer before claiming resolution. Until a fix ships, apply targeted compensating controls: remove the CSRF exemption from the five mutation views in pages/admin/views.py so Django's CsrfViewMiddleware validates tokens again, and confirm affected forms emit {% csrf_token %} - the trade-off is that any integration or API caller posting to those views without a token will start receiving 403 responses. Set SESSION_COOKIE_SAMESITE to 'Lax' (or 'Strict') so the session cookie is not attached to cross-site mutation requests; 'Strict' is stronger but can break inbound links and some external login or redirect flows, while 'Lax' still blocks the cross-site POST pattern this issue relies on. Independently harden the second stage by escaping or sanitizing placeholder content (Django autoescaping, or an allow-list sanitizer such as bleach/nh3) before it is rendered, accepting that any deployment intentionally storing raw HTML in placeholders will need to re-allow specific tags. Restrict access to the CMS admin surface by network or IP, and require re-authentication for content mutations, to shrink the window in which a hijacked editor session is useful. Track the upstream issue and the VulnCheck advisory (https://www.vulncheck.com/advisories/django-page-cms-through-2.0.13-csrf-via-admin-mutation-views) for the release of an official fix, and monitor server logs for anomalous admin mutation requests originating from unexpected referrers.

Affected VersionsENISA

django-page-cms 0 ≤2.0.13

Affected Packages

euvd django_page_cms no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root weakness is CWE-352 (Cross-Site Request Forgery): django-page-cms ships five admin mutation views in pages/admin/views.py (referenced lines 51-53 of commit bc4cbe6c187d2d4573289c5695ce8dec0556994d) that are exempted from Django's CSRF protection, meaning the framework's CsrfViewMiddleware does not validate a per-session token on those state-changing requests. Django normally defends mutation endpoints by requiring a csrfmiddlewaretoken tied to the session cookie; csrf_exempt-style exemptions remove that check, so a third-party page can silently POST a content-modifying request that the victim's browser authenticates with the CMS session cookie. The second stage is a stored XSS chain: the placeholder rendering path (pages/placeholders.py lines 238-241 of the same commit) writes the attacker-submitted content without escaping, so the injected markup is served to all visitors rather than only to the editor who submitted it. The CPE cpe:2.3:a:batiste:django-page-cms:*:*:*:*:*:*:*:* identifies the Python/Django package maintained under the batiste GitHub repository, and the vulnerability class listed by the reporter as CSRF-then-XSS is consistent with the independent assessment's scope-changed vector (S:C, C:L/I:L/A:N), which reflects limited confidentiality impact and integrity impact confined to the CMS content and its visitors.

Know when Django gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 8.4 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:H/VA:N/SC:L/SI:H/SA:N
vuln.today AI 6.1 MEDIUM

CSRF attacker is unauthenticated (PR:N) but needs an authenticated editor's interaction (UI:R); stored XSS runs in visitors' browsers so scope changes (S:C) with low confidentiality/integrity impact.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
High
Subsequent system: Availability
None

DescriptionCVE.org

django-page-cms through 2.0.13 exempts five admin mutation views from CSRF protection in pages/admin/views.py, allowing attackers to forge requests that modify page content. Signed-in editors visiting a malicious page can be tricked into storing unescaped content that renders to all visitors, enabling stored cross-site scripting attacks.

Technical POC Analysis

Evidence note: the only supplied source is a threat-intelligence digest gist that contains a single line about CVE-2026-93456.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Latest POC

1 public PoC link from github

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

django-page-cms through 2.0.13 contains a HIGH-severity stored cross-site scripting issue affecting every site visitor, driven by forged admin content changes when a privileged CMS editor or admin with an active session is lured to attacker-controlled HTML. The attacker side is unauthenticated per CVSS PR:N, though successful exploitation requires privileged user interaction; no public exploit identified at time of analysis and no vendor-released patch identified at time of analysis. Leadership should care because public-facing content integrity and visitor trust are at risk, and the absence of a vendor fix means mitigation depends on access controls, monitoring, and virtual patching.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include disabling or removing django-page-cms through 2.0.13 where feasible, restricting access to pages/admin/views.py admin mutation endpoints to trusted networks, forcing re-authentication for privileged CMS editors and admins, re-enabling CSRF token validation or adding equivalent protections for admin mutation views, enforcing strict output encoding and Content Security Policy, deploying WAF rules to block anomalous admin POSTs, and monitoring page content changes and admin sessions for indicators of forged content storage.

Threat Intelligence Overview

EPSS Score
0.2%
Top 95% exploitable
Prevalence
Low
niche open-source Django CMS, limited enterprise footprint
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment CIRCL GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

62
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +42
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.

Related Vulnerabilities in django-page-cms Admin View Authorization Flaws

View all 2

More in Django

View all
CVE-2021-23336 MEDIUM POC
5.9 Feb 15

The package python/cpython from 0 and before 3.6.13, from 3.7.0 and before 3.7.10, from 3.8.0 and before 3.8.8, from 3.9

CVE-2017-12794 MEDIUM POC
6.1 Sep 07

In Django 1.10.x before 1.10.8 and 1.11.x before 1.11.5, HTML autoescaping was disabled in a portion of the template for

CVE-2022-34265 CRITICAL POC
9.8 Jul 04

An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. Rated critical severity (CVSS 9.8), this vulne

CVE-2021-35042 CRITICAL POC
9.8 Jul 02

Django 3.1.x before 3.1.13 and 3.2.x before 3.2.5 allows QuerySet.order_by SQL injection if order_by is untrusted input

CVE-2019-19844 CRITICAL POC
9.8 Dec 18

Django before 1.11.27, 2.x before 2.2.9, and 3.x before 3.0.1 allows account takeover. Rated critical severity (CVSS 9.8

CVE-2026-61594 CRITICAL POC
9.1 Sep 16

An authentication/authorization bypass in the djust Python live-view framework (versions prior to 1.0.7) lets unauthenti

CVE-2026-61599 HIGH POC
8.8 Sep 16

Unauthenticated arbitrary Python module import in djust before 1.0.7 lets any client that can reach the WebSocket or SSE

CVE-2020-9402 HIGH POC
8.8 Mar 05

Django 1.11 before 1.11.29, 2.2 before 2.2.11, and 3.0 before 3.0.4 allows SQL Injection if untrusted data is used as a

CVE-2016-6186 MEDIUM POC
6.1 Aug 05

Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/j

CVE-2026-61593 HIGH POC
8.1 Sep 16

Cross-site request forgery in djust's Server-Sent-Events transport affects all versions prior to 1.0.7 and allows a cros

CVE-2026-61590 HIGH POC
7.4 Sep 16

Unauthenticated remote attackers can read live Django view and session state and invoke server-side handlers through dju

CVE-2026-61598 HIGH POC
7.1 Sep 16

Mass assignment in djust, a Django library providing Phoenix LiveView-style reactive server-side rendering, allows any c

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy