Home/ Blog/ Security news/ Article
Blog · Security news

GitLab CVE-2026-97229: Critical Unauthenticated RCE, Patch Now

GitLab's emergency patch fixes CVE-2026-97229, a CVSS 10 unauthenticated code-execution flaw in the CI/CD regex compiler.

Overloaded build pipeline bursting through a server-room wall, illustrating GitLab's unauthenticated code-execution flaw

GitLab shipped an emergency patch on October 12 for a flaw that hands an unauthenticated attacker code execution on the server itself. CVE-2026-97229 carries a CVSS score of 10.0, the maximum, and the path to trigger it is a malicious regular expression slipped into a pipeline's build configuration. No login, no user interaction, one network-reachable request to the GitLab web interface.

GitLab.com and GitLab Dedicated were patched by GitLab before disclosure. The exposure that matters is self-managed: the Community Edition and Enterprise Edition servers your team runs on its own hardware. If that is you, the fixed builds are 19.4.2, 19.3.5, and 19.2.8, released October 12, and the upgrade is today's work.

A crafted regex in a pipeline config

The bug sits in the component that compiles regular expressions out of CI/CD pipeline configuration. GitLab describes an integer overflow, a number wrapping past the largest value its storage can hold and turning small or negative, caused by insufficient validation of the regular expression the compiler was handed. An attacker who gets a specially crafted regex into a CI/CD configuration can corrupt that handling and, under the right conditions, run arbitrary code on the GitLab server.

The CVSS vector (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H) marks a changed scope, which means the impact reaches past the vulnerable component into the rest of the host. It was reported through GitLab's HackerOne bug bounty program by a researcher using the handle joaxcar.

GitLab has not reported exploitation in the wild, and no public proof-of-concept exists as of this writing. That is thin comfort for a maximum-severity unauthenticated bug in a product this widely deployed. The patch is itself a map of the fix, and a working exploit is routinely reverse-engineered from one within days. Plan the response in hours, not weeks.

Why a GitLab box is the worst host to lose

Remote code execution is not exotic. It is the second most common bug class we have logged across 90 days of triage. What makes this one urgent is where it lands. A GitLab server is not just another app behind the login page; it holds the source code, the CI/CD runner registration tokens, the deploy keys, the container registry credentials, and the pipeline variables that routinely carry cloud API keys. Code execution on that host is a pivot straight into the software supply chain beneath it.

That is the asymmetry worth sitting with. The precondition is only that an attacker can reach the web interface; the payoff is the keys to everything your developers ship. An unauthenticated bug removes the one barrier, reaching the box, that usually buys a defender time.

Patch to 19.3.5, not 19.3.4

There is a wrinkle on the 19.3 branch. GitLab's first pass, 19.3.4, carries the security fix but shipped with an unrelated regression that breaks merge request pages when the Ona integration is enabled. 19.3.5 corrects both, and it is the build GitLab now lists as fixed. If you already moved to 19.3.4 you are patched against CVE-2026-97229, but still step up to 19.3.5. The 19.2 and 19.4 branches each have a single fixed build: 19.2.8 and 19.4.2.

Confirm what you are running before and after the upgrade, on the GitLab host itself:

Confirm the running version on a self-managed GitLab host
sudo gitlab-rake gitlab:env:info
cat /opt/gitlab/version-manifest.txt | head -n 1

Keeping that version inventory current, per host, is the unglamorous half of vulnerability detection: you cannot prioritize a patch you do not know you are behind on.

Assume an exposed instance was reachable

Because the only precondition is network reachability, the first hardening move beyond patching is to get the GitLab web interface off the open internet where you can, behind a VPN or an IP allowlist. That shrinks the attack surface for the next unauthenticated bug too, and there will be one.

If your instance was internet-facing while unpatched, do not assume the window was quiet just because no exploit is public yet. Treat the secrets the server holds as potentially within reach, and watch the Rails logs under /var/log/gitlab/gitlab-rails/ for anomalies around CI/CD configuration handling and for unexplained worker restarts, which is the kind of noise a memory-corruption bug tends to leave before it lands cleanly. A managed SIEM that collects and retains those logs is what turns "we think we patched in time" into an answer you can check, which is the premise of managed detection on infrastructure you run yourself.

Topics

Frequently asked questions

What is CVE-2026-97229 in GitLab?

CVE-2026-97229 is a maximum-severity flaw, CVSS 10.0, in GitLab's CI/CD regular expression compiler. An integer overflow from insufficient regex validation lets an unauthenticated attacker run arbitrary code on a self-managed GitLab server by planting a malicious regular expression in a pipeline's build configuration.

Which GitLab versions are affected and which builds fix it?

Self-managed GitLab Community and Enterprise Edition are affected on versions 19.2 before 19.2.8, 19.3 before 19.3.5, and 19.4 before 19.4.2. GitLab fixed it on October 12, 2026 in 19.4.2, 19.3.5, and 19.2.8. GitLab.com and GitLab Dedicated were already patched.

Should I patch to GitLab 19.3.4 or 19.3.5?

Patch to 19.3.5. GitLab's 19.3.4 contains the CVE-2026-97229 security fix but shipped with an unrelated regression that breaks merge request pages when the Ona integration is enabled. 19.3.5 corrects both and is the version GitLab now lists as fixed.

Is CVE-2026-97229 being exploited in the wild?

As of publication GitLab has not reported in-the-wild exploitation, and no public proof-of-concept exists. Because it is an unauthenticated, maximum-severity flaw in a widely deployed product, a working exploit is likely to be reverse-engineered from the patch within days, so treat patching as urgent rather than theoretical.

I run GitLab on my own servers. What should I do first?

Upgrade to 19.4.2, 19.3.5, or 19.2.8 immediately, confirming the version on each host. Then reduce exposure by putting the web interface behind a VPN or IP allowlist. If the server was internet-facing while unpatched, treat its stored secrets as potentially reachable and review logs for anomalies.

Ready to meet the Guardians?

Deploys fast - agentless for monitoring and cloud, a lightweight agent for deep endpoint security. Just Suriq, standing watch.