CARVIEW |
Select Language
HTTP/2 200
date: Tue, 22 Jul 2025 18:21:23 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"e7dfac044bf2ab57786154ea4e654238"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=OuH6IAe4ZKhOgoPzSrvvkOlkOHlsP6ScKRNFxn4DQXYZVTQ6ExJoRAiJg7OSh8nErFLRB1SOt4eidmCs6IlEjwhbCpIVvgSmDl6FEKsLs07dAEs6VsaWEHSC8X6v4lFFc1cIYh00QhhYGPgcE%2FI9GaMMiTq0FV8QNW4aPxt1EdhO1I0LZwjxjTGMvMwCcM5LpnFC9wz00d2mfaE9mum%2Bu0RhVgw3EfNQYsyCJQDaHKgR4332am6Qmn1iQ4sdQvaX%2Fmqas7Cfn%2BA%2BMbFFppHniQ%3D%3D--QgJE3D83qqnha3hu--6URkpM2BCUINTDzzzIP%2BiA%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1409297258.1753208483; Path=/; Domain=github.com; Expires=Wed, 22 Jul 2026 18:21:23 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Wed, 22 Jul 2026 18:21:23 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: E884:124FF4:31DDD:3CDFB:687FD6A3
Reflected XSS in GraphQL Playground React, HTML and Middlewares · Advisory · graphql/graphql-playground · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 732
Reflected XSS in GraphQL Playground React, HTML and Middlewares
High
Description
Severity
High
/ 10
CVSS v3 base metrics
Attack vector
Network
Attack complexity
High
Privileges required
None
User interaction
Required
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
Low
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:L
CVE ID
CVE-2020-4038
Weaknesses
Weakness CWE-79
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users. Learn more on MITRE.
You can’t perform that action at this time.
Impact
directly impacted:
graphql-playground-html@<1.6.22
- all unsanitized user input forrenderPlaygroundPage()
all of our consuming packages of
graphql-playground-html
are impacted:graphql-playground-middleware-express@<1.7.16
- unsanitized user input toexpressPlayground()
graphql-playground-middleware-koa@<1.6.15
- unsanitized user input tokoaPlayground()
graphql-playground-middleware-lambda@<1.7.17
- unsanitized user input tolambdaPlayground()
graphql-playground-middleware-hapi@<1.6.13
- unsanitized user input tohapiPlayground()
as well as any other packages that use these methods with unsanitized user input.
not impacted:
graphql-playground-electron
- usesrenderPlaygroundPage()
statically for a webpack build for electron bundle, no dynamic user inputgraphql-playground-react
- usage of the component directly in a react application does not expose reflected XSS vulnerabilities. only the demo inpublic/
contains the vulnerability, because it uses an old version of the html pacakge.Patches
upgrading to the above mentioned versions will solve the issue.
If you're using
graphql-playground-html
directly, then:or
Then, similar steps need to be taken for each middleware:
Workarounds
Ensure you properly sanitize all user input for options you use for whatever function to initialize GraphQLPlayground:
for example, with
graphql-playground-html
and express:or, with
graphql-playground-express
:References
Credits
Masato Kinugawa of Cure53
For more information
If you have any questions or comments about this advisory: