Skip to main content
CVE Vulnerability Database

CVE-2021-4191: GitLab Auth Bypass Vulnerability

CVE-2021-4191 is an authentication bypass flaw in GitLab CE/EE that enables user enumeration on private instances through the GraphQL API. This article covers technical details, affected versions, and mitigation.

Published:

CVE-2021-4191 Overview

An information disclosure vulnerability has been discovered in GitLab CE/EE that allows unauthenticated attackers to enumerate user accounts through the GraphQL API. This vulnerability affects private GitLab instances with restricted sign-ups, potentially exposing sensitive user information to unauthorized parties. The flaw enables attackers to gather intelligence about valid usernames and accounts, which could be leveraged for subsequent attacks such as credential stuffing, phishing campaigns, or targeted social engineering.

Critical Impact

Unauthenticated attackers can enumerate valid user accounts on private GitLab instances through the GraphQL API, potentially enabling reconnaissance for credential-based attacks.

Affected Products

  • GitLab Community Edition (CE) versions 13.0 to 14.6.5
  • GitLab Enterprise Edition (EE) versions 14.7 to 14.7.4
  • GitLab CE/EE versions 14.8 to 14.8.2

Discovery Timeline

  • 2022-03-28 - CVE-2021-4191 published to NVD
  • 2024-11-21 - Last updated in NVD database

Technical Details for CVE-2021-4191

Vulnerability Analysis

This vulnerability represents a GraphQL API security flaw that enables user enumeration attacks against GitLab instances. The core issue lies in insufficient access controls on the GraphQL API endpoints, which fail to properly validate authentication status before returning user-related information. Even on GitLab instances configured with restricted sign-ups (intended to limit access to authorized users only), unauthenticated requests to the GraphQL API can reveal information about existing user accounts.

The attack surface is particularly concerning for organizations that have deployed private GitLab instances under the assumption that restricting sign-ups would prevent external reconnaissance. Attackers can systematically query the GraphQL API to build a list of valid usernames, which serves as valuable intelligence for subsequent attack phases.

Root Cause

The root cause of CVE-2021-4191 stems from missing authentication checks in the GitLab GraphQL API implementation. The API endpoints responsible for user-related queries do not enforce proper authorization validation, allowing queries to be processed and respond with user enumeration data even when the requester is not authenticated. This represents an access control failure where sensitive functionality was inadvertently exposed to unauthenticated users.

Attack Vector

The attack is network-based and requires no authentication or user interaction, making it highly accessible to remote attackers. An adversary can craft GraphQL queries targeting the vulnerable API endpoints to systematically enumerate users on the target GitLab instance.

The attack flow typically involves:

  1. Identifying a target GitLab instance accessible over the network
  2. Crafting GraphQL queries designed to extract user information
  3. Iterating through potential usernames or leveraging wildcard queries
  4. Collecting valid user account information from API responses
  5. Using gathered intelligence for credential stuffing, phishing, or other attacks

The vulnerability does not require any privileges and can be exploited by anyone with network access to the GitLab instance's GraphQL API endpoint. For more technical details, see the HackerOne Report #1089609 and GitLab Issue #343898.

Detection Methods for CVE-2021-4191

Indicators of Compromise

  • Unusual volume of unauthenticated GraphQL API requests targeting user-related queries
  • Sequential or patterned queries to the /api/graphql endpoint from external IP addresses
  • Log entries showing repeated GraphQL introspection or user enumeration query patterns
  • Spike in API errors related to user lookups from unauthenticated sessions

Detection Strategies

  • Monitor GitLab access logs for high-frequency requests to GraphQL endpoints without authentication tokens
  • Implement rate limiting alerts on the GraphQL API to detect enumeration attempts
  • Configure SIEM rules to flag suspicious patterns of user-related GraphQL queries from single IP addresses
  • Deploy web application firewall (WAF) rules to detect and block GraphQL enumeration payloads

Monitoring Recommendations

  • Enable detailed logging for all GraphQL API requests including query content and authentication status
  • Set up alerts for unauthenticated API access attempts, particularly targeting user-related schemas
  • Monitor for reconnaissance activity patterns that may indicate pre-attack intelligence gathering
  • Correlate GraphQL enumeration attempts with subsequent authentication failures to detect credential stuffing campaigns

How to Mitigate CVE-2021-4191

Immediate Actions Required

  • Upgrade GitLab CE/EE to version 14.8.2 or later, 14.7.4 or later, or 14.6.5 or later depending on your release branch
  • Review GitLab access logs for evidence of user enumeration attempts prior to patching
  • Implement network-level access controls to restrict GraphQL API access to trusted networks
  • Enable rate limiting on the GraphQL API to slow potential enumeration attacks

Patch Information

GitLab has released security patches addressing this vulnerability. Organizations should update to the following patched versions:

  • Version 14.8.2 or later for the 14.8.x branch
  • Version 14.7.4 or later for the 14.7.x branch
  • Version 14.6.5 or later for the 14.6.x branch

Refer to the GitLab CVE-2021-4191 Details for official patch information.

Workarounds

  • Restrict network access to the GitLab GraphQL API endpoint using firewall rules or reverse proxy configurations
  • Implement additional authentication requirements at the network layer (VPN, IP allowlisting) for GitLab access
  • Configure rate limiting on the /api/graphql endpoint to mitigate automated enumeration attempts
  • Consider temporarily disabling GraphQL API access for unauthenticated users if immediate patching is not feasible
bash
# Example: Configure nginx rate limiting for GitLab GraphQL API
# Add to nginx configuration to limit enumeration attempts

# Define rate limiting zone
limit_req_zone $binary_remote_addr zone=graphql_limit:10m rate=10r/s;

# Apply to GitLab GraphQL endpoint
location /api/graphql {
    limit_req zone=graphql_limit burst=20 nodelay;
    proxy_pass http://gitlab-workhorse;
}

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.