A CVSS-10 Path Traversal in GitLab's Commits API Is Being Exploited

GitLab patched a maximum-severity unauthenticated file-read flaw in the repository commits API and CISA added it to the KEV catalog. Netics on why CVSS 10.0 in a self-managed DevSecOps tool

Netics feature card for the GitLab CVE-2026-85706 commits-API path traversal article with the official GitLab logo
Netics editorial feature card using the official GitLab identity

TL;DR

  • GitLab patched CVE-2026-85706, a path traversal in the repository commits API letting an unauthenticated attacker read arbitrary files from the server — CVSS 10.0, disclosed with the 19.3.2 / 19.2.6 / 19.1.8 critical patch release.
  • CISA added it to the Known Exploited Vulnerabilities catalog on September 11, 2026 — active exploitation, not a theoretical risk. The KEV entry is what should set the priority.
  • The affected range is broad: GitLab CE/EE from 18.7 before 19.1.8, 19.2 before 19.2.6, 19.3 before 19.3.2.
  • GitLab.com and GitLab Dedicated are already patched; the exposure is on self-managed instances, which must patch themselves.
  • What to do now: patch before anything else, verify the running version, then replay the three GitLab detection signatures against your historical logs.
Reproduction of the official GitLab critical patch advisory page for CVE-2026-85706
Reproduction of the official GitLab critical patch release page (19.3.2 / 19.2.6 / 19.1.8) documenting CVE-2026-85706; source: https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-3-2-released/

A file-read primitive inside the tool that holds your source

On September 11, GitLab shipped a critical patch release that closed CVE-2026-85706: a path traversal in the repository commits API that let an unauthenticated user read arbitrary files from the server. Read the advisory's own wording carefully, because the two faults it names are the story. GitLab describes "improper path confinement and missing authentication enforcement in the repository commits API" — that is an endpoint that forgot to do two of the three basic things an endpoint should do (check the path stays inside the intended root, check who is calling). Not an exotic side-channel; a routine omission with maximum severity.

The severity number matters. CVSS 10.0 with the vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N is about as close as the scoring system gets to "no conditions": network-reachable, no privileges, no user interaction, and the confidentiality impact is high with a scope change. For a self-managed GitLab, "arbitrary files" includes gitlab.yml and its secrets, repository contents, OAuth tokens, and anything else mounted where the Rails process can read it. In a tool whose entire job is to be the single source of truth for code, an unauthenticated file read is close to the worst possible primitive.

CISA's KEV entry is the part that should set the priority

The CISA Known Exploited Vulnerabilities catalog entry is the operational signal. CISA adds vulnerabilities to KEV only based on evidence of active exploitation — and under BOD 26-04 the entry imposes rapid-remediation deadlines on US federal agencies. For everyone else it is still the clearest public indicator we have that attackers are already using the flaw. When a CVSS 10.0 file read in a self-managed DevSecOps tool is both patchable and exploited, the ordering question is over. Feature upgrades wait; this one does not.

Reproduction of the official CISA alert adding CVE-2026-85706 to the KEV catalog
Reproduction of the official CISA alert "CISA Adds One Known Exploited Vulnerability to Catalog" (September 11, 2026) listing CVE-2026-85706; source: https://www.cisa.gov/news-events/alerts/2026/09/11/cisa-adds-one-known-exploited-vulnerability-catalog

The affected range is wider than your upgrade plan probably is

GitLab's advisory lists impacted versions as GitLab CE/EE from 18.7 before 19.1.8, 19.2 before 19.2.6, and 19.3 before 19.3.2. Three release lines, each needing its own patch. The practical failure mode at most self-managed sites is different: the instance sits on an earlier major (18.x, 17.x), possibly already past its support window, in a container or VM that has not moved in months because "nothing broke." That instance is still listed — the advisory's impact statement starts at 18.7, but the repository commits API exists on every GitLab. The responsible reading of the advisory is: if your instance is 18.7 or newer and not on one of the three patched points, you are affected; if it is older, you are patching everything, because the endpoint has been there longer.

Original Netics diagram: patch self-managed instances before feature upgrades
Original Netics diagram: the patch-first warning — an unauthenticated file read in GitLab exposes source, pipelines, tokens and secrets; source: GitLab advisory and CISA KEV entry

Managed versus self-managed is now a security statement

GitLab's own notes say the managed infrastructure — GitLab.com and GitLab Dedicated — remains patched. That sentence is doing more work than it looks like. For a company that picked self-managed GitLab partly to control its own data, the trade came due: you kept control of the instance, and you inherited the patch duty. There is no shame in self-managed as a choice; there is only the requirement that the choice include an update process that can move an instance within days of a KEV entry. A workload identity routine and patch cadence are the same discipline: the boundary only protects you if you operate it.

What to do now

Start with the patch. Upgrade to 19.3.2, 19.2.6, or 19.1.8 (or later) depending on your line, then verify the running version. After that, do the retrospective: GitLab released three threat detections for self-managed instances — an LFI attempt reading gitlab.yml, an LFI via the metadata.path parameter, and LFI file-path enumeration. Apply them, then replay them against historical access logs. The hard part is not the patch; it is the assumption that you would have noticed exploitation from routine log glance. Most teams would not: the requests look like ordinary commits-API calls.

Original Netics diagram: self-managed response checklist
Original Netics diagram: the self-managed response checklist — upgrade, verify the version, apply GitLab's three threat detections, replay signatures against logs, and rotate exposed secrets

For a review of your CI/CD security posture — patch cadence, workload identities, and the access boundaries around your code platforms — start from the Netics homepage. The patch is the immediate fix; the process is what survives the next CVE.

Sources

Source: "GitLab Critical Patch Release: 19.3.2, 19.2.6, 19.1.8" — docs.gitlab.com, September 11, 2026.