CVE-2026-28696
Received Received - Intake
Authorization Bypass in Craft CMS GraphQL @parseRefs Directive

Publication date: 2026-03-04

Last updated on: 2026-03-05

Assigner: GitHub, Inc.

Description
Craft is a content management system (CMS). Prior to 4.17.0-beta.1 and 5.9.0-beta.1, the GraphQL directive @parseRefs, intended to parse internal reference tags (e.g., {user:1:email}), can be abused by both authenticated users and unauthenticated guests (if a Public Schema is enabled) to access sensitive attributes of any element in the CMS. The implementation in Elements::parseRefs fails to perform authorization checks, allowing attackers to read data they are not authorized to view. This vulnerability is fixed in 4.17.0-beta.1 and 5.9.0-beta.1.
CVSS Scores
EPSS Scores
Probability:
Percentile:
Meta Information
Published
2026-03-04
Last Modified
2026-03-05
Generated
2026-05-07
AI Q&A
2026-03-04
EPSS Evaluated
2026-05-05
NVD
EUVD
Affected Vendors & Products
Showing 8 associated CPEs
Vendor Product Version / Range
craftcms craft_cms 4.0.0
craftcms craft_cms 4.0.0
craftcms craft_cms 4.0.0
craftcms craft_cms 4.0.0
craftcms craft_cms 5.0.0
craftcms craft_cms 5.0.0
craftcms craft_cms From 4.0.0 (exc) to 4.17.0 (exc)
craftcms craft_cms From 5.0.0 (exc) to 5.9.0 (exc)
Helpful Resources
Exploitability
CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-639 The system's authorization functionality does not prevent one user from gaining access to another user's data or record by modifying the key value identifying the data.
Attack-Flow Graph
AI Powered Q&A
Can you explain this vulnerability to me?

CVE-2026-28696 is a critical Insecure Direct Object Reference (IDOR) vulnerability in the Craft CMS package affecting the GraphQL directive @parseRefs. This directive is designed to parse internal reference tags (e.g., {user:1:email}) but lacks proper authorization checks. As a result, both authenticated users and unauthenticated guests (if the Public Schema is enabled) can access sensitive attributes of any CMS element without permission.

The vulnerability arises because the Elements::parseRefs method fetches referenced elements and accesses their attributes directly without enforcing canView() permission checks. This allows attackers to read data they are not authorized to view, including user data, private entries, assets, and custom fields.

Attackers can exploit this by enumerating sensitive administrator or user attributes such as email, photoId, username, and admin status. They can also trigger server errors that leak internal server stack traces and file system paths. Unauthenticated exploitation is possible if the Public Schema is enabled, allowing data leakage without authentication.


How can this vulnerability impact me? :

This vulnerability can have severe impacts including unauthorized access to Personally Identifiable Information (PII) such as usernames, emails, and administrator status. Attackers can escalate privileges and leak sensitive user and system data.

It can also lead to server-side information disclosure through error messages that reveal internal paths and stack traces, potentially aiding further attacks.

If the Public Schema is enabled, unauthenticated attackers can exploit this vulnerability to bypass authentication and access confidential content, private entries, and assets that should be restricted.


How does this vulnerability affect compliance with common standards and regulations (like GDPR, HIPAA)?:

I don't know


How can this vulnerability be detected on my network or system? Can you suggest some commands?

[{'type': 'paragraph', 'content': 'This vulnerability can be detected by attempting to exploit the GraphQL @parseRefs directive to access sensitive data without proper authorization. Specifically, you can send crafted GraphQL POST requests querying entries with the @parseRefs directive to see if sensitive attributes such as usernames or emails are exposed.'}, {'type': 'paragraph', 'content': 'A practical detection method involves creating a GraphQL query that includes internal reference tags (e.g., {user:1:email}) in fields like entry titles and observing if the response reveals unauthorized data or causes server errors exposing internal paths.'}, {'type': 'paragraph', 'content': 'Example command using curl to test the vulnerability (replace URL and payload accordingly):'}, {'type': 'list_item', 'content': 'curl -X POST https://your-craftcms-site.com/graphql -H "Content-Type: application/json" -d \'{"query":"{ entries { title @parseRefs } }"}\''}, {'type': 'paragraph', 'content': 'If the response contains sensitive user data or internal server error traces, the system is vulnerable.'}] [1]


What immediate steps should I take to mitigate this vulnerability?

The immediate mitigation step is to upgrade Craft CMS to version 4.17.0-beta.1 or later, or 5.9.0-beta.1 or later, where the vulnerability is fixed by enforcing authorization checks in the Elements::parseRefs method.

Additionally, you can disable or make the @parseRefs GraphQL directive optional in your GraphQL schemas to prevent unauthorized data exposure.

Specifically, from Craft CMS version 4.16.17 onwards, the @parseRefs directive can be disabled per schema via the UI by unchecking the directive in the GraphQL schema settings, reducing the attack surface.

If you have enabled the Public Schema, consider disabling it or restricting its permissions to prevent unauthenticated exploitation.


Ask Our AI Assistant
Need more information? Ask your question to get an AI reply (Powered by our expertise)
0/70
EPSS Chart