9/12/2026
Rob

GitLab's Worst Flaw Just Got Exploited in a Day. The Pattern Is the Story.

Here's the version of this story that got the headlines: GitLab shipped a patch for a maximum-severity flaw, and attackers were already probing for it one day later. That's true, but it's the less interesting half of the news.

The more useful version: GitLab's own patch notes were barely dry before Jake Knott's threat-intel team at WatchTowr watched the exploit leave the wild. CVE-2026-85706 is a path-traversal bug in the repository commits API with a CVSS score of 10 out of 10 — the top of the scale. Under certain conditions, an unauthenticated attacker can read arbitrary files off the server in a single HTTP request. No account. No credentials. One POST to /api/v4/projects/{id}/repository/commits/ with a crafted file.path parameter is all it takes.

Knott was blunt about what that means. "The appeal to attackers of GitLab is obvious," he said, "as unauthorized access allows an attacker to gain access to source code, CI/CD secrets, credentials, and the ability to inject code into build pipelines." In other words, whoever owns the commits API owns everything downstream of it — and mass exploitation is likely to follow shortly.

The 24-hour countdown

The timeline is the story. GitLab released patched versions 19.1.8, 19.2.6, and 19.3.2 on Thursday, September 10. By Friday, WatchTowr's Attacker Eye honeypot network — a global trap for exactly this kind of probing — was already recording behavioral probes. Attackers had reverse-engineered the patch and reproduced the exploit before most operators had even scheduled their maintenance window.

That "one day" gap isn't a failure of WatchTowr's speed. It's the new reality of disclosure. The vulnerability, reported by a researcher going by s3ntago through GitLab's HackerOne bug-bounty program, stems from two compounding mistakes: improper path confinement and missing authentication enforcement in the same endpoint. The first says "we didn't sandbox the file path correctly." The second says "nobody checked who was asking." Together they're a CWE-22, the exact flaw class CISA and the FBI have called "unforgivable" since at least 2007.

GitLab flagged this one for the Known Exploited Vulnerabilities catalog with a federal patch deadline of September 14. That's three days from disclosure. The countdown is already running.

One batch, two criticals

Here's where the structural read kicks in. This is the second critical-severity GitLab vulnerability in weeks, after the GraphQL code-injection flaw (CVE-2026-19478) that was itself actively exploited almost immediately after disclosure. Two criticals in weeks, both exploited fast, both landing on an attack surface that holds some of the most sensitive data in enterprise IT.

The patch batch doesn't stop at one. The same release fixes CVE-2026-87719 — a CVSS-9.9 insecure deserialization bug in the GraphQL subscription serializer that lets an authenticated user with Duo Chat access lift Advanced Search instance configurations and sensitive credentials. Six more high-severity defects in the same window can enable remote code execution, expose protected CI/CD variables, mount XSS attacks, and cause denial-of-service. Seventeen other vulnerabilities in total. GitLab asked self-managed operators to upgrade immediately.

The scope makes it worse. GitLab runs on more than 30 million accounts and sits behind more than half of the Fortune 100 — Nvidia, Airbus, T-Mobile, Lockheed Martin, Goldman Sachs, UBS. Every one of those is a self-managed install or a hosted one. GitLab.com is already on the patched code, and the Dedicated single-tenant offering needs no action. But every on-premises instance reachable from the open internet is a live target until the upgrade lands.

The real tension

This is the part that should make an Ops lead stop and think. The problem isn't that GitLab ships bugs. Every platform does. The problem is the compounding rhythm: a CVSS-10 file-read hole, exploited in one HTTP request, probed within a day, with a second critical sitting in the same patch window. That's not a one-off defect. That's a pattern of weak path confinement in a tool whose whole job is holding your source code and your build credentials.

And here's the honest strategic math. A self-managed GitLab install is a DevOps trust anchor — it's where the code lives, where the deploy keys live, where the pipeline can be poisoned. When that anchor ships a bug an unauthenticated stranger can read files through, the security team isn't just patching a server. They're re-trusting the entire delivery chain. The "patch Tuesday" discipline that works for a desktop fleet is thinner and more dangerous when applied to the thing that builds everything.

The deeper lesson for the industry is that path traversal keeps coming back. It was "unforgivable" in 2007, it shipped again in May 2023, and it shipped again here — with missing authentication layered on top, as if the first mistake weren't enough. The mitigation isn't another advisory; it's treating source-code infrastructure with the same isolation and least-privilege hygiene you'd apply to a critical database, and testing the patch window against the reality that the exploit will be public within hours.

The kind of exposure review that finds a public-facing self-managed GitLab before an attacker does — inventorying who runs it, confirming exact versions, and checking the commits-API logs for the POST patterns WatchTowr laid out — is unglamorous work, and it's exactly the work that separates a fleet that survives the 24-hour window from one that doesn't. At DMC, we help teams stress-test precisely these decisions: which of your systems can you actually afford to be a day late on, and which ones are the anchors where a single unauthenticated read turns into a full supply-chain compromise. Need help prioritizing the patch that can't wait? Let's talk.