Vulnerability DatabaseCVE-2026-113668

CVE-2026-113668: 
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-113668 is an information disclosure vulnerability in ApostropheCMS, an open-source Node.js content management system. The REST routes GET /api/v1/<piece-type>/:_id/locales and GET /api/v1/@apostrophecms/page/:_id/locales fail to enforce the publicApiCheckAsync authorization gate that all other read routes in the framework apply, allowing unauthenticated callers to determine document existence and enumerate locale/publication metadata for any document by ID. All versions of the apostrophe npm package prior to 4.33.0 are affected. The vulnerability was reported by Santosh Kumar Puppala and thota murari, published to the GitHub Advisory Database on October 20, 2026, and carries a CVSS v3.1 base score of 5.3 (Medium) (Github Advisory).

Technical details

The root cause is a missing authorization check (CWE-862) leading to exposure of sensitive information to unauthorized actors (CWE-200). In modules/@apostrophecms/piece-type/index.js at line 397, the :_id/locales route is registered without calling publicApiCheckAsync, and the same omission exists in modules/@apostrophecms/page/index.js at line 925. Sibling read routes in the same modules (e.g., getAll at piece-type/index.js:256-263) correctly invoke publicApiCheckAsync to enforce the public-API access policy, but the locales handler bypasses this gate entirely. An unauthenticated attacker with knowledge of a document _id can send a simple HTTP GET request to either endpoint and receive locale and publication state metadata that the read API is otherwise designed to restrict. Additionally, apos.doc.getLocales() did not apply document-level view permissions, meaning draft locales of document types restricted by viewRole could also be disclosed (Github Advisory, Security Fix Commit).

Impact

Successful exploitation allows an unauthenticated remote attacker to confirm the existence of any document by its _id and enumerate which locales it is published in, including draft locales that may be restricted by viewRole for logged-in users. This constitutes a confidentiality breach limited to metadata — no document content is directly exposed — but the information can be used for reconnaissance, content mapping, or to infer the structure and publishing state of a CMS-managed site. There is no impact on integrity or availability (Github Advisory).

Exploitability

No public proof-of-concept exploit code is known to exist, and there is no evidence of active in-the-wild exploitation as of the disclosure date (Github Advisory). The vulnerability is automatable (no user interaction or privileges required), but exploitation requires the attacker to already possess a valid document _id, which is an opaque identifier that somewhat raises the practical attack complexity. The EPSS score is 0.0, and the CVE status is listed as "Deferred" with no CISA KEV catalog entry. No threat actor attribution has been reported.

Exploitation steps

  1. Reconnaissance: Identify an ApostropheCMS instance running a version prior to 4.33.0 by examining HTTP response headers, page source, or npm package metadata exposed by the application.
  2. Obtain a document _id: Gather document IDs through any available means — e.g., from publicly visible API responses, page source HTML, or by querying other unauthenticated endpoints that may leak IDs (such as public piece listings).
  3. Query the locales endpoint: Send an unauthenticated HTTP GET request to GET /api/v1/<piece-type>/<_id>/locales or GET /api/v1/@apostrophecms/page/<_id>/locales, substituting the target piece type slug and document ID.
  4. Analyze the response: If the document exists, the server returns locale and publication state metadata (e.g., which locales the document is published in, including draft locales), confirming document existence and revealing publishing structure without any authentication (Github Advisory).

Indicators of compromise

  • Network: Unusual or repeated unauthenticated HTTP GET requests to paths matching /api/v1/*/locales or /api/v1/@apostrophecms/page/*/locales from external IP addresses, especially in bulk or automated patterns.
  • Logs: Web server or Express access logs showing 200 responses to GET /api/v1/<piece-type>/<_id>/locales or GET /api/v1/@apostrophecms/page/<_id>/locales from unauthenticated sessions (no session cookie or bearer token present).
  • Logs: High volume of requests to the locales endpoints with varying _id values, suggesting enumeration attempts.

Mitigation and workarounds

Upgrade the apostrophe npm package to version 4.33.0 or later, which adds the publicApiCheckAsync gate to the :_id/locales route in both the piece-type and page modules, and also applies document-level view permissions within apos.doc.getLocales() (Github Advisory, Release 4.33.0). As a temporary workaround for sites that cannot immediately upgrade, restrict network access to the GET /api/v1/*/locales endpoints at the reverse proxy or API gateway level, or implement authentication gating at that layer to block unauthenticated requests to those paths.

Community reactions

The vulnerability was responsibly disclosed by security researchers Santosh Kumar Puppala and thota murari, who are credited in the official GitHub Security Advisory. The ApostropheCMS maintainer (boutell) published the advisory and released the fix as part of a broader security update (commit f84fd41) that addressed multiple vulnerabilities simultaneously in version 4.33.0 (Security Fix Commit). No significant broader media coverage or social media discussion has been identified.

Additional resources


Source: This report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-113668MEDIUM5.3
  • JavaScript logoJavaScript
  • apostrophe
NoYesOct 20, 2026
CVE-2026-113670MEDIUM5.3
  • JavaScript logoJavaScript
  • apostrophe
NoYesOct 20, 2026
CVE-2026-113669MEDIUM5.3
  • JavaScript logoJavaScript
  • @apostrophecms/passport-bridge
NoYesOct 20, 2026
CVE-2026-113667MEDIUM5.3
  • JavaScript logoJavaScript
  • @apostrophecms/login-recaptcha
NoYesOct 20, 2026
CVE-2026-113671MEDIUM4.3
  • JavaScript logoJavaScript
  • @apostrophecms/ai-helper
NoYesOct 20, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management