CVE-2026-45739: Strawberry GraphQL Default GraphiQL May Expose HTTP Vulnerability

LOW
Advisory Identifier: GHSA-x97m-qp5c-w9xj
CVSS 3.1
CWE-200 CWE-201
Published
Advisory Summary

CVE-2026-45739 is a LOW (CVSS 3.1) default graphiql may expose http vulnerability (CWE-200: Exposure of Sensitive Information to an Unauthorized Actor) affecting Strawberry GraphQL libraries in the PyPI ecosystem. The issue involves default graphiql may expose http headers in urls. Remediation is available by upgrading affected packages to version 0.315.4.

CVE-2026-45739 at a Glance

CVE Identifier CVE-2026-45739
GHSA Identifier GHSA-x97m-qp5c-w9xj
Severity LOW
CVSS v3.1 Base Score 3.1
CWE Classification CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
Affected Product Strawberry GraphQL
Package Ecosystem PyPI
Published Date
Last Updated

Security Impact

CVSS: 3.1

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N).

Attack Vector Network (AV:N)
Attack Complexity High (AC:H)
Privileges Required None (PR:N)
User Interaction Required (UI:R)
Scope Unchanged (S:U)
Confidentiality Low (C:L)
Integrity None (I:N)
Availability None (A:N)

How to Fix CVE-2026-45739

To remediate this vulnerability, upgrade all affected Strawberry GraphQL dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

strawberry-graphql fixed: 0.315.4
pip install strawberry-graphql>=0.315.4
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

pip show strawberry-graphql

How to Check if You Are Affected

To determine whether your Python environment is affected by CVE-2026-45739, inspect your installed packages using pip:

pip show strawberry-graphql

Analyze the terminal output to locate any version of Strawberry GraphQL in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.315.4), your application is affected.

Note: The pip show strawberry-graphql command checks currently installed packages in your active Python environment.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor, where the product exposes sensitive information to an actor that is not explicitly authorized to have access to that information. In Strawberry GraphQL, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

## Summary Strawberry's bundled GraphiQL template wrote values from the GraphiQL headers editor into the browser URL query string. If a user entered a sensitive header, such as `Authorization: Bearer <token>`, the value could become visible in browser history, copied links, and server/proxy/CDN access logs after a page reload or shared request. ## Affected Versions - Affected: `strawberry-graphql >= 0.288.4, <= 0.315.3` - Patched: 0.315.4 The vulnerable behavior was introduced by the GraphiQL URL-sharing implementation in commit `9315ef80`, first included in release `0.288.4`. ## Impact Applications that expose Strawberry's default GraphiQL IDE may leak sensitive HTTP header values entered by users into the GraphiQL headers editor. The default IDE is enabled by `graphql_ide="graphiql"` across Strawberry HTTP integrations unless disabled or replaced by the application. The exposure is limited to the browser-based IDE. GraphQL query execution is not affected, and this issue does not allow an attacker to directly execute operations or bypass authorization. Practical exploitation requires a user to enter a secret into the GraphiQL headers editor and then expose the resulting URL, for example by refreshing the page, copying the URL, sharing the URL, or causing the URL to be recorded by logging infrastructure. ## Technical Details The bundled `strawberry/static/graphiql.html` template parsed URL query parameters into a `parameters` object and used those values to initialize GraphiQL state. It also updated the URL on editor changes using `history.replaceState`. Before the fix, header values were handled like shareable query text and variables: ```js const [headers, setHeaders] = React.useState(parameters.headers); function onEditHeaders(newHeaders) { setHeaders(newHeaders); updateURL({ headers: newHeaders }); } ``` This meant arbitrary header text entered into the IDE could be serialized into `?headers=...`. ## Fix The GraphiQL template no longer calls `updateURL` from `onEditHeaders`. Query and variable URL sharing remain unchanged, and existing URLs with `headers=...` can still initialize the headers editor. Header persistence via GraphiQL's own `shouldPersistHeaders: true` behavior remains enabled, so newly edited headers can still persist locally without being placed in the URL. ## Workarounds Until a patched version can be used, applications can mitigate this issue by disabling the bundled IDE in production: ```python GraphQLRouter(schema, graphql_ide=None) ``` Equivalent `graphql_ide=None` configuration is available in Strawberry's other HTTP integrations. Applications can also provide a custom GraphiQL template that does not serialize header values into the URL. ## Credits Reported by `@lpschroer`.

CVE-2026-45739 Affected Strawberry GraphQL Versions

1 component(s)
Fixed Versions:
0.315.4
Product / Package Ecosystem Affected Versions Fixed Version
strawberry-graphql
PyPI
≥ 0.288.4
< 0.315.4
0.315.4

References

Frequently Asked Questions

What is CVE-2026-45739?
CVE-2026-45739 is a security vulnerability in Strawberry GraphQL involving Default GraphiQL may expose HTTP headers in URLs under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor.
Which Strawberry GraphQL versions are affected?
Affected versions include releases prior to 0.315.4 across affected packages: strawberry-graphql.
What version fixes CVE-2026-45739?
Upgrading to 0.315.4 (or the latest patched release for your respective branch) resolves the vulnerability.
Is strawberry-graphql affected?
Yes, strawberry-graphql is affected in releases prior to 0.315.4. Upgrade your dependency to 0.315.4 or later.
What is the CVSS score of CVE-2026-45739?
CVE-2026-45739 has a CVSS v3.1 base score of 3.1 (LOW) with vector string CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N.
What CWE is associated with CVE-2026-45739?
CVE-2026-45739 is classified under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor (The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.).
How can I check PyPI dependencies for CVE-2026-45739?
Run the dependency tree command: 'pip show strawberry-graphql'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-x97m-qp5c-w9xj",
  "modified" : "2026-06-09T11:52:56Z",
  "published" : "2026-05-19T15:55:07Z",
  "aliases" : [ "CVE-2026-45739" ],
  "summary" : "Strawberry GraphQL: Default GraphiQL may expose HTTP headers in URLs",
  "details" : "## Summary\n\nStrawberry's bundled GraphiQL template wrote values from the GraphiQL headers editor into the browser URL query string. If a user entered a sensitive header, such as `Authorization: Bearer <token>`, the value could become visible in browser history, copied links, and server/proxy/CDN access logs after a page reload or shared request.\n\n## Affected Versions\n\n- Affected: `strawberry-graphql >= 0.288.4, <= 0.315.3`\n- Patched: 0.315.4\n\nThe vulnerable behavior was introduced by the GraphiQL URL-sharing implementation in commit `9315ef80`, first included in release `0.288.4`.\n\n## Impact\n\nApplications that expose Strawberry's default GraphiQL IDE may leak sensitive HTTP header values entered by users into the GraphiQL headers editor. The default IDE is enabled by `graphql_ide=\"graphiql\"` across Strawberry HTTP integrations unless disabled or replaced by the application.\n\nThe exposure is limited to the browser-based IDE. GraphQL query execution is not affected, and this issue does not allow an attacker to directly execute operations or bypass authorization. Practical exploitation requires a user to enter a secret into the GraphiQL headers editor and then expose the resulting URL, for example by refreshing the page, copying the URL, sharing the URL, or causing the URL to be recorded by logging infrastructure.\n\n## Technical Details\n\nThe bundled `strawberry/static/graphiql.html` template parsed URL query parameters into a `parameters` object and used those values to initialize GraphiQL state. It also updated the URL on editor changes using `history.replaceState`.\n\nBefore the fix, header values were handled like shareable query text and variables:\n\n```js\nconst [headers, setHeaders] = React.useState(parameters.headers);\n\nfunction onEditHeaders(newHeaders) {\n  setHeaders(newHeaders);\n  updateURL({ headers: newHeaders });\n}\n```\n\nThis meant arbitrary header text entered into the IDE could be serialized into `?headers=...`.\n\n## Fix\n\nThe GraphiQL template no longer calls `updateURL` from `onEditHeaders`. Query and variable URL sharing remain unchanged, and existing URLs with `headers=...` can still initialize the headers editor. Header persistence via GraphiQL's own `shouldPersistHeaders: true` behavior remains enabled, so newly edited headers can still persist locally without being placed in the URL.\n\n## Workarounds\n\nUntil a patched version can be used, applications can mitigate this issue by disabling the bundled IDE in production:\n\n```python\nGraphQLRouter(schema, graphql_ide=None)\n```\n\nEquivalent `graphql_ide=None` configuration is available in Strawberry's other HTTP integrations.\n\nApplications can also provide a custom GraphiQL template that does not serialize header values into the URL.\n\n## Credits\n\nReported by `@lpschroer`.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "PyPI",
      "name" : "strawberry-graphql"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0.288.4"
      }, {
        "fixed" : "0.315.4"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 0.315.3"
    }
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/strawberry-graphql/strawberry/security/advisories/GHSA-x97m-qp5c-w9xj"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-45739"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/strawberry-graphql/strawberry/issues/4398"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/strawberry-graphql/strawberry/pull/2842"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/strawberry-graphql/strawberry/commit/9315ef80a621ae50ca0bc5c82f560ca4ee7e47a9"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/strawberry-graphql/strawberry"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/strawberry-graphql/strawberry/releases/tag/0.315.4"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-200", "CWE-201" ],
    "severity" : "LOW",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-05-19T15:55:07Z",
    "nvd_published_at" : "2026-06-04T15:16:54Z"
  }
}