The Brief/Vulnerabilities

CVE-2026-85706: Unauthenticated file reading in GitLab

CVE-2026-85706 (CVSS 10): Path traversal vulnerability affecting GitLab's commits API, actively exploited within 24 hours of disclosure

Mickaël Walter
Extract of the CVE-2026-85706 VulnPilot entry

What Happened

On September 10, 2026, GitLab released a critical security update addressing CVE-2026-85706, a vulnerability affecting the repository commits API.

The vulnerability combines:

  • incorrect path escaping;
  • a lack of authentication checks under certain conditions;
  • the ability for an unauthenticated remote attacker to read arbitrary files on the GitLab server.

GitLab assigned this vulnerability a CVSS score of 10.0.

A KEV Entry in Less Than 24 Hours

On September 11, the day after the patches were released, CISA added CVE-2026-85706 to its Known Exploited Vulnerabilities (KEV) catalog.

The remediation deadline set for U.S. federal agencies is September 14, 2026. The KEV entry also indicates that forensic triage is required under BOD 26-04.

This sequence is significant: the risk is not merely theoretical or inferred from the CVSS score. Field observations were reported very quickly after the patch was released.

Exploitation attempts were observed as early as September 11 at 06:00 UTC. This suggests that attackers had already replicated the exploitation mechanism.

Why is this vulnerability critical for DevOps and SOC teams?

CVE-2026-85706 is not just a simple read vulnerability in an isolated component. GitLab is often at the center of the software delivery chain and has privileged access to many systems.

Potentially Highly Sensitive Files

Depending on the configuration and permissions of the GitLab process, arbitrary file reading could expose:

  • .env files that may contain secrets;
  • SSH keys;
  • deployment tokens;
  • CI/CD variables or secrets;
  • information useful for subsequent compromise, particularly through source code compromise.

The vulnerability is described as arbitrary file reading, not as direct remote code execution. It therefore does not automatically turn the instance into a computer worm. However, the retrieved secrets could be used to gain access to runners, repositories, cloud environments, or production systems.

Why self-managed instances?

The priority scope covers self-managed GitLab CE/EE instances, particularly when they are accessible from the Internet.

Note the following distinctions:

  • GitLab.com: Already fixed, according to GitLab; no specific action is required on the part of customers;
  • GitLab Dedicated: GitLab also states that no action is required on the part of customers;
  • Self-managed GitLab CE/EE: immediate version verification and patching are required.

An organization may therefore have patched its workstations and scanners while leaving an internal GitLab instance exposed—one that has become accessible from the Internet—or an incorrectly configured administration endpoint, VPN, or proxy.

A particularly short exploitation window

The timeline follows what has become a classic pattern:

  • release of a vendor patch;
  • rapid analysis of the patch;
  • reproduction of the vulnerability;
  • scanning the Internet;
  • opportunistic exploitation.

The timeframe observed here—about one day—should prompt teams to treat critical patches for exposed products as operational incidents, mobilizing the SOC and the platform.

Which versions are affected, and which fixes should be applied?

CVE-2026-85706 is fixed in the following GitLab CE and EE releases:

  • 19.1 branch: fixed in 19.1.8;
  • 19.2 branch: fixed in 19.2.6;
  • 19.3 branch: fixed in 19.3.2.

The affected range begins with GitLab 18.7. Versions 18.7.x through the unfixed versions of the 19.3 branch should therefore be addressed according to their support status and upgrade path.

Another critical vulnerability in the same release

The same update also fixes CVE-2026-87719, a GraphQL deserialization EE vulnerability rated at a CVSS score of 9.9.

It is not, at this time, known to be actively exploited. Nevertheless, it provides an additional reason to apply the full release rather than seek a partial fix.

What should you do, specifically?

1. Take inventory of GitLab instances

Start by identifying:

  • all GitLab CE/EE instances deployed in your IT system;
  • their exact edition and version;
  • their internet exposure;
  • any reverse proxies and WAFs placed in front of them;
  • associated runners;
  • environments accessible via pipelines;
  • service accounts and secrets present on the instance.

Don’t limit yourself to the cloud inventory or officially declared assets. Test and development instances, or those acquired by a team, may contain secrets that can be reused in production.

2. Fix immediately

Prioritize instances that are:

  • accessible from the Internet;
  • used for production pipelines;
  • hosting sensitive repositories;
  • running privileged runners;
  • containing cloud, registry, or deployment integrations.

If the patch cannot be applied immediately, temporarily restrict network access to the instance. This measure is not a substitute for upgrading, but it can reduce the exposure window.

3. Look for exploitation attempts

The patch does not allow you to determine whether the instance was accessed before the update. You must therefore examine the available logs, including:

  • reverse proxy logs;
  • GitLab Rails and NGINX logs;
  • WAF logs;
  • authentication logs;
  • network logs;
  • API endpoint access logs.

Look for HTTP POST requests to URIs of the following types:

/api/v4/projects/{id}/repository/commits/

with parameters related to:

file.path

Elements to correlate include:

  • unauthenticated requests;
  • abnormal paths or attempts to navigate outside the expected directory;
  • repeated requests across multiple projects;
  • unusual or large responses;
  • access occurring between the disclosure of the vulnerability and the release of a patch;
  • subsequent retrieval of secrets or use of tokens.

The absence of traces does not prove the absence of exploitation, particularly if log retention is short or if a proxy has removed certain parameters.

4. Perform a forensic triage

If a vulnerable instance was exposed or if attacks are detected:

  • preserve the logs before rotation;
  • export relevant events;
  • preserve the instance’s metadata;
  • compare sensitive files with a known reference;
  • search for new accounts, keys, or tokens;
  • examine runner activity;
  • verify CI/CD jobs launched after the exposure;
  • check for unusual outbound connections;
  • document the timeline: exposure, probes, patch, rotation.

It is important to conduct this forensic analysis to determine whether an exploit occurred and to generate new secrets if a successful exploit is detected. This is especially true if the instance has not been patched by the end of the first day after the vulnerability was disclosed.

5. Rotate potentially compromised secrets

If a compromise is plausible, rotate the secrets that may have been compromised:

  • SSH keys;
  • GitLab tokens;
  • deployment tokens;
  • CI/CD variables;
  • cloud secrets;
  • certificates and private keys;
  • credentials used by runners.

Rotation should be accompanied by a search for misuse: a stolen secret may remain exploitable even after the patch is applied.

Why prioritize this vulnerability?

CVE-2026-85706 exhibits several strong indicators:

  • accessible from the Internet;
  • no privilege requirements;
  • low complexity;
  • reading of sensitive files;
  • a core product in the DevOps pipeline;
  • observations of in-the-wild attempts;
  • inclusion in the CISA KEV catalog;
  • immediate remediation deadline;
  • need for forensic triage.

This is precisely the type of case where prioritization must combine CVE, KEV, asset exposure, and real-world telemetry.

Conclusion

CVE-2026-85706 must be addressed urgently—including both applying the patch and detecting exploitation attempts—by any organization operating a self-managed GitLab CE/EE instance.

The priority is clear:

  • identify affected instances;
  • confirm their exposure;
  • apply 19.1.8, 19.2.6, or 19.3.2;
  • search for suspicious requests on the commits API;
  • conduct a forensic triage if exposure is confirmed;
  • rotate secrets in the event of a possible compromise.

The inclusion in the KEV and the September 14, 2026, deadline serve as a stark reminder of an operational reality: the CVSS score is no longer sufficient to guide decision-making. The speed of exploitation, the criticality of GitLab in the CI/CD pipeline, and the presence of in-the-wild indicators must guide the response.

Sources

Share

Stay informed

Receive our latest articles and analyses directly in your inbox.