CVE-2026-97229 — GitLab Community Edition and Enterprise Edition Integer Overflow or Wraparound Vulnerability

CVE-2026-97229

GitLab CE/EE - Unauthenticated RCE via Onigmo Integer Overflow in the CI/CD Regex Compiler

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

  1. 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.
  2. 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/gitlab images should pull an image built on or after 2026-10-27.
  3. 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.
  4. 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.
  5. 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.yml files.
  6. If evidence of exploitation is found, assume server-side code execution as the git account. 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.
  7. 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

PropertyValue
CVE ID CVE-2026-97229
Vendor / Product GitLab — Community Edition and Enterprise Edition
NVD Published2026-10-13
NVD Last Modified2026-10-29
CVSS 3.1 Score10
CVSS 3.1 VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
SeverityCRITICAL
CWE CWE-190 find similar ↗
CISA KEV Added2026-10-29
CISA KEV Deadline2026-11-01
Known Ransomware Use No

CVSS 3.1 Breakdown

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Required Action

CISA BOD 26-04 Deadline: 2026-11-01. Apply mitigations in accordance with vendor instructions, ensuring compliance with CISA’s BOD 26-04 Prioritizing Security Updates Based on Risk (see URL in Notes) guidance and CISA’s “Forensics Triage Requirements” (see URL in Notes). Follow applicable BOD 26-04 guidance for cloud services or discontinue use of the product if mitigations are unavailable. Stakeholders are responsible for evaluating each asset's internet exposure and ensuring adherence to BOD 26-04 patching guidelines.

Timeline

DateEvent
2026-10-12GitLab ships patch releases 19.4.2, 19.3.5 and 19.2.8; GitLab.com and Dedicated already patched
2026-10-13CVE-2026-97229 published; Rapid7 releases a technical analysis and a working public proof of concept
2026-10-20First exploitation attempts observed against the Alpine Linux project's self-managed GitLab server
2026-10-23Ruby publishes fixes for the underlying Onigmo bugs in 4.0.9, 3.4.12 and 3.3.13
2026-10-25Attacker returns against Alpine Linux; attempts fail, Alpine rebuilds the instance from scratch
2026-10-29Added to CISA Known Exploited Vulnerabilities catalog
2026-11-01CISA BOD 26-04 remediation deadline