GitLab CVE-2026-110264: a CVSS 10.0 Unauthenticated RCE in Every Self-Managed Release Since 2014

Jerzy Kopaczewski 21 October 2026 6 min read
Contents
On 21 October 2026, GitLab shipped an out-of-band release fixing CVE-2026-110264, an unauthenticated remote code execution flaw rated CVSS 10.0, the maximum. It affects every self-managed GitLab CE/EE release back to 7.0 (2014). There is no workaround: patch to the fixed version for your line. One trap to know up front: if you patched on 12 October, you are still vulnerable and need one patch higher.

What CVE-2026-110264 is

GitLab uses Ruby’s built-in regular expression engine, Onigmo. When that engine compiles a specially crafted regular expression, an integer overflow occurs, and GitLab says this can be turned into arbitrary code execution on the server, running as the git user, with no account required. The overflow is in the engine itself, which is why the flaw reaches all the way back to GitLab 7.0.

The reachable path, per GitLab’s own detection rule: GitLab renders Org-mode files (a plain-text document format) with the org-ruby gem, which builds a regex from the keyword on a #+TODO: line of a .org file without escaping it. A keyword repeated more than 32,767 times overflows a counter in the regex engine. The attack needs no login, only one public project holding the crafted .org file for GitLab to render. A successful attempt can be quiet and does not reliably crash the server.

GitLab rates it CVSS 10.0. Treat that as authoritative.

Who is affected

Only self-managed GitLab needs action, Community Edition and Enterprise Edition, on every install method (Linux package, Docker, Helm, source).

  • GitLab.com already runs the fixed version. Nothing to do.
  • GitLab Dedicated tenants on the fixed internal builds already have it. Nothing to do.
  • Self-managed, any version from 7.0 onward: affected. Assume in scope until you confirm the version.

The 12 October trap

This is the part that catches teams who thought they were already covered. On 12 October, GitLab fixed a different regex flaw (CVE-2026-97229) in 19.4.2, 19.3.5 and 19.2.8. CVE-2026-110264 is a separate, wider-reaching bug. A server upgraded to those 12 October releases is still exposed and needs the next patch up. Both flaws were reported by the same researcher, and this is the fourth regex-engine issue from them in a month.

The fix: patch to your line’s version

Released 21 October 2026 for both CE and EE:

If you run Upgrade to Notes
19.5 19.5.1 All 12 fixes
19.4 19.4.3 All 12 fixes, includes DB migrations
19.3 19.3.6 All 12 fixes, includes DB migrations
19.2 19.2.9 Critical fix only
19.1 19.1.9 Critical fix only
19.0 19.0.10 Critical fix only
18.11 18.11.13 Critical fix only
18.10 and older No fixed release Upgrade to a supported line

Stay on the minor version you run (for example 19.4.x goes to 19.4.3); a patch-level upgrade needs no extra upgrade stops. Only 19.4.3 and 19.3.6 include database migrations, so a single-node server stays down until they finish. Multi-node installs can follow GitLab’s zero-downtime procedure.

For the exact per-install-type commands, the version check, and how to run GitLab’s two detection rules over your logs, see our GitLab CVE-2026-110264 patching runbook.

If you are on GitLab 18.10 or older: this is a modernisation decision

There is no fixed release below the 18.11 line. If a self-managed instance is on 18.10 or earlier, patching is not an option, you have to upgrade to a supported version, and GitLab upgrades across several minor versions require staged “upgrade stops” (you cannot jump straight to the latest). In practice, an instance left that far behind is usually behind on its OS, its runners, and its backup story too.

The honest framing: you were always going to have to bring that GitLab current. CVE-2026-110264 just set the deadline, and the cost of waiting is now an unauthenticated, maximum-severity RCE on the server that holds your source code and quite possibly your deployment secrets.

What to do this week

  1. Inventory every self-managed GitLab instance. Include Geo secondaries, staging, DR, and test boxes. A forgotten instance is still a way in.
  2. Check the version each one actually serves (not just the CLI; the runbook has the per-install commands).
  3. Patch supported lines immediately to the version in the table. If you patched on 12 October, go one patch higher.
  4. Triage anything on 18.10 or older: plan the upgrade path, or take it off the public internet until you can.
  5. Check for exploitation attempts using GitLab’s detection rules, and if you find signs of compromise, rotate CI/CD variables, runner tokens, deploy keys, and access tokens held on the server.

As of 22 October there were no reported attacks, the flaw was not in CISA’s KEV catalog, and no public proof of concept had surfaced. That is the window you are patching inside. The researcher’s previous flaw was reproduced by Rapid7 within a day of release, so do not count on it staying quiet.

Not sure which of your GitLab instances are exposed?

We help teams inventory self-managed GitLab, patch the supported lines safely (including the migration-bearing releases), and plan the upgrade path for anything stuck on an unsupported version. See our Security & Compliance work or book a call below.

 

Jerzy Kopaczewski

Running self-managed GitLab?

Book a free 30-minute call. We'll help you confirm what's patched, handle the migration-bearing upgrades, and plan a path off any unsupported version.

Book a call
GitLab security CVE RCE patching CI/CD

Read also:

Previous post Next post