AlchemyCMS - Unauthenticated nested page API leaks restricted and unpublished content
Published: June 19, 2026
SECURITY IDENTIFIERS
- GHSA: GHSA-mqq5-j7w8-2hgh
- Vendor Advisory: https://github.com/AlchemyCMS/alchemy_cms/security/advisories/GHSA-mqq5-j7w8-2hgh
GEM
SEVERITY
CVSS v3.x: 7.5 (High)
PATCHED VERSIONS
~> 7.4.15
~> 8.0.15
~> 8.1.14
>= 8.2.6
DESCRIPTION
Unauthenticated nested page API leaks restricted & unpublished content
- Location:
app/controllers/alchemy/api/pages_controller.rb:28(Api::PagesController#nested) - Affected version: Alchemy CMS 8.3.0.dev (Rails 8.1.3)
Description
The unauthenticated GET /api/pages/nested endpoint returns the full
page tree to any anonymous caller, including restricted (member-only)
pages and unpublished/draft pages that should be hidden.
Appending ?elements=true additionally dumps the element/ingredient
content of restricted pages, fully bypassing the access control
the sibling show and index actions enforce.
Root cause
Api::PagesController#nested calls no authorize! and applies no
published/restricted scoping, unlike show (authorize! :show)
and index (accessible_by(current_ability, :index)).
PageTreePreloader loads page.self_and_descendants unfiltered, and
PageTreeSerializer emits every page's metadata (and, with elements,
public_version.elements) with no ability check.
RELATED
- https://rubygems.org/gems/alchemy_cms/versions/8.2.6
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.2.6
- https://github.com/AlchemyCMS/alchemy_cms/pull/3988
- https://github.com/AlchemyCMS/alchemy_cms/pull/3982
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.1.14
- https://github.com/AlchemyCMS/alchemy_cms/pull/3987
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.0.15
- https://github.com/AlchemyCMS/alchemy_cms/pull/3984
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v7.4.15
- https://github.com/AlchemyCMS/alchemy_cms/pull/3983
- https://advisories.gitlab.com/gem/alchemy_cms/GHSA-mqq5-j7w8-2hgh
- https://github.com/AlchemyCMS/alchemy_cms/security/advisories/GHSA-mqq5-j7w8-2hgh
- https://github.com/advisories/GHSA-mqq5-j7w8-2hgh
