# CVE-2021-41248: XSS vulnerability in GraphiQL

> Attackers can inject malicious scripts via compromised GraphQL schemas in GraphiQL, potentially executing code if custom fetchers allow dynamic schema URLs.

- **Severity:** High 7.1 (`CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:L`)
- **Exploited in the wild:** Not known
- **Login needed:** Not needed
- **Attackable:** Over the internet
- **Victim action needed:** A user has to click or open something
- **Fix available:** Yes
- **Published:** 4 Nov 2021
- **Updated:** 4 Aug 2024
- **Also known as:** GHSA-x4r7-m2q9-69c8

## What is CVE-2021-41248?

CVE-2021-41248 is a high-severity cross-site scripting vulnerability in graphql graphiql, published on 4 Nov 2021. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.

### Official description

GraphiQL is the reference implementation of this monorepo, GraphQL IDE, an official project under the GraphQL Foundation. All versions of graphiql older than graphiql@1.4.7 are vulnerable to compromised HTTP schema introspection responses or schema prop values with malicious GraphQL type names, exposing a dynamic XSS attack surface that can allow code injection on operation autocomplete. In order for the attack to take place, the user must load a vulnerable schema in graphiql. There are a number of ways that can occur. By default, the schema URL is not attacker-controllable in graphiql or in its suggested implementations or examples, leaving only very complex attack vectors. If a custom implementation of graphiql's fetcher allows the schema URL to be set dynamically, such as a URL query parameter like ?endpoint= in graphql-playground, or a database provided value, then this custom graphiql implementation is vulnerable to phishing attacks, and thus much more readily available, low or no privelege level xss attacks. The URLs could look like any generic looking graphql schema URL. It should be noted that desktop clients such as Altair, Insomnia, Postwoman, do not appear to be impacted by this. This vulnerability does not impact codemirror-graphql, monaco-graphql or other dependents, as it exists in onHasCompletion.ts in graphiql. It does impact all forks of graphiql, and every released version of graphiql.

Weakness: CWE-79 (Improper Neutralization of Input During Web Page Generation)

## Which versions are affected by CVE-2021-41248?

2 open source packages ship an affected version, including graphiql. It affects 1 product.


| Package | Ecosystem | Affected | Fixed in |
| --- | --- | --- | --- |
| `graphiql` | npm | From 0.5.0 | 1.4.7 |
| `graphiql` | npm | From 0.5.0 | 1.4.7 |

Products: Graphql Graphiql.

## How do I fix CVE-2021-41248?

Upgrade graphiql to 1.4.7 or later.

## Is CVE-2021-41248 being exploited?

There is no known exploitation of CVE-2021-41248 in the wild and no public exploit code.

## Fix prompt for AI coding agents

```text
Check this codebase for CVE-2021-41248 and fix it if it is affected.

What it is: CVE-2021-41248 is a high-severity cross-site scripting vulnerability in graphql graphiql, published on 4 Nov 2021. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.
Exploitation: There is no known exploitation of CVE-2021-41248 in the wild and no public exploit code.

Affected packages and fixed versions:
- graphiql (npm): affected from 0.5.0; fixed in 1.4.7
- graphiql (npm): affected from 0.5.0; fixed in 1.4.7

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/CVE-2021-41248/ (Markdown: https://insights.sbomify.com/CVE-2021-41248/index.md)
```

## Sources

- CVE record: https://www.cve.org/CVERecord?id=CVE-2021-41248
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2021-41248
- OSV: https://osv.dev/vulnerability/CVE-2021-41248

---
From sbomify Insights: https://insights.sbomify.com/CVE-2021-41248/
Summaries are generated and may contain mistakes; the official description above is the record.
