Loading...
Skip to main content

CVE-2026-57579 — Vulnerability in alchemy_cms — CVE Details

HIGH

AlchemyCMS: Unauthenticated nested page API leaks restricted & unpublished content

Published June 19, 2026Updated September 15, 2026Source: osv

Summary

# 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. ## Evidence An unauthenticated `GET /api/pages/nested` returns HTTP 200 with the restricted page (`"restricted":true`) and an unpublished draft (`"public":false`); `?elements=true` leaks its content (e.g. `TOPSECRET_RESTRICTED_BODY_proof123`). The same guest hitting `GET /api/pages/3` (`show`) gets HTTP **403** `{"error":"Not authorized"}`, proving `nested` returns what `show` correctly denies. ### Reproduction ```bash # 1) Metadata leak (guest, no auth) curl -s http://localhost:3000/api/pages/nested | python3 -m json.tool | grep -E '"name"|"restricted"|"public"' # 2) Content leak of restricted page curl -s "http://localhost:3000/api/pages/nested?elements=true" | grep -oE 'TOPSECRET_RESTRICTED_BODY_[A-Za-z0-9]+|RESTRICTED_RICHTEXT_[A-Za-z0-9]+' # 3) Contrast — show denies the same guest curl -s -o /dev/null -w "show /api/pages/3 -> HTTP %{http_code}\n" http://localhost:3000/api/pages/3 ``` ### Suggested fix ```ruby def nested @page = Page.find_by(id: params[:page_id]) || Language.current_root_page authorize! :show, @page preloaded_page = PageTreePreloader.new(page: @page, user: current_alchemy_user, ability: current_ability).call render json: PageTreeSerializer.new(preloaded_page, ability: current_ability, user: current_alchemy_user, elements: params[:elements]) end ``` Additionally scope `PageTreePreloader`'s `self_and_descendants` via `accessible_by(current_ability)` and gate element emission in `PageTreeSerializer#page_elements` behind `opts[:ability].can?(:show, page)`.

Advisory Timeline

  • First published June 19, 2026 (115 days ago).
  • Last revised September 15, 2026 — 87 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Bundler
Update alchemy_cms to 8.0.15 or later
gem install alchemy_cms -v 8.0.15
Bundler
Update alchemy_cms to 8.2.6 or later
gem install alchemy_cms -v 8.2.6
Bundler
Update alchemy_cms to 7.4.15 or later
gem install alchemy_cms -v 7.4.15
Bundler
Update alchemy_cms to 8.1.14 or later
gem install alchemy_cms -v 8.1.14

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (4)

Affects 1 ecosystem: rubygems (1).

PackageEcosystemAffectedFixed In
alchemy_cms
rubygems
8.0.0, 8.0.0.a, 8.0.0.b, 8.0.0.c (+14 more)8.0.15
alchemy_cms
rubygems
8.2.0, 8.2.1, 8.2.2, 8.2.3 (+2 more)8.2.6
alchemy_cms
rubygems
2.0, 2.0.1, 2.0.2, 2.0.3 (+339 more)7.4.15
alchemy_cms
rubygems
8.1.0, 8.1.1, 8.1.10, 8.1.11 (+10 more)8.1.14

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-862
    Missing AuthorizationMITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 7.5 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Frequently Asked Questions

What is CVE-2026-57579?
AlchemyCMS: Unauthenticated nested page API leaks restricted & unpublished content This vulnerability has been assigned a severity rating of HIGH (CVSS score: 7.5/10).
How do I check if my project is affected by CVE-2026-57579?
CVE-2026-57579 affects alchemy_cms. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-57579 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
7.5

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-mqq5-j7w8-2hgh

Related CVEs

  • CVE-2026-94462
    HIGH

    Spree: Broken Access Control in `PATCH /api/v3/store/carts/:id/associate` (IDOR)

  • CVE-2026-77601
    HIGH

    OpenC3 COSMOS: Authenticated OS command injection via the `pypi_url` setting

  • CVE-2026-23885
    MEDIUM

    AlchemyCMS: Authenticated Remote Code Execution (RCE) via eval injection in ResourcesHelper

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies