{"id":"CVE-2026-29113","aliases":["GHSA-vg3j-hpm9-8v5v"],"url":"https://o3.security/vulnerability/CVE-2026-29113","summary":"Craft has a potential information disclosure vulnerability in preview tokens","details":"# Summary\n\nCraft CMS has a CSRF issue in the preview token endpoint at `/actions/preview/create-token`.  The endpoint accepts an attacker-supplied `previewToken`.\n\nBecause 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.  \n\nThat token can then be used by the attacker (without authentication) to access previewed/unpublished content tied to the victim’s authorized preview scope.\n\n---\n\n## Preconditions\n- Victim is logged in to Craft control panel.\n- Victim has active preview authorization in session for target content (e.g., opened/edited an entry).\n- The attacker must know the target’s `canonicalId` and public URL path of that entry.\n\n## 1) Attacker prepares a fixed token\nUse any 32-character value, for example:\n```text\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n```\n\n## 2) CSRF victim into minting that token\nSend the victim a link (or top-level redirect) such as:\n```text\nhttps://TARGET/actions/preview/create-token?elementType=craft%5Celements%5CEntry&canonicalId=123&siteId=1&previewToken=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&redirect=https%3A%2F%2FTARGET%2F\n```\n\nIf the victim is logged in and authorized for `previewElement:123`, Craft creates that exact token.\n\n## 3) Attacker accesses preview content unauthenticated\n```bash\ncurl -i 'https://TARGET/news/known-entry-slug?token=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n```\n\nExpected vulnerable behavior:\n\n- Response renders preview/unpublished state (draft/provisional context), not just normal public content.\n\n---\n\n# Impact\n- CSRF-based minting of attacker-known preview tokens.\n- Unauthorized access to draft/provisional/revision content via token replay.\n- Stealthy one-click exploitation against logged-in editors/admins.\n- No dependency on forwarded-host poisoning.\n\n---","published":"2026-03-10T19:44:44.530Z","modified":"2026-10-28T02:31:05.864252337Z","cvss":null,"epss":null,"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"Packagist","name":"craftcms/cms","fixedVersion":"4.17.3"},{"ecosystem":"Packagist","name":"craftcms/cms","fixedVersion":"5.9.7"}],"fix":{"url":"https://github.com/craftcms/cms/commit/6a88468dc35a27cccc8fef254f415a447d4a07cc","label":"craftcms/cms@6a88468"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/29xxx/CVE-2026-29113.json"},{"type":"ADVISORY","url":"https://github.com/craftcms/cms/security/advisories/GHSA-vg3j-hpm9-8v5v"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-29113"},{"type":"FIX","url":"https://github.com/craftcms/cms/commit/6a88468dc35a27cccc8fef254f415a447d4a07cc"},{"type":"PACKAGE","url":"https://github.com/craftcms/cms"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-10-28T02:31:05.864252337Z"}}