VDB
Sign up
LOW

GHSA-vg3j-hpm9-8v5v

Craft CMS has a potential information disclosure vulnerability in preview tokens

Quick fix

GHSA-vg3j-hpm9-8v5v — craftcms/cms: upgrade to the fixed version with the command below.

composer require craftcms/cms:^4.17.3

Details

# Summary

Craft CMS has a CSRF issue in the preview token endpoint at `/actions/preview/create-token`. The endpoint accepts an attacker-supplied `previewToken`.

Because the action does not require POST and does not enforce a CSRF token, an attacker can force a logged-in victim editor to mint a preview token chosen by the attacker.

That token can then be used by the attacker (without authentication) to access previewed/unpublished content tied to the victim’s authorized preview scope.

---

## Preconditions - Victim is logged in to Craft control panel. - Victim has active preview authorization in session for target content (e.g., opened/edited an entry). - The attacker must know the target’s `canonicalId` and public URL path of that entry.

## 1) Attacker prepares a fixed token Use any 32-character value, for example: ```text aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ```

## 2) CSRF victim into minting that token Send the victim a link (or top-level redirect) such as: ```text https://TARGET/actions/preview/create-token?elementType=craft%5Celements%5CEntry&canonicalId=123&siteId=1&previewToken=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&redirect=https%3A%2F%2FTARGET%2F ```

If the victim is logged in and authorized for `previewElement:123`, Craft creates that exact token.

## 3) Attacker accesses preview content unauthenticated ```bash curl -i 'https://TARGET/news/known-entry-slug?token=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ```

Expected vulnerable behavior:

- Response renders preview/unpublished state (draft/provisional context), not just normal public content.

---

# Impact - CSRF-based minting of attacker-known preview tokens. - Unauthorized access to draft/provisional/revision content via token replay. - Stealthy one-click exploitation against logged-in editors/admins. - No dependency on forwarded-host poisoning.

---

Are you affected?

Enter the version of the package you're using.

Affected packages

Packagist/craftcms/cms
Introduced in: 4.0.0-RC1Fixed in: 4.17.3
Fixcomposer require craftcms/cms:^4.17.3
Packagist/craftcms/cms
Introduced in: 5.0.0-RC1Fixed in: 5.9.7
Fixcomposer require craftcms/cms:^5.9.7

References