Live › vulnerability › CVE-2026-112952
Go to dashboardApostropheCMS's slugTaken API endpoint returns whether any slug exists across all document types and visibility levels without permission checks. Any logged-in user, including editors, can enumerate private, draft, and archived page slugs.
Summary written from the sources below. Check the originals before acting.
First seen by InfraStack 2026-10-23 19:11 UTC, 3h before NVD. All times on this page are UTC.
| Product | Ecosystem | Affected | Fixed in |
|---|---|---|---|
| apostrophe | npm | < 4.34.0 | 4.34.0 |
Check the installed apostrophe version with npm ls apostrophe; versions below 4.34.0 are affected.
As a test, POST {"slug":"<known-private-slug>"} to /api/v1/@apostrophecms/doc/slugTaken with a low-privilege session and see whether it returns taken: true.
4.34.0 or laterEach row is the first time that source carried this signal. The analyst’s rows are its own findings.
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.
POST /api/v1/@apostrophecms/doc/slugTaken with body { "slug": "target-slug" } runs
a raw existence check against the documents collection. It does not:
visibility (public, loginRequired, private).viewRole.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.
# 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 }
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.
This page as .md · .json · in your agent: get_signal("CVE-2026-112952")
GitHub Advisory Database, CC-BY 4.0 · NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.