ApostropheCMS: POST /api/v1/@apostrophecms/doc/slugTaken discloses existence of private/admin-only content to any authenticated user
What fixes it
- 4.34.0apostrophe, npmGitHub
npm install apostrophe@4.34.0
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
Summary
The slugTaken endpoint returns a boolean indicating whether a slug is in use across all document types and visibility levels, with no permission or type filter. Any logged-in user (including editors) can enumerate the slug space of private pages, drafts, and archived content.
Details
POST /api/v1/@apostrophecms/doc/slugTaken with body { "slug": "target-slug" } runs a raw existence check against the documents collection. It does not:
- Check whether the requesting user has read permission for documents of that type.
- Filter by
visibility(public, loginRequired, private). - Filter by
viewRole. - Filter by publication status (draft vs published).
A single authenticated session can iterate the slug space to enumerate the full content inventory of the CMS, including content the user is explicitly prohibited from viewing.
PoC
# Any authenticated session works — editor role sufficient
curl -b "$EDITOR_JAR" -X POST \
-H "Content-Type: application/json" \
-d '{"slug":"known-private-page-slug"}' \
"http://TARGET/api/v1/@apostrophecms/doc/slugTaken"
# → { "taken": true } — confirms private page exists
curl -b "$EDITOR_JAR" -X POST \
-H "Content-Type: application/json" \
-d '{"slug":"zzz-nonexistent"}' \
"http://TARGET/api/v1/@apostrophecms/doc/slugTaken"
# → { "taken": false }Impact
Information disclosure. An attacker with any authenticated session can enumerate all slugs in the system, mapping the full content structure of the CMS including private and admin-only content.
Text from GitHub Advisory Database
Affected versions 3
- apostrophe, npm< 4.34.0GitHub
- apostropheaffected: < 4.34.0CVE List
- apostrophe, npmfrom first release, fixed in 4.34.0OSV
References 6
- github.com/apostrophecms/apostrophe/commit/06e4b377f3c360f9e89c32dccd7e505ad5ddf498Fixvia CVE List
- github.com/apostrophecms/apostrophe/commit/40b989b1a9dd23d30029b8ce7668634265cfe5eaFixvia CVE List
- github.com/apostrophecms/apostrophe/releases/tag/apostrophe@4.34.0Fixvia CVE List
- github.com/apostrophecms/apostrophe/security/advisories/GHSA-f66c-mpj2-3r8hAdvisoryvia CVE List
- github.com/advisories/GHSA-f66c-mpj2-3r8hAdvisoryvia GitHub
- nvd.nist.gov/vuln/detail/CVE-2026-112952Referencevia GitHub