Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-87719

CVE-2026-87719: GitLab EE Information Disclosure Vulnerability

CVE-2026-87719 is an information disclosure flaw in GitLab Enterprise Edition that allows authenticated users to access sensitive credentials through GraphQL subscriptions. This article covers technical details, affected versions, impact assessment, and mitigation strategies.

Published:

CVE-2026-87719 Overview

CVE-2026-87719 is an insecure deserialization vulnerability in GitLab Enterprise Edition (EE) affecting all versions from 18.3 before 19.1.8, 19.2 before 19.2.6, and 19.3 before 19.3.2. An authenticated user with Duo Chat access can send a specially crafted GraphQL subscription argument that bypasses serialization and performs an arbitrary server object lookup. Successful exploitation exposes Advanced Search instance configurations and sensitive credentials. The flaw is classified under [CWE-502] Deserialization of Untrusted Data.

Critical Impact

An authenticated attacker with Duo Chat access can bypass GraphQL argument serialization to retrieve Advanced Search configuration and stored credentials, enabling downstream compromise of connected search infrastructure.

Affected Products

  • GitLab EE versions 18.3 through 19.1.7
  • GitLab EE versions 19.2 through 19.2.5
  • GitLab EE versions 19.3 through 19.3.1

Discovery Timeline

  • 2026-09-12 - CVE-2026-87719 published to NVD
  • 2026-09-16 - Last updated in NVD database

Technical Details for CVE-2026-87719

Vulnerability Analysis

The vulnerability resides in how GitLab EE processes GraphQL subscription arguments within Duo Chat functionality. GitLab's GraphQL layer accepts a subscription argument that is deserialized into a server-side object reference. The argument parsing routine fails to constrain the object types that can be resolved through the lookup. An attacker crafts an argument that instructs the resolver to return internal service objects rather than the expected user-scoped entities. Those internal objects include Advanced Search integration configuration, which references Elasticsearch or OpenSearch endpoints along with their credentials.

Because the returned objects are serialized into the subscription response, credentials that would normally remain server-side become directly visible to the requesting client. The attacker requires only authenticated access with Duo Chat permissions, which is available to standard project members in many deployments.

Root Cause

The root cause is unsafe deserialization of client-controlled GraphQL argument data followed by an unbounded server object lookup. The resolver trusts the deserialized identifier to select which server-side object to load, and it does not enforce type allow-listing or authorization on the resolved object. This pattern maps to [CWE-502] Deserialization of Untrusted Data.

Attack Vector

Exploitation occurs over the network against the GitLab GraphQL endpoint. The attacker authenticates as any user with Duo Chat access, then issues a GraphQL subscription containing the crafted argument. The server deserializes the argument, resolves an internal configuration object, and returns its fields including instance-level Advanced Search settings and secrets. No user interaction is required beyond the attacker's own request. Because the scope changes across security boundaries, credentials for external search infrastructure can be extracted from a low-privilege session.

No public proof-of-concept code is available. Technical details are tracked in GitLab Work Item 628160 and HackerOne Report #4012289.

Detection Methods for CVE-2026-87719

Indicators of Compromise

  • GraphQL subscription requests to /api/graphql containing unusual or non-standard argument structures from accounts with Duo Chat access.
  • Outbound authentication attempts to Advanced Search endpoints (Elasticsearch/OpenSearch) originating from unexpected source IPs shortly after suspicious GraphQL activity.
  • Unexpected read access patterns against Duo Chat subscription resolvers in production_json.log.

Detection Strategies

  • Inspect GitLab api_json.log and graphql_json.log for subscription operations referencing Duo Chat with malformed or oversized argument payloads.
  • Alert on GraphQL responses returning fields that reference Advanced Search configuration objects outside of administrative contexts.
  • Correlate authentication events on the Advanced Search cluster with GitLab user sessions to detect credential reuse from unexpected locations.

Monitoring Recommendations

  • Enable verbose GraphQL request logging on GitLab and forward logs to a centralized analytics platform for retention and query.
  • Monitor Advanced Search cluster access logs for authentication attempts using stored GitLab integration credentials from non-GitLab source IPs.
  • Track rate and diversity of GraphQL subscription operations per user account to surface reconnaissance activity.

How to Mitigate CVE-2026-87719

Immediate Actions Required

  • Upgrade GitLab EE to 19.1.8, 19.2.6, or 19.3.2 or later, matching the deployed major/minor branch.
  • Rotate Advanced Search integration credentials and any secrets stored within GitLab instance configuration after patching.
  • Audit user accounts with Duo Chat access and revoke access for accounts that do not require it.

Patch Information

GitLab has released fixed versions 19.1.8, 19.2.6, and 19.3.2 that address the deserialization flaw in the GraphQL subscription argument handler. Administrators running any version from 18.3 onward should upgrade to the appropriate patched release. Refer to GitLab Work Item 628160 for the vendor tracking record.

Workarounds

  • Disable the Duo Chat feature for the instance until patching is complete if the feature is not business-critical.
  • Restrict Duo Chat access via role and group membership to a minimal set of trusted users.
  • Place a web application firewall rule in front of /api/graphql to block subscription operations containing unexpected argument types.
bash
# Verify installed GitLab EE version and upgrade to a patched release
sudo gitlab-rake gitlab:env:info | grep "GitLab information" -A 5

# Debian/Ubuntu upgrade example (adjust version to the fixed release for your branch)
sudo apt-get update && sudo apt-get install gitlab-ee=19.3.2-ee.0

# RHEL/CentOS upgrade example
sudo yum install gitlab-ee-19.3.2-ee.0

# Reconfigure and restart
sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart

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.