TechPastWeek logo
Security8 min read

GitLab's Perfect-Score Path Traversal Is Already Being Probed in the Wild

CVE-2026-85706 lets an unauthenticated attacker read files from a self-managed GitLab server. Probes began within a day of the patch.

Lines of source code displayed on a computer monitor
On this page

GitLab has patched a maximum-severity vulnerability that lets an unauthenticated attacker read arbitrary files from a self-managed GitLab server, and within roughly a day of the fix being published, security researchers were already observing attempts to find unpatched instances on the public internet.

Related reading: Fortinet's FortiMail Zero-Day Lets Attackers Write Files Without Logging In · Google Patches CVE-2026-58704, an Actively Exploited Pixel Modem Zero-Day.

The bug, tracked as CVE-2026-85706, carries a CVSS score of 10.0, the top of the scale. It is a path traversal issue in the repository commits API, and GitLab's own description is blunt about the cause: "improper path confinement and missing authentication enforcement" in that endpoint. In practice, that means an attacker who can reach the server over the network needs no account, no token and no user interaction to ask it for files it was never supposed to hand out.

GitLab shipped fixes in versions 19.1.8, 19.2.6 and 19.3.2, and told self-managed customers to upgrade immediately. "These versions contain important bug and security fixes, and we strongly recommend that all self-managed GitLab installations be upgraded to one of these versions immediately," the company wrote in its patch release notes. GitLab said its own hosted service, GitLab.com, was already running the patched code, and that GitLab Dedicated customers did not need to act, which leaves the exposure concentrated among organisations that run GitLab on their own infrastructure.

Why a file-read bug is a 10.0

It is tempting to treat "read arbitrary files" as a lesser problem than remote code execution. In the context of a platform that stores source code, pipeline definitions, deploy keys and access tokens, the distinction collapses. A file that can be read from a GitLab server hosts exactly the material an intruder needs to move from an anonymous network request to control over the software supply chain: administrator credentials, CI/CD secrets, database connection strings, signing keys and the API tokens that let automated systems push code or alter pipelines.

The CVSS vector spells out why the flaw scores at the ceiling. It is network-exploitable (AV:N), low-complexity (AC:L), needs no privileges (PR:N) and no user interaction (UI:N), and it has a changed scope (S:C), the vulnerability in one component lets an attacker affect resources beyond it. Confidentiality and integrity are both rated high.

The Affected Versions section of GitLab's advisory is unusually broad. Everything from version 18.7 up to the patched releases is impacted: GitLab Community Edition and Enterprise Edition versions before 19.1.8 on the 19.1 branch, before 19.2.6 on 19.2, and before 19.3.2 on 19.3. That is a large slice of every self-managed installation that has been kept reasonably current over the past year.

Patch first, then assume compromise

The patch removes the hole, but any server that was internet-facing and unpatched during the exposure window should be treated as a candidate for compromise. File-read flaws are reconnaissance tools as much as theft: an attacker who lifted secrets can return through legitimate credentials.

GitLab's fix arrived alongside several other security patches in the same release, including a critical insecure-deserialization issue in the GraphQL subscription serializer affecting Enterprise Edition, and a set of high-severity bugs covering a buffer overflow, a CI/CD variable-scope authorization error and two denial-of-service flaws in GraphQL complexity limiting. The path traversal is the one that set the timeline, because it was exploitable before authentication.

The researcher who reported it did so through GitLab's bug bounty programme on HackerOne, using the handle "s3ntago," according to BleepingComputer. That matters for defenders in a practical way: because the flaw was disclosed responsibly, patches existed before the details went public, which is the difference between a patch race and a rout.

The probe window was measured in hours

It did not stay quiet for long. The security firm watchTowr, which runs a network of sensors for emerging exploitation, said it began seeing real-world attempts to locate vulnerable GitLab servers almost immediately after the advisory.

"Based on the history, the transition of this vulnerability to indiscriminate mass exploitation is likely not far away, and defenders have limited time to act," watchTowr's Ben Knott said, in comments carried by The Hacker News. The firm published a detection signature for defenders: look for HTTP POST requests to URIs of the form /api/v4/projects/{id}/repository/commits/ that carry a file.Path parameter, which is the shape an exploit request takes.

By September 11, CISA had added CVE-2026-85706 to its Known Exploited Vulnerabilities catalog, which puts federal civilian agencies on a binding deadline to patch or document compensating controls. The KEV listing is the strongest public signal short of a vendor confirmation that a bug is being used rather than merely studied.

The gap between disclosure and probing is now measured in hours rather than weeks, and that compression is itself the story of 2026's most serious infrastructure bugs. Attackers increasingly automate the search for freshly disclosed flaws, so the useful question is not whether a bug will be targeted but how quickly a given organisation can inventory, patch and verify its exposed systems. For GitLab operators, the inventory problem is larger than it looks: a single organisation may run many self-managed instances (regional deployments, staging clusters, project-specific servers) and a vulnerability scanner that only covers the primary production instance will miss the copies that matter.

Responding to CVE-2026-85706

The remediation path is straightforward in outline and demanding in execution. Upgrade self-managed instances to 19.1.8, 19.2.6 or 19.3.2 on the matching branch, or to a later release. Where an immediate upgrade is impossible, restrict network access to the repository commits API and to the GitLab instance generally, since the flaw requires the attacker to reach the server directly.

Because the vulnerability is a file-read issue, patch-and-forget is not a complete answer. GitLab servers commonly hold credentials that outlive a software update: personal access tokens, CI/CD job tokens, deploy keys, known_hosts material and the contents of configuration files. Security teams that had an internet-exposed instance in the affected range during the exposure window should rotate credentials that were reachable from the filesystem and review GitLab access logs for unusual hits on the commits API. WatchTowr's detection guidance is a reasonable starting query, but the absence of matching log lines is not proof of safety, logs rotate, and a careful attacker reads nothing that would stand out.

There is a governance point underneath the technical one. The reason a 10.0 in a source-code platform matters more than a 10.0 in a peripheral application is that self-managed GitLab is often the trusted root of an organisation's build pipeline. Whatever an attacker can read there is, by design, sufficient to alter the software that everyone downstream trusts. Treating that system as a convenience install rather than a critical security boundary is the mistake this vulnerability exposes.

The wider pattern

CVE-2026-85706 lands in a crowded season of critical flaws in developer and IT infrastructure. In the space of a few weeks, organisations have been asked to patch a token-chaining flaw in JFrog Artifactory that could turn an anonymous request into an administrator token, a pair of pre-authentication bugs in SAP's kernel and NetWeaver message server, a presale-path flaw in PaperCut's print-management servers, and a critical zero-day in N-able's N-central remote management platform. The common thread is that the vulnerable software sits inside the perimeter, often holding the keys to everything behind it, and is frequently not patched on the same cadence as the internet-facing applications that get more attention.

The reason these bugs cluster is structural. Developer and IT platforms are built to be trusted by everything around them: they hold credentials, they sit inside the network, and they are usually administered by a small team that is already stretched. That combination makes them attractive targets and slow to patch, because an upgrade can break a build pipeline or an authentication integration nobody wants to touch. CVE-2026-85706 removes even the excuse of needing credentials to start, the only precondition is network reachability, which is precisely the property that makes a GitLab server useful to a distributed engineering team.

There is also a measurement problem. Organisations tend to know how many GitLab instances they deliberately run, and to have a much fuzzier picture of the ones that exist because a team spun one up for a project or that were stood up years ago and never retired. Internet-wide scanning services make it trivial for an attacker to find those forgotten servers; the same visibility that lets a security team audit its exposure also feeds the scanners aiming at it. The practical lesson from the past few weeks is that patch management for internal developer infrastructure has to be as aggressive as it is for the public-facing edge, and that asset inventory (knowing what you actually run) is the hard part.

For defenders, the sensible order of operations is to patch, then verify the patch took across every instance, then investigate the window in which an unpatched server was reachable. Credentials that touched the filesystem of an exposed instance should be treated as suspect until rotated, and logs should be checked for the file.Path pattern watchTowr published. None of that guarantees a clean bill of health, but it is the difference between responding to a known bug and discovering months later that it was the first step of a longer intrusion.

For GitLab specifically, the practical deadline is now. The fix is available, the exploitation has begun, and the cost of delay is measured in credentials that cannot be rotated as quickly as a server can be upgraded. Organisations should confirm their version, check their exposure and assume that any instance left open during the window is worth investigating, not because a compromise is certain, but because the evidence of one would be quiet, and the consequences of missing it would not be.

Cover image: TechPastWeek original composite using the GitLab logo (GitLab Inc., MIT licence).

Tags

Share

Found this useful? Share it with your team.

TPW Editorial

TPW Editorial

Editorial Team

TechPastWeek's editorial team reports and edits every story we publish. We research each piece against primary and credible secondary sources, and a human editor reviews and signs off before it goes live.

Featured & most read

Keep reading