Vulnerabilities

Vulnerability · GHSA-mjj9-pjh4-r48g

Unauthenticated SQL injection via GraphQL eager-load "select" criteria

Published Oct 22, 2026 · catalog updated Oct 22, 2026 · Unauthenticated SQL injection via

Last checked Nov 1, 2026. A connected source was read within the last 7 days.

Open the advisory

Exploitation likelihood is not on this record for GHSA-mjj9-pjh4-r48g. A missing EPSS score is not a low risk. Compare Unauthenticated SQL injection via with the linked advisory before you change production.

Gaps on this record

  • The stored product name is a package slug. The name on this page is taken from the title (Unauthenticated SQL injection via).
  • No vendor fix or required action is stored. Compare the linked advisory before you change production.
  • EPSS is missing. A missing score is not a low risk.
Severity
High—
Known exploitation
Not in CISA/VulnCheck KEV
EPSS
Awaiting synchronization with FIRST
Remediation
Version ranges on file
Affected products
composer craftcms/cms

An anonymous GraphQL request can inject arbitrary SQL expressions into an element query’s clause. Arguments hung off an eager-loadable node that is absent from the active public schema are copied into and written onto the eager-loaded query with , without passing through any of Craft’s criteria cleansing. A value containing a parenthesis is emitted into the SQL verbatim by Yii’s query builder, so it is evaluated by the database. This reaches the same criteria path as GHSA-9c4j-cjw3-r3xx, but it is not that issue and is not fixed by it. That advisory’s fix types as , which closes the callable sink. The injection does not involve at all: it needs no nested , no callback, and no . ### Preconditions - The public GraphQL schema is enabled and grants anonymous read access to at least one section or one asset volume, but not to user groups. - At least one entry with an author, or one asset with a populated . The schema shape is the ordinary least-privilege configuration for a headless frontend that publishes content without publishing user records. It is materially more common than the asset-volume-only configuration required by the earlier eager-load report: an entries-only public schema is the default shape of a Craft headless install. Granting the schema user-group read access removes the exposure, because / are then published as real fields with fixed argument definitions, and the injected argument is rejected as unknown. The GHSA-9c4j-cjw3-r3xx fix in 5.10.13 types as . That prevents a string from being stored on the callable property, which closes both routes into that sink. It does not affect this issue. The injection here is in , applied by before any callback is considered, and the exploit sends no argument at all. ### Impact An unauthenticated attacker can read arbitrary data from the Craft database, including user email addresses and password hashes, session and verification tokens, and any content stored in the database, regardless of GraphQL schema scope. The

Are you affected?

Enter the version you run. The result uses only the ranges stored on this record.

The check returns affected, not affected, or incomplete. It does not guess a version that is missing from the record.

  • composer craftcms/cms>= 4.0.0, < 4.18.9
  • composer craftcms/cms>= 5.0.0, < 5.11.2

How to fix GHSA-mjj9-pjh4-r48g

  • Upgrade

    GHSA-mjj9-pjh4-r48g lists a fix boundary at 4.18.9. Compare the installed build with that boundary before you change production.

  • Version check

    Affected < 4.18.9

  • Advisory

    Open the inventory_github record and follow its fix.

  • Official advisories

What to do

Three questions, each answered from this record only. Confirm the vendor advisory before you patch.

Should you patch?

Exploitation likelihood is not on this record for GHSA-mjj9-pjh4-r48g. A missing EPSS score is not a low risk. Compare Unauthenticated SQL injection via with the linked advisory before you change production.

Which versions are affected?

Compare what you have installed with >= 4.0.0, < 4.18.9, >= 5.0.0, < 5.11.2. Compare the installed version with the linked vendor advisory before you change production.

What should an analyst verify?

CWE-89: SQL Injection. EPSS is not on this record yet. There is no CISA KEV listing. No Exploit-DB or Metasploit reference is linked. Use the source links for the original advisory.

Technology hubs

Code

The project this record applies to. Exploit listings stay in References.

No public source repository is identified for this product.

Timeline

Detection, updates, and resolution for this record.

  1. Oct 22, 2026 · Maintainer security tabs

    Detected

    An anonymous GraphQL request can inject arbitrary SQL expressions into an element query’s clause. Arguments hung off an eager-loadable node that is absent from the active public schema are copied into and written onto the eager-loaded query with , without passing through any of Craft’s criteria cleansing. A value containing a parenthesis is emitted into the SQL verbatim by Yii’s query builder, so

Sources

  • Maintainer security tabsVendor advisoryGHSA-mjj9-pjh4-r48g

    An anonymous GraphQL request can inject arbitrary SQL expressions into an element query’s clause. Arguments hung off an eager-loadable node that is absent from the active public schema are copied into and written onto the eager-loaded query with , without passing through any of Craft’s criteria cleansing. A value containing a parenthesis is emitted into the SQL verbatim by Yii’s query builder, so

    github.com

Freshness

Last verified in this catalog Oct 22, 2026. Significant claims (KEV, EPSS, CVSS, affected ranges) come from the source rows above — open the original publisher for the authoritative advisory.

  • Maintainer security tabsNov 1, 2026