Skip to main content

ApostropheCMS CVE-2026-63669

| EUVDEUVD-2026-60438 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-08-17 GitHub_M GHSA-wr5r-wqp2-x4fh
6.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate to CMS as editor/contributor
  2. Delivery
    Identify target restricted-parent page and owned source page
  3. Exploit
    Send crafted PATCH to /api/v1/@apostrophecms/page/:id with _targetId and _position
  4. Execution
    move() skips _create permission check due to boolean inversion
  5. Persist
    Page inserted under restricted parent
  6. Impact
    nudgeNewPeers() updateMany re-ranks admin-only sibling pages

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
Exploitation Conditions

Exploitation requires an authenticated CMS session with at minimum the editor or contributor role - unauthenticated access is not sufficient (CVSS PR:L confirms this). The attacker must control at least one existing page within the CMS (any page they hold edit rights over) to serve as the page being moved. A restricted destination parent must exist in the page tree - typically a page type configured with editRole: 'admin' or publishRole: 'admin', which is a common pattern for protected site sections. The vulnerable PATCH /api/v1/@apostrophecms/page/:id endpoint must be reachable; it is enabled by default in all ApostropheCMS deployments. No non-default configuration is required for exploitation. Limiting factors: the attacker must already be a trusted CMS user (insider or compromised account), cannot escalate to code execution or read protected content (C:N in CVSS), and the impact is confined to page hierarchy integrity and sibling document re-ranking within the same CMS instance.

Impact

The CVSS 3.1 score of 6.5 (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N) accurately characterizes the attack profile: network-reachable REST endpoint, low complexity, no user interaction, but a mandatory low-privilege authenticated session. The high integrity sub-score is justified by the ability to both restructure the page hierarchy into restricted areas and trigger unchecked re-ranking of admin-controlled documents. Real-world risk is meaningfully bounded by the insider-only attack surface - an external unauthenticated attacker cannot exploit this without first obtaining CMS editor or contributor credentials. EPSS data was not included in the source intelligence, so exploitation probability cannot be quantified numerically; based on the KEV absence and no public PoC, opportunistic mass exploitation is unlikely. The vulnerability is not a high-urgency emergency for well-access-controlled deployments, but organizations where editor/contributor accounts are broadly distributed (e.g., multi-author publishing sites) should treat this as a meaningful privilege escalation risk and prioritize upgrading to 4.32.0.

Exploit ScenarioDerived

An editor-role user authenticates to the CMS, identifies a public page they have edit rights over and a restricted admin-only parent page (such as one declaring editRole: 'admin'), then sends a PATCH request to the page REST update endpoint with _targetId referencing the restricted parent and _position set to a sibling slot. The unpatched move() function skips the destination _create permission check due to the logic inversion and accepts the move; nudgeNewPeers() then issues an unchecked MongoDB updateMany re-ranking all children of the restricted parent - documents the editor cannot directly modify. No public proof-of-concept code exists, but the REST parameters involved (_targetId, _position) are part of normal ApostropheCMS API usage and require no reverse engineering.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 17, 2026

Integrity bypass in ApostropheCMS page management allows authenticated low-privileged editors to move pages into restricted subtrees they have no create rights over, and indirectly re-rank admin-only sibling pages via an unchecked database updateMany call. All deployments running ApostropheCMS prior to 4.32.0 are affected; the flaw exists in the REST page update endpoint and requires no special configuration to reach. No public exploit code exists and the vulnerability is not listed in CISA KEV, but the attack path through documented REST parameters is straightforward for any CMS insider.

RemediationAI

Upgrade ApostropheCMS to version 4.32.0 or later, which restores destination-parent authorization enforcement in the page move() operation. The fix is confirmed in commit d50c6ad61b9c1788958752358f1fca714cc8368c (https://github.com/apostrophecms/apostrophe/commit/d50c6ad61b9c1788958752358f1fca714cc8368c) and documented in the security advisory at https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-wr5r-wqp2-x4fh. If immediate upgrade is not feasible, the most targeted compensating control is to audit and minimize editor/contributor role assignments - removing accounts that do not require page-move capabilities - since the vulnerability requires an authenticated session at that privilege level. As a secondary measure, blocking PATCH requests to /api/v1/@apostrophecms/page/:id at the reverse proxy or WAF layer for non-admin sessions will prevent exploitation but will also disable legitimate page-reordering functionality for editors, which is a significant operational trade-off. Neither workaround substitutes for patching.

Affected VersionsENISA

Apostrophe < 4.32.0

Affected Packages

npm apostrophe fix: 4.32.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

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

Technical ContextAI · show details

ApostropheCMS is an open-source Node.js CMS (CPE: cpe:2.3:a:apostrophecms:apostrophe:*:*:*:*:*:*:*:*). The root cause is CWE-639 (Authorization Bypass Through User-Controlled Key): a boolean logic regression in the move() authorization guard inside packages/apostrophe/modules/@apostrophecms/page/index.js. The original intent was to require _create permission on the destination parent for all normal cross-parent moves, with a narrow exception only for restoring pages out of the archive. The regression inverted this guard - the condition (oldParent.type = '@apostrophecms/archive-page' && !parent._edit) meant the check only fired when the source was in the archive, silently removing the check for every ordinary move. The fix negates the condition to !(oldParent.type = '@apostrophecms/archive-page' && parent._edit), restoring the check for all non-archive destinations. A secondary effect is that the nudgeNewPeers() function, called unconditionally after a successful move, performs a MongoDB updateMany to re-rank sibling pages under the new parent - documents the attacker has no direct write permission over - amplifying the integrity impact beyond the moved page itself.

Know when Apostrophecms 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 (GitHub_M) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
vuln.today AI 6.5 MEDIUM

REST API reachable over network with no special conditions; PR:L reflects mandatory editor/contributor authentication; I:H because attacker restructures restricted page hierarchy and triggers unchecked re-ranking of admin-only documents.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
None

Lifecycle Timeline

1
Patch available
Aug 17, 2026 - 21:17 EUVD

DescriptionCVE.org

ApostropheCMS is an open-source Node.js content management system. Prior to 4.32.0, the page module's move() operation fails to enforce the destination parent's _create permission because its oldParent archive condition disables the check for ordinary moves, allowing an authenticated editor or contributor to use _targetId and _position through the page REST update endpoint to move a controlled page into a restricted subtree and make nudgeNewPeers() updateMany re-rank protected sibling pages. This issue is fixed in version 4.32.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 87% exploitable
Prevalence
Low
niche open-source Node.js CMS, limited enterprise adoption
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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 MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2026-63670 MEDIUM POC
6.1 Aug 17

Stored cross-site scripting in ApostropheCMS prior to 2.17.6 enables execution of arbitrary JavaScript in victim browser

CVE-2014-125128 MEDIUM POC
6.1 Sep 08

'sanitize-html' prior to version 1.0.3 is vulnerable to Cross-site Scripting (XSS). Rated medium severity (CVSS 6.1), th

CVE-2019-25225 MEDIUM POC
6.1 Sep 08

`sanitize-html` prior to version 2.0.0-beta is vulnerable to Cross-site Scripting (XSS). Rated medium severity (CVSS 6.1

CVE-2021-25979 CRITICAL
9.8 Nov 08

Apostrophe CMS versions prior to 3.3.1 did not invalidate existing login sessions when disabling a user account or chang

CVE-2026-84371 MEDIUM POC
5.4 Sep 01

Stored XSS in sanitize-html versions 1.9.0 through 2.17.6 allows authenticated low-privileged users to inject executable

CVE-2024-21501 MEDIUM POC
5.3 Feb 24

Versions of the package sanitize-html before 2.12.1 are vulnerable to Information Exposure when used on the backend and

CVE-2021-26540 MEDIUM POC
5.3 Feb 08

Apostrophe Technologies sanitize-html before 2.3.2 does not properly validate the hostnames set by the "allowedIframeHos

CVE-2021-26539 MEDIUM POC
5.3 Feb 08

Apostrophe Technologies sanitize-html before 2.3.1 does not properly handle internationalized domain name (IDN) which co

CVE-2026-53609 CRITICAL
9.1 Jun 12

Prototype pollution in ApostropheCMS versions up to and including 4.30.0 allows an authenticated editor to poison Object

CVE-2026-53608 HIGH
8.7 Jun 12

Stored cross-site scripting in the @apostrophecms/seo plugin (versions ≤1.4.2) allows any user holding the default edito

CVE-2026-35569 HIGH
8.7 Apr 15

Stored cross-site scripting in ApostropheCMS SEO fields permits an authenticated attacker to inject arbitrary JavaScript

CVE-2022-25887 HIGH
7.5 Aug 30

The package sanitize-html before 2.7.1 are vulnerable to Regular Expression Denial of Service (ReDoS) due to insecure gl

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