GitLab’s Critical Patch Closes a Path Traversal Flaw Attackers Are Already Probing

GitLab administrators got an unwelcome reminder this week that a single API endpoint can undo years of access control work. On September 10, GitLab shipped a critical patch release — versions 19.3.2, 19.2.6 and 19.1.8 — to fix 18 security vulnerabilities, two of them rated critical. One of those two is about as bad as a vulnerability gets: an unauthenticated attacker can read arbitrary files off a self-managed GitLab server without so much as a login attempt.

That flaw, tracked as CVE-2026-85706, lives in GitLab’s repository commits API. GitLab describes it as improper path confinement combined with missing authentication enforcement on the endpoint. In practice, that means someone outside the organization, with no credentials, could send a crafted request and pull back files that should never leave the server: configuration files, tokens, SSH keys, database credentials. GitLab gave it a CVSS score of 10.0, the maximum on the scale, because it requires no authentication and very little technical skill to exploit. The affected range is broad — CE and EE versions 18.7 through 19.1.7, 19.2.0 through 19.2.5, and 19.3.0 through 19.3.1 — covering many self-managed instances still running last year’s releases.

Security researchers aren’t treating this as theoretical. Threat intelligence firm watchTowr reported in-the-wild probing for the vulnerability almost as soon as details became public, and its honeypot network is tracking exploitation attempts as they show up. GitLab.com and GitLab Dedicated customers are already patched, so the exposure sits squarely with self-managed installations that haven’t updated yet. If your GitLab instance is internet-facing and still on an affected version, the window between disclosure and exploitation has already closed for the attackers watching for it.

The second critical flaw, CVE-2026-87719, carries a CVSS score of 9.9 and affects Enterprise Edition only. It’s an insecure deserialization bug in the GraphQL subscription serializer, and it requires an authenticated user with Duo Chat access—a lower bar than it sounds in most enterprise deployments, where Duo Chat is rolling out broadly. An attacker who meets that bar can submit a specially crafted GraphQL subscription argument to pull Advanced Search configuration data and credentials out of the system. Pair that with the first flaw, and you have a path from zero access to credential theft that doesn’t require much patience.

Mitch Ashley, vice president and practice lead for CIO & Technology Buyers and Software Lifecycle Engineering at The Futurum Group, sees the timing as the real issue. “The gap is between machine-speed probing and calendar-speed patching,” he said. “Self-managed installs carry that risk alone, because the vendor’s hosted service is already patched and the on-prem instance is the one facing the internet.” He said the response has to be structural, not just faster patching this one time. “Monthly and quarterly patch windows were built for a slower disclosure cycle. Teams running their own DevOps platform should know their advisory-to-production time and shorten it before the next maximum-severity bug lands.”

The rest of the release reminds us that “critical” doesn’t mean “the only thing that matters.” GitLab also patched a high-severity buffer overflow in its Unicode conversion wrapper (CVSS 8.5) that can lead to remote code execution in Enterprise Edition when a malicious project export is imported during Advanced Search indexing — a good argument for treating project imports as untrusted input, not routine housekeeping. Another high-severity issue let developers access protected CI/CD variables they shouldn’t have been able to see, which matters for any team using those variables to gate deployment credentials. Rounding out the list: cross-site scripting in the Markdown JSON table renderer, incorrect scoping of CI/CD environment variables, and two denial-of-service bugs in GraphQL’s complexity limiter. GitLab’s medium-severity fixes add a SAML SSO bypass and exposed credentials in Workhorse to the pile. None of these are headline-grabbing on their own, but stacked together they describe an application surface — API endpoints, GraphQL, CI/CD variable handling — that keeps generating the same categories of bugs release after release.

GitLab is telling self-managed customers to upgrade immediately, and for once that’s not boilerplate. The company’s own advisory flags that some of the included database migrations can cause downtime on single-node deployments, so this isn’t a patch to schedule for next sprint. Teams running GitLab on-prem or in a private cloud should treat this the way they’d treat any actively probed, unauthenticated, maximum-severity CVE: patch first, then plan the maintenance-window communication.

There’s a broader pattern worth sitting with here, too. GitLab has shipped several patch releases this year addressing GraphQL-related bugs, CI/CD variable-scoping issues, and authorization gaps around protected environments. Individually, each gets fixed and moves on. Collectively, they point to how much attack surface modern DevOps platforms have accumulated as they’ve added AI features, expanded API access, and layered permission models on top of permission models. GitLab isn’t unique in this — every platform vendor building agentic features and deeper integrations is expanding what a determined attacker can probe. The lesson for platform teams isn’t that GitLab is uniquely risky. It’s that the software supply chain’s most trusted tools are also its highest-value targets, and patch cadence has to keep pace with how fast that target gets probed once a CVE goes public.

Read More

Scroll to Top