Brief Summary: GitLab GraphQL API Denial of Service via Repeated Unauthenticated Queries (CVE-2025-12664)

A short review of CVE-2025-12664, a high severity denial of service vulnerability in GitLab's GraphQL API that allowed unauthenticated attackers to exhaust server resources. Includes patch information and affected version details.

CVE Analysis

7 min read

ZeroPath CVE Analysis
ZeroPath CVE Analysis

2026-04-08

Brief Summary: GitLab GraphQL API Denial of Service via Repeated Unauthenticated Queries (CVE-2025-12664)
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 five year old flaw in GitLab's GraphQL API quietly gave any unauthenticated user the ability to bring a self managed GitLab instance to its knees with nothing more than repeated HTTP requests. CVE-2025-12664, patched on April 8, 2026, addresses an improper input quantity validation issue that allowed volumetric denial of service against GitLab CE and EE installations spanning every release from 13.0 onward.

Given GitLab's position as a Leader in the 2024 Gartner Magic Quadrant for DevOps Platforms and its nearly $1 billion in annual revenue, the blast radius of this vulnerability is substantial. Any internet facing, self managed GitLab instance running an unpatched version is a viable target, and the attack requires zero authentication.

Technical Information

Root Cause: CWE 1284 and Missing Volumetric Controls

The vulnerability is classified under CWE 1284: Improper Validation of Specified Quantity in Input. At its core, the GitLab GraphQL API did not adequately validate or constrain the volume and frequency of incoming GraphQL queries from unauthenticated users. This is a distinct issue from query complexity validation. GitLab already implements complexity scores for individual GraphQL queries and enforces a 30 second timeout per request. However, those controls address the computational cost of a single query, not the sheer number of queries an unauthenticated client can submit in rapid succession.

The absence of strict volumetric rate limiting on the general GraphQL endpoint meant the server would continuously accept and process incoming queries regardless of how many were being submitted. An attacker could simply flood the endpoint with repeated GraphQL queries, and the backend would dutifully attempt to service each one.

Attack Flow

The exploitation path is straightforward:

  1. An attacker identifies a publicly accessible GitLab instance (CE or EE) running any version from 13.0 through the unpatched 18.10.x, 18.9.x, or 18.8.x branches.
  2. The attacker sends a high volume of GraphQL queries to the /api/graphql endpoint. No authentication token or session cookie is required.
  3. The GitLab backend begins processing each query. Because there is no volumetric cap on unauthenticated requests, the server allocates resources (CPU, memory, Sidekiq workers) for every incoming query.
  4. The Sidekiq job queues fill up as the system struggles to keep pace with the incoming request volume.
  5. Legitimate queries from authenticated users begin experiencing severe latency, eventually hitting the 30 second timeout threshold and failing.
  6. In extreme cases, the resource exhaustion triggers Out of Memory (OOM) kills at the operating system level, effectively taking the GitLab instance offline.

The CVSS vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H accurately reflects this attack profile: network accessible, low complexity, no privileges required, no user interaction needed, and high impact to availability with no impact to confidentiality or integrity.

It is worth noting that this vulnerability is mechanistically different from the earlier related issues CVE-2025-8014 and CVE-2025-10004, which targeted CWE 770 (resource allocation without limits or throttling) and involved bypassing query complexity limits. CVE-2025-12664 is specifically about validating the specified quantity of input operations rather than the computational cost of each individual query. The fix therefore introduces a different class of control.

Patch Information

GitLab addressed CVE-2025-12664 in a coordinated patch release published on April 8, 2026. The fix was shipped across three supported branches simultaneously, covering both GitLab Community Edition and Enterprise Edition. GitLab.com was already running the patched version at the time of disclosure, and GitLab Dedicated customers required no additional action.

The patched versions are:

BranchFixed Version
18.8.x18.8.9
18.9.x18.9.5
18.10.x18.10.3

Note that GitLab skipped version numbers 18.10.2, 18.9.4, and 18.8.8; there are no packages with those versions.

The fix centers on introducing proper input quantity validation on the GraphQL endpoint. While the exact code diff is not yet publicly available (the associated GitLab work item gitlab-org/gitlab#579376 remains confidential, as is standard GitLab practice for the 30 days following a security release), the nature of the CWE and advisory description tell us what was remediated. GitLab added controls to validate and constrain the quantity of GraphQL queries an unauthenticated user can issue, effectively capping the resource consumption that repeated queries could cause.

The patch release does not include any new database migrations, and multi node deployments should not require downtime to apply it. Administrators using Omnibus packages should be aware that the system will automatically stop, run migrations, and restart by default. To prevent this behavior during updates, administrators can add a skip auto reconfigure file to their configuration.

Defense in Depth: Rate Limiting Configuration

Beyond patching, administrators should review their instance level rate limits as an additional layer of protection. GitLab allows administrators to configure User and IP rate limits, which are disabled by default:

Rate Limit TypeDefault StatusRecommended Action
User and IP Rate LimitsDisabledEnable in Admin area to throttle unauthenticated IPs
Raw Endpoint Limits800 requests per minuteMonitor for abuse
GraphQL aiAction Mutation160 calls per 8 hoursLeave as default (not configurable)

Enabling User and IP rate limits provides a meaningful layer of defense against volumetric attacks targeting the API, even after patching.

Affected Systems and Versions

The vulnerability affects an exceptionally broad range of GitLab releases:

  • GitLab CE and EE 18.10.x: versions 18.10.0 through 18.10.2 (fixed in 18.10.3)
  • GitLab CE and EE 18.9.x: versions 18.9.0 through 18.9.4 (fixed in 18.9.5)
  • GitLab CE and EE 18.8.x and all older branches: all versions from 13.0 through 18.8.8 (fixed in 18.8.9)

This means the vulnerability has been present in the GitLab codebase for over five years, spanning hundreds of individual releases. Any self managed GitLab instance running a version within these ranges and exposing the GraphQL API to untrusted networks is vulnerable.

GitLab SaaS (gitlab.com) and GitLab Dedicated instances are not affected, as GitLab applied the patch to its hosted infrastructure prior to public disclosure.

Vendor Security History

GitLab maintains a transparent and well resourced security program. The company operates one of the most active bug bounty programs on HackerOne, having paid out over $6.4 million in total bounties to date. CVE-2025-12664 was itself discovered through this program by the researcher foxribeye (HackerOne Report #3377091).

GitLab follows a strict patch cadence, releasing scheduled security updates twice a month. The company publishes technical details of vulnerabilities on their issue tracker 30 days after a patch is released, giving administrators a defined window to apply fixes before exploitation details become public. This 30 day disclosure window is particularly relevant here: organizations should treat it as a hard deadline for patching, as threat actors routinely monitor GitLab's issue tracker for newly unsealed vulnerability details.

The related GraphQL denial of service issues CVE-2025-8014 and CVE-2025-10004 (targeting CWE 770) indicate that the GraphQL API has been a recurring area of security concern, with multiple researchers identifying different classes of resource exhaustion vulnerabilities in the same subsystem.

References

Detect & fix
what others miss

Security magnifying glass visualization