Skip to main content
CVE Vulnerability Database

CVE-2025-9825: GitLab Information Disclosure Vulnerability

CVE-2025-9825 is an information disclosure vulnerability in GitLab CE/EE that allows unauthorized users to view sensitive CI/CD variables via GraphQL API. This article covers technical details, affected versions, and mitigation.

Published:

CVE-2025-9825 Overview

GitLab has patched an authorization flaw in GitLab Community Edition (CE) and Enterprise Edition (EE) that exposed sensitive manual CI/CD variables through the GraphQL API. The vulnerability affects all versions from 13.7 up to 18.2.8, 18.3 before 18.3.4, and 18.4 before 18.4.2. Authenticated users who lack project membership can query the GraphQL endpoint and retrieve manual pipeline variables intended only for project members. The flaw is classified as a missing authorization issue [CWE-862] and results in confidentiality loss without impacting integrity or availability.

Critical Impact

Any authenticated GitLab user can read sensitive manual CI/CD variables — often containing tokens, API keys, or deployment secrets — from projects they do not belong to.

Affected Products

  • GitLab CE/EE versions 13.7 through 18.2.8
  • GitLab CE/EE 18.3 before 18.3.4
  • GitLab CE/EE 18.4 before 18.4.2

Discovery Timeline

  • 2025-10-08 - GitLab releases patch versions 18.4.2, 18.3.4, and 18.2.9
  • 2025-11-21 - CVE-2025-9825 published to NVD
  • 2026-06-17 - Last updated in NVD database

Technical Details for CVE-2025-9825

Vulnerability Analysis

The vulnerability resides in GitLab's GraphQL API layer, which handles queries for CI/CD pipeline metadata. Manual CI/CD variables are user-supplied inputs used when triggering pipelines manually, and they frequently contain secrets such as deployment credentials, cloud API keys, and authentication tokens.

The GraphQL resolver responsible for returning manual variable data failed to enforce project membership checks. Any authenticated user, regardless of role or project association, could construct a GraphQL query targeting a project and retrieve the manual variable values. The bug persisted across a wide version range spanning nearly five years of GitLab releases.

Exploitation requires only low-privilege authenticated access and can be performed remotely over the network. No user interaction is needed, and the attack complexity is low.

Root Cause

The root cause is a missing authorization check [CWE-862] on the GraphQL resolver that returns manual CI/CD variables. GitLab enforces membership-based access control on the REST API and UI equivalents, but the corresponding GraphQL query path did not apply the same permission gate. This inconsistency between API surfaces created the disclosure pathway.

Attack Vector

An attacker needs an authenticated GitLab account on the target instance. On public GitLab.com or any instance that permits self-registration, this bar is trivial. The attacker sends a crafted GraphQL query referencing the target project's path and the manual variables field. The server returns the variable names and values without validating whether the caller is a project member. Additional details are available in the GitLab Issue #567301 and the HackerOne Report #3319800.

No verified public exploit code has been released for this vulnerability. Refer to the linked vendor references for technical detail.

Detection Methods for CVE-2025-9825

Indicators of Compromise

  • GraphQL POST requests to /api/graphql from user accounts that are not members of the queried project
  • Query bodies referencing ciManualVariables, pipeline, or similar fields tied to manual variable enumeration
  • Unusual spikes in GraphQL query volume from a single authenticated session or token
  • Access patterns where a single account queries many unrelated projects in short succession

Detection Strategies

  • Correlate GitLab audit logs and GraphQL access logs against project membership tables to flag cross-project variable reads
  • Alert on authenticated non-member accounts issuing GraphQL queries that return CI/CD variable data
  • Baseline normal GraphQL query patterns per user and identify statistical outliers targeting sensitive fields

Monitoring Recommendations

  • Forward GitLab production logs, audit events, and GraphQL request logs to a centralized analytics platform for retrospective hunting
  • Monitor secret-scanning alerts on downstream systems for tokens that may have been exfiltrated as manual variables
  • Track version drift across self-managed GitLab instances to ensure patched builds are deployed

How to Mitigate CVE-2025-9825

Immediate Actions Required

  • Upgrade self-managed GitLab CE/EE instances to 18.4.2, 18.3.4, or 18.2.9 or later without delay
  • Rotate all secrets that were stored as manual CI/CD variables, including API tokens, deployment keys, and cloud credentials
  • Review project audit logs and GraphQL access logs for suspicious cross-project queries during the exposure window
  • Restrict user self-registration and enforce role-based access on internal GitLab deployments

Patch Information

GitLab addressed the flaw in patch release 18.4.2, along with backports to the 18.3.x and 18.2.x branches. Full details are available in the GitLab Patch Release 18.4.2 announcement. GitLab.com was updated by the vendor. Self-managed instances must be upgraded manually.

Workarounds

  • No official workaround exists short of patching; restrict authenticated access to trusted users until the upgrade is complete
  • Migrate secrets from manual CI/CD variables to an external secrets manager referenced at pipeline runtime
  • Temporarily disable manual pipeline triggers for projects handling high-value secrets where feasible
bash
# Verify GitLab version after upgrade (self-managed)
sudo gitlab-rake gitlab:env:info | grep "GitLab information" -A 3

# Or via API
curl --header "PRIVATE-TOKEN: <admin_token>" \
  https://gitlab.example.com/api/v4/version

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.