GitLab GraphQL CSRF Vulnerability CVE-2026-4922: Brief Summary of a High Severity Mutation Hijacking Flaw

A brief summary of CVE-2026-4922, a high severity CSRF vulnerability in GitLab's GraphQL API that allows unauthenticated attackers to execute mutations on behalf of logged in users. Includes patch information and affected version details.

CVE Analysis

6 min read

ZeroPath CVE Analysis
ZeroPath CVE Analysis

2026-04-22

GitLab GraphQL CSRF Vulnerability CVE-2026-4922: Brief Summary of a High Severity Mutation Hijacking Flaw
Experimental AI-Generated Content

This CVE analysis is an experimental publication that is completely AI-generated. The content may contain errors or inaccuracies and is subject to change as more information becomes available. We are continuously refining our process.

If you have feedback, questions, or notice any errors, please reach out to us.

[email protected]

Introduction

A missing CSRF check on GitLab's GraphQL API means that any authenticated user who visits a malicious web page could unknowingly execute mutations against their own GitLab instance, from modifying repository settings to altering project configurations. Given that GitLab CE/EE is one of the most widely deployed DevOps platforms and the vulnerable version range stretches back to 17.0, the exposure surface for self managed installations is substantial.

Technical Information

Root Cause

The vulnerability (CWE-352) exists in GitLab's /api/graphql endpoint. GraphQL mutations are the operations used to create, update, or delete data. The endpoint was not properly validating the origin of incoming state changing requests, meaning it did not enforce anti forgery token checks on mutation operations. This is a classic CSRF gap: the server trusts that any request carrying valid session cookies is intentionally issued by the authenticated user, without verifying that the request actually originated from a legitimate GitLab page.

CVSS Breakdown

The CVSS 3.1 vector string is CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N, producing a base score of 8.1 (High).

MetricValueImplication
Attack Vector (AV)Network (N)Exploitable remotely over the internet
Attack Complexity (AC)Low (L)No specialized access conditions required
Privileges Required (PR)None (N)The attacker does not need prior authentication
User Interaction (UI)Required (R)A victim must interact with malicious content
Confidentiality (C)High (H)Total loss of confidentiality for the affected user session
Integrity (I)High (H)Total loss of integrity; unauthorized data modification
Availability (A)None (N)No direct impact on system availability

The key takeaway from these metrics: the attacker needs zero privileges on the target system. The only prerequisite is that an authenticated GitLab user visits attacker controlled content.

Attack Flow

  1. Reconnaissance: The attacker identifies a target GitLab instance (self managed) and determines it is running a vulnerable version (17.0 through 18.11.0, 18.10.0 through 18.10.3, or 18.9.0 through 18.9.5).

  2. Payload crafting: The attacker creates a malicious HTML page containing a form or JavaScript that submits a GraphQL mutation request to the target's /api/graphql endpoint. The mutation could target any writable operation exposed through the GraphQL schema.

  3. Delivery: The attacker distributes the malicious page via phishing email, a compromised website, or any channel likely to be visited by users who are authenticated to the target GitLab instance.

  4. Execution: When an authenticated GitLab user visits the malicious page, the browser automatically attaches the user's valid session cookies to the forged request. The GitLab server, lacking proper anti forgery token validation on the GraphQL endpoint, processes the mutation as a legitimate authenticated request.

  5. Impact: The attacker's chosen mutation executes under the victim's identity. Depending on the victim's permissions, this could include modifying repository settings, changing project configurations, updating user account details, or performing any other write operation available through the GraphQL API.

The confidentiality impact is rated High because GraphQL mutations can return sensitive data in their responses, and the integrity impact is High because the attacker can make arbitrary modifications within the scope of the victim's permissions.

Patch Information

GitLab has officially patched CVE-2026-4922 in a coordinated security release published on April 22, 2026. The fix ships in three concurrent patch versions covering both the Community Edition (CE) and the Enterprise Edition (EE):

Release TrainFixed VersionVulnerable Range
18.11.x18.11.118.11.0
18.10.x18.10.418.10.0 to 18.10.3
18.9.x18.9.617.0.0 to 18.9.5

The patch strengthens the API's verification of request origins so that mutation requests without valid anti forgery tokens are rejected.

Deployment considerations:

  • GitLab.com (SaaS): Already running the patched code. No user action required.
  • GitLab Dedicated: Managed by GitLab; no customer action required.
  • Self managed installations: Must be upgraded to one of the three fixed versions as soon as possible. These patch releases include database migrations, so single node instances will experience some downtime during the upgrade. Multi node deployments following GitLab's zero downtime upgrade procedures can apply the patch without service interruption.

The vulnerability was initially reported by the security researcher ahacker1 through GitLab's HackerOne bug bounty program (report #3627285). GitLab has filed a corresponding internal work item (#594937), which remains confidential. Per GitLab's disclosure policy, full technical details will be made public on their issue tracker 30 days after this patch release.

Affected Systems and Versions

The vulnerability affects all GitLab CE/EE versions starting from 17.0 that have not been updated to one of the three fixed releases. Specifically:

  • GitLab CE/EE 17.0.0 through 18.9.5 (fixed in 18.9.6)
  • GitLab CE/EE 18.10.0 through 18.10.3 (fixed in 18.10.4)
  • GitLab CE/EE 18.11.0 (fixed in 18.11.1)

GitLab.com and GitLab Dedicated environments are already patched and are not affected. Only self managed installations running versions within the ranges above are vulnerable.

Administrators should verify their current GitLab version against this matrix. Any self managed instance running a version in the affected range and exposing the GraphQL API (which is enabled by default) is susceptible.

Vendor Security History

GitLab maintains a structured security release process with scheduled patch releases twice a month and ad hoc critical patches for high severity vulnerabilities. The company operates a bug bounty program through HackerOne, which is how CVE-2026-4922 was identified and responsibly disclosed. Notably, a prior CSRF issue on the /api/graphql endpoint was tracked in GitLab issue #324397, suggesting that CSRF protection on the GraphQL layer has been a recurring area of attention for the GitLab security team.

GitLab's 30 day disclosure window, where vulnerability details are made public on their issue tracker after the patch release, provides a defined remediation timeline for administrators. This policy balances transparency with giving organizations time to patch, but it also means that detailed exploitation information will become publicly available, making timely upgrades essential.

References

Detect & fix
what others miss

Security magnifying glass visualization