Skip to main content

ApostropheCMS CVE-2026-113710

| EUVDEUVD-2026-105221 MEDIUM
Improper Restriction of Excessive Authentication Attempts (CWE-307)
2026-10-20 GitHub_M GHSA-653j-g8j7-gh54
5.9
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Obtain valid authenticated session (even guest)
  2. Exploit
    Send repeated PATCH password-change guesses
  3. Execution
    Unlimited attempts bypass absent throttle/lockout
  4. Impact
    Recover current password and seize account

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Brute-force prevention, rate limiting
Exploitation Conditions

The attacker must already hold a valid authenticated ApostropheCMS session of any privilege level (the advisory used a disposable guest session), and the target is specifically the self-service endpoint PATCH /api/v1/@apostrophecms/settings/password, which routes through handlePasswordProtectedSubform → verifyPassword without the login module's checkLoginAttempts/addLoginAttempt controls. No special non-default configuration is required - the missing throttle is present in all versions below 4.33.0. Limiting factors: exploitation is impossible without a pre-existing session (no pre-auth vector), and ultimate success still depends on the entropy of the victim's password, since the flaw removes only rate-limiting, not the password check itself.

Impact

This is a genuine but moderate-priority weakness (CWE-307, improper restriction of excessive authentication attempts), not a drop-everything issue. The supplied CVSS of 5.9 (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N) captures the key constraints: exploitation is network-reachable but gated behind an existing authenticated session and yields success only probabilistically against the target password. No EPSS score was provided and the CVE is NOT in CISA KEV, so there is no evidence of active exploitation; the only exploitation signal is a working local PoC published in the GHSA advisory (curl loop showing five unthrottled 403 responses), i.e. publicly available exploit code exists but not confirmed active exploitation - these are distinct signals and should not be conflated. I partly disagree with the input vector's PR:H: the advisory explicitly used a 'disposable authenticated guest session,' meaning any low-privilege authenticated user suffices, which argues for PR:L rather than PR:H. The C:H/I:H rating reflects that unlimited guessing can eventually disclose the current password and thereby allow a full account takeover. Net: real and worth patching (upgrade to 4.33.0), but its danger is bounded by the need for a pre-existing session and by target password entropy, so it ranks below internet-facing pre-auth flaws.

Exploit ScenarioDerived

An attacker who has obtained a valid ApostropheCMS session (for example a stolen/hijacked session cookie, a shared workstation, or a low-privilege guest account) repeatedly calls the PATCH /api/v1/@apostrophecms/settings/password endpoint, submitting different passwordCurrent guesses. Because this endpoint verifies the password but never consults the login module's failed-attempt counter, throttle, delay, or lockout, the attacker can brute-force the account's current password at full speed and then reset it for durable takeover. A working local PoC demonstrating the missing lockout is published in the GHSA advisory.

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

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

Alert me

AnalysisAIv1 – Oct 20, 2026

Unlimited current-password guessing against ApostropheCMS versions before 4.33.0 lets anyone holding an already-authenticated session - even a disposable low-privilege guest session - grind out a victim's existing password through the self-service endpoint PATCH /api/v1/@apostrophecms/settings/password, because that route verifies the password directly without touching the login module's failed-attempt counter, delay, or lockout. Successful guessing yields full account takeover, so confidentiality and integrity are both rated High while availability is unaffected; the assessed vector is CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N (6.8), stricter on privileges than the vendor's published 5.9/PR:H but agreeing on impact. The attack is not self-starting - no pre-authentication vector exists and success still hinges on victim password entropy - and no public exploit code or active exploitation was identified at time of analysis, though the GHSA advisory itself ships a local PoC curl loop that demonstrates the missing throttle.

RemediationAI

Vendor-released patch: upgrade the apostrophe npm package to version 4.33.0 or later (release tag apostrophe@4.33.0, advisory GHSA-653j-g8j7-gh54); confirm post-upgrade that repeated wrong passwordCurrent submissions to PATCH /api/v1/@apostrophecms/settings/password now produce throttled or lockout responses rather than an immediate uniform 403. If the upgrade cannot be applied promptly, compensating controls are: put a rate limit or WAF rule in front of that specific PATCH path, keyed by session/user rather than source IP (trade-off: legitimate users who mistype several times will be slowed or temporarily blocked, and IP-keyed limits are weak against distributed attackers while breaking shared-NAT offices); alert on bursts of 403 responses whose body is apostrophe:passwordCurrentError from a single session (trade-off: detection only, no prevention, and needs log pipeline coverage of the JSON API); temporarily reduce the population that can reach the endpoint by restricting self-service password changes to administrators or by moving accounts to SSO/OAuth where supported (trade-off: removes self-service for regular editors and is an operational policy change, not a code fix); and enforce strong password entropy plus mandatory rotation for accounts that may have been exposed (trade-off: user friction, and rotation only helps if the compromise window is closed first). No vendor workaround setting is documented in the advisory, so upgrading remains the only complete fix.

Affected VersionsENISA

Apostrophe < 4.33.0

Affected Packages

npm apostrophe fix: 4.33.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/MongoDB content management system distributed as the npm package apostrophe (CPE cpe:2.3:a:apostrophecms:apostrophe:*:*:*:*:*:*:*:*). The defect is CWE-307 (Improper Restriction of Excessive Authentication Attempts) and stems from an inconsistency between two code paths that both verify a user's password. The login route properly brackets its credential check with checkLoginAttempts/addLoginAttempt in packages/apostrophe/modules/@apostrophecms/login/index.js (lines 831-929), which increments an attempt cache and enforces delay and lockout. The settings module does not: settings/index.js (lines 621-664) routes PATCH requests into handlePasswordProtectedSubform (lines 514-542), which calls apos.user.verifyPassword (user/index.js lines 412-487) inside a try/catch and simply throws a generic forbidden / apostrophe:passwordCurrentError response on failure. The verifier neither increments the login-attempt cache nor sleeps, so each wrong guess returns immediately, giving an attacker an unbounded, zero-cost oracle for the current password over a normal HTTPS request. The vulnerability class is a control-flow omission rather than a memory-safety or injection flaw: the password comparison itself remains correct, and no special or non-default configuration is required for the gap to exist in any release below 4.33.0.

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 5.9 MEDIUM
AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 6.8 MEDIUM

Network endpoint (AV:N) reachable only with a pre-existing low-privilege session (PR:L, not PR:H); success depends on password entropy (AC:H); unlimited guessing can disclose and reset credentials (C:H/I:H, A:N).

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/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
High
Privileges Required
High
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

1
Patch available
Oct 20, 2026 - 19:03 EUVD

DescriptionCVE.org

ApostropheCMS is an open-source Node.js content management system. Prior to 4.33.0, the self-service password-change endpoint verifies the current password but does not use the login module’s failed-attempt counter, throttle, delay, or lockout mechanism. An attacker with a valid authenticated session can submit repeated guesses for the current password without receiving a lockout or throttle response. This issue is fixed in version 4.33.0.

Threat Intelligence Overview

EPSS Score
0.3%
Top 77% exploitable
Prevalence
Low
niche open-source Node.js CMS, limited enterprise deployment footprint
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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 No
EPSS 0.3%
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· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2026-63669 MEDIUM POC
6.5 Aug 17

Integrity bypass in ApostropheCMS page management allows authenticated low-privileged editors to move pages into restric

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

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