Vulnerabilities

Security incident · CVE-2026-119286

GraphQL-core has denial of service via memory leak in aborted validations

Published Oct 30, 2026 · catalog updated Oct 30, 2026 · GraphQL-core has denial of

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

Check if you run it

No confirmed exploitation is on record for CVE-2026-119286. EPSS is 0.42%. Act only if a listed version of GraphQL-core has denial of is installed.

Gaps on this record

  • The stored product name is a package slug. The name on this page is taken from the title (GraphQL-core has denial of).
  • No vendor fix or required action is stored. Compare the linked advisory before you change production.
Severity
High7.5
Known exploitation
Not in CISA/VulnCheck KEV
EPSS
0.42%
Remediation
Version ranges on file
Affected products
PyPI graphql-core · pip graphql-core · pypi graphql-core

### Summary When a validation was aborted because the document contained more errors than allowed by (100 by default), raised a single module-level instance. Python appends the frames of every to the existing of an exception that is raised again, so every aborted validation extended the traceback of this shared error. That traceback kept the frames, and with them the document, the validation context and all errors of every aborted validation, alive for the lifetime of the process. ### Details Any client can trigger an aborted validation by sending a small document with more than 100 validation errors, e.g. 101 unknown fields. No authentication is required, and since validation runs before execution, depth limiters and complexity analyzers do not prevent it. Each such request permanently retained about 124 KiB on CPython 3.12, without an upper limit, so memory grew with every request until the process was restarted or killed. GraphQL.js uses a shared error object at the same place, but JavaScript errors capture their stack trace only once when they are created, so it is not affected. GraphQL-core 3.2 creates a new error for each aborted validation and is not affected either. ### Proof of concept With GraphQL-core 3.3.0 on CPython 3.12, the retained memory grows from 147 KiB after one call to about 25 MB after 200 calls. With the fix, it stays constant at about 180 KiB. ### Impact Denial of service through memory exhaustion. A few thousand small requests are enough to push a worker past a typical 256 MB or 512 MB container limit and trigger an OOM kill. No data is disclosed or modified. ### Patches Fixed in **3.3.1**. now creates a new for every aborted validation and removes its traceback and exception context before returning it, so that the returned errors do not keep the frames of the validation alive. The module-level instance, which was not exported, has been removed. ### Workarounds If you cannot upgrade, clear the traceback of the shared error after each valid

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.

  • PyPI graphql-core3.3.0a3 → 3.3.1
  • pip graphql-core>= 3.3.0a3, < 3.3.1
  • pypi graphql-coreversion unspecified

How to fix CVE-2026-119286

What to do

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

Should you patch?

No confirmed exploitation is on record for CVE-2026-119286. EPSS is 0.42%. Act only if a listed version of GraphQL-core has denial of is installed.

Which versions are affected?

Compare what you have installed with 3.3.0a3 → 3.3.1, >= 3.3.0a3, < 3.3.1. Compare the installed version with the linked vendor advisory before you change production.

What should an analyst verify?

CWE-400: Uncontrolled Resource Consumption; CWE-401: Missing Release of Memory after Effective Lifetime. EPSS 0.42%. There is no CISA KEV listing. No Exploit-DB or Metasploit reference is linked. Use the source links for the original advisory.

Code

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

Timeline

Detection, updates, and resolution for this record.

  1. Oct 30, 2026 · GitHub Advisory Database

    Detected

    ### Summary When a validation was aborted because the document contained more errors than allowed by (100 by default), raised a single module-level instance. Python appends the frames of every to the existing of an exception that is raised again, so every aborted validation extended the traceback of this shared error. That traceback kept the frames, and with them the document, the validation conte

  2. Oct 30, 2026 · GitHub Advisory Database

    Updated

    ### Summary When a validation was aborted because the document contained more errors than allowed by (100 by default), raised a single module-level instance. Python appends the frames of every to the existing of an exception that is raised again, so every aborted validation extended the traceback of this shared error. That traceback kept the frames, and with them the document, the validation conte

  3. Oct 30, 2026 · PyPA Advisory Database

    Fix available

    graphql-core fixed in 3.3.1

  4. Oct 30, 2026 · PyPA Advisory Database

    Fix available

    graphql-core fixed in 3.3.1

  5. Oct 30, 2026 · PyPA Advisory Database

    Updated

    ### Summary When a validation was aborted because the document contained more errors than allowed by (100 by default), raised a single module-level instance. Python appends the frames of every to the existing of an exception that is raised again, so every aborted validation extended the traceback of this shared error. That traceback kept the frames, and with them the document, the validation conte

Sources

  • CVE.orgVulnerability recordCVE-2026-119286

    Official CVE identifier

    cve.org
  • GitHub Advisory DatabasePackage advisoryGHSA-mpqx-q82w-9x46

    GraphQL-core has denial of service via memory leak in aborted validations

    github.com
  • GitLab Advisory DatabasePackage advisoryCVE-2026-119286

    When a validation was aborted because the document contained more errors than allowed by max_errors (100 by default), validate() raised a single module-level ValidationAbortedError instance. Python appends the frames of every raise to the existing traceback of an exception that is raised again, so every aborted validation extended the traceback of this shared error. That traceback kept the frames,

    advisories.gitlab.com
  • PyPA Advisory DatabasePackage advisoryGHSA-mpqx-q82w-9x46

    GraphQL-core has denial of service via memory leak in aborted validations

    osv.dev

References

Freshness

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

  • GitLab Advisory DatabaseNov 3, 2026
  • GitHub Advisory DatabaseNov 3, 2026
  • PyPA Advisory DatabaseNov 2, 2026
  • CVE.orgOct 31, 2026