What is GitLab?
GitLab is a self-hostable DevOps platform: Git repository hosting, issue tracking, container registry, and an integrated CI/CD system driven by .gitlab-ci.yml files committed into each project. Community Edition and Enterprise Edition are the self-managed distributions that organisations run on their own infrastructure, as opposed to the GitLab.com SaaS tenant.
A GitLab server is one of the highest-value targets in an engineering estate. It holds source code, CI/CD secrets, deploy keys, cloud credentials, and container registry push rights, and its runners execute code against production. Compromising the server is frequently equivalent to compromising everything it builds, which makes it a natural staging point for supply chain attacks.
Overview
CVE-2026-97229 is an integer overflow in the regular expression compiler reachable through GitLab's CI/CD configuration handling. GitLab validates user-supplied regular expressions before use, but a crafted pattern survives that validation and is then recompiled by Onigmo, the regex engine bundled with Ruby. An overflow in Onigmo's calculation of the compiled pattern's size causes the engine to allocate too little memory and emit invalid instructions into the compiled program, corrupting memory in a way that can be steered into arbitrary code execution on the server.
GitLab rated the issue CVSS 10.0 and described it as allowing an unauthenticated user to run code on the GitLab server. The flaw is one of four GitLab-assigned CVEs tracing back to a cluster of Onigmo memory-safety bugs, alongside CVE-2026-89078 (double free in the parser), CVE-2026-93577, and CVE-2026-110264. Ruby maps CVE-2026-97229 to the same underlying compiled-pattern-size overflow as CVE-2026-93577.
Exploitation status is the part worth reading carefully. Rapid7's published chain requires the attacker to push a malicious CI configuration to a project first, with only the final CI lint request being unauthenticated, which Rapid7 says conflicts with GitLab's PR:N rating; the original HackerOne report is private, so the fully unauthenticated path is not public. On an instance that permits open self-registration and project creation, the distinction mostly disappears.
Affected Versions
| Product | Vulnerable | Fixed |
|---|---|---|
| GitLab CE/EE 19.4.x | 19.4 before 19.4.2 | 19.4.2 |
| GitLab CE/EE 19.3.x | 19.3 before 19.3.5 | 19.3.5 |
| GitLab CE/EE 19.2.x | 19.2 before 19.2.8 | 19.2.8 |
| GitLab.com, GitLab Dedicated | Patched before disclosure | No action required |
| Ruby (self-built GitLab) | Before 3.3.13, 3.4.12, 4.0.8 | 3.3.13, 3.4.12, 4.0.9 |
| alpinelinux/gitlab container images | Pulled before 2026-10-27 | Images from 2026-10-27 onward |
Some secondary coverage lists 19.3.4 rather than 19.3.5 as the 19.3 fix. GitLab's own patch release page says 19.3.5; use that.
Technical Details
CWE-190, integer overflow or wraparound, means an arithmetic result grew past what its variable could hold and silently wrapped to a small or negative number. Here the arithmetic is Onigmo's signed size check for quantifier expansion. A large enough repeat bound overflows the computed program size, so the engine concludes that an enormous expansion is small enough to compile, allocates a buffer sized by the wrapped value, and writes past it.
GitLab's own guard against oversized repeat bounds can be sidestepped: Rapid7 found the bound can be split with an inline regex comment so the guard reads a smaller number than Onigmo later parses. The pattern then reaches the UTF-8 recompilation path and overflows there.
Attack complexity is low and no user interaction is required. Rapid7's proof of concept runs arbitrary commands as the git OS account on the official gitlab-ce:19.4.1-ce.0 Linux amd64 image with ASLR enabled, which is the account that owns repository data and CI configuration on a default install.
Discovery
The vulnerability was reported to GitLab through its HackerOne bug bounty program by the researcher using the handle joaxcar, who has a long history of GitLab findings. GitLab shipped fixes on 2026-10-12 and published the advisory on 2026-10-13. Jonah Burgess of Rapid7 reverse-engineered the patch and published both a technical analysis and an end-to-end exploit (jburgess-r7/CVE-2026-97229-PoC) on 2026-10-13, the same day as disclosure. Ruby upstream published its own advisory for the underlying Onigmo defects on 2026-10-23.
Exploitation Context
Censys measured 25,766 internet-facing hosts and 79,224 web properties on vulnerable releases, roughly 31 percent of the 82,454 GitLab hosts it could fingerprint, concentrated in Germany (6,469), Russia (4,173), and the United States (2,927). EPSS sat at 18.4 percent in mid-October, before any confirmed attacks.
The first public in-the-wild case is the Alpine Linux project. An account registered shortly beforehand submitted crafted CI configurations against Alpine's unpatched self-managed GitLab on 2026-10-20 and 2026-10-21, crashing GitLab workers eight times; in four of those crashes the attacker reached the stage after the initial memory corruption before failing. The attacker also pulled Alpine's own GitLab container image, which suggests they were tuning offsets to that exact build. They returned on 2026-10-25 and 2026-10-26 without success. Alpine found no evidence the exploit completed, but treated the server as compromised, rebuilt it from scratch, reset all passwords, and rotated secret keys. Alpine states that its packages and releases were not tampered with.
No threat actor attribution has been published and no ransomware use is reported. CISA added the CVE to KEV on 2026-10-29 with a three-day deadline.
Remediation
- Upgrade self-managed GitLab to 19.4.2, 19.3.5, or 19.2.8, matching your release line. GitLab.com and GitLab Dedicated require no action.
- If you build GitLab yourself rather than using GitLab's official packages, upgrading GitLab alone is not sufficient: the real fix is in Ruby. Install Ruby 3.3.13, 3.4.12, or 4.0.9 or later. Users of
alpinelinux/gitlabimages should pull an image built on or after 2026-10-27. - Until patched, reduce reachability: disable open self-registration, remove anonymous or low-trust write access to public projects, and block or authenticate the CI lint API route at the reverse proxy. Treat these as stopgaps, since they do not repair the vulnerable compiler.
- Place the GitLab instance behind a VPN or allowlist if it does not need to be internet-facing. A third of observed instances were exposed.
- Review logs for the indicators Rapid7 and GitLab describe: Puma or Onigmo native worker crashes, long-running CI lint GET requests returning HTTP 502, GitLab's "ci regexp guard rejection" detection, newly registered accounts that immediately create projects and push CI configuration, and unusual regular expressions in committed
.gitlab-ci.ymlfiles. - If evidence of exploitation is found, assume server-side code execution as the
gitaccount. Rotate CI/CD variables, deploy keys, runner registration tokens, personal and project access tokens, and the GitLab secrets file, and audit recent pipeline activity and registry pushes. - Federal civilian agencies must remediate by 2026-11-01 under BOD 26-04, and must satisfy CISA's forensic triage requirements under BOD 26-04 before rebuilding, since a rebuild destroys the evidence.
Key Details
| Property | Value |
|---|---|
| CVE ID | CVE-2026-97229 |
| Vendor / Product | GitLab — Community Edition and Enterprise Edition |
| NVD Published | 2026-10-13 |
| NVD Last Modified | 2026-10-29 |
| CVSS 3.1 Score | 10 |
| CVSS 3.1 Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Severity | CRITICAL |
| CWE | CWE-190 find similar ↗ |
| CISA KEV Added | 2026-10-29 |
| CISA KEV Deadline | 2026-11-01 |
| Known Ransomware Use | No |
CVSS 3.1 Breakdown
Required Action
Timeline
| Date | Event |
|---|---|
| 2026-10-12 | GitLab ships patch releases 19.4.2, 19.3.5 and 19.2.8; GitLab.com and Dedicated already patched |
| 2026-10-13 | CVE-2026-97229 published; Rapid7 releases a technical analysis and a working public proof of concept |
| 2026-10-20 | First exploitation attempts observed against the Alpine Linux project's self-managed GitLab server |
| 2026-10-23 | Ruby publishes fixes for the underlying Onigmo bugs in 4.0.9, 3.4.12 and 3.3.13 |
| 2026-10-25 | Attacker returns against Alpine Linux; attempts fail, Alpine rebuilds the instance from scratch |
| 2026-10-29 | Added to CISA Known Exploited Vulnerabilities catalog |
| 2026-11-01 | CISA BOD 26-04 remediation deadline |
References
| Resource | Type |
|---|---|
| NVD - CVE-2026-97229 | Vulnerability Database |
| CISA KEV Catalog Entry | US Government |
| GitLab - Patch Release 19.4.2, 19.3.5, 19.2.8 | Vendor Advisory |
| Ruby - Regexp Fixes for the GitLab CVEs | Vendor Advisory |
| Rapid7 - GitLab CI/CD Regex Integer Overflow, Technical Analysis | Security Research |
| Rapid7 - Critical Unauthenticated Remote Code Execution in GitLab | Security Research |
| SecurityOnline - Attackers Target Alpine Linux GitLab via CVE-2026-97229 | News |
| SecurityOnline - Public PoC Disclosed, 25,766 Hosts Exposed | News |
| BleepingComputer - GitLab Warns of Max Severity RCE Flaw in Regex Compiler Engine | News |
| Help Net Security - GitLab Admins Urged to Patch Critical RCE Flaw | News |