
CVE-2026-97229: Critical Unauthenticated Remote Code Execution in GitLab
Rapid7 analysis of CVE-2026-97229, a CVSS 10.0 integer overflow (CWE-190) in the Onigmo regex compiler used by GitLab CE/EE's CI/CD regex handling. A crafted regex in a .gitlab-ci.yml passes validation as US-ASCII, then is recompiled for a UTF-8 repository path, producing invalid instructions that give code execution as the git user. Rapid7 reproduced it on GitLab CE 19.4.1 with ASLR (patched in 19.4.2); despite the vendor's "unauthenticated" rating, the attacker needs to commit a malicious config to a public project, which self-registration allows. No in-the-wild exploitation is confirmed, and Rapid7 recommends urgent upgrades.
What it is
CVE-2026-97229 is an integer overflow (CWE-190) in the Onigmo regex compiler, which GitLab CE/EE uses for CI/CD regex handling. GitLab rated it CVSS 10.0 and published a patch release on October 12, 2026. Rapid7's post is dated October 13, 2026.
How it works
- A crafted regex in
.gitlab-ci.ymlfirst compiles in a compact US-ASCII form and passes GitLab's validation. - It is then evaluated against a valid UTF-8 repository path, and Ruby's Onigmo recompiles it for that encoding after validation has finished.
- The program-size calculation overflows during recompilation. That generates invalid regex instructions, control-flow integrity is lost, and attacker-controlled Onigmo VM operations run an OS command as the
gituser.
Preconditions / Affected
- The attacker needs a branch in a public project containing both the malicious
.gitlab-ci.ymland a repository path with UTF-8 characters. The vendor's "unauthenticated" rating glosses over this. Where self-registration and project creation are open, any new account can meet it. - Self-managed CE and EE are affected across all deployment types. GitLab.com is already patched, and Dedicated customers need no action.
- Rapid7 reproduced it on the official 19.4.1 CE Linux amd64 image with ASLR on. The official 19.4.2 CE image did not execute the same input.
What to do
- Upgrade self-managed instances to a fixed release immediately, outside the normal patch cycle. The page does not list the fixed versions beyond the 19.4.2 test result, so confirm them in GitLab's security advisory.
- If you cannot upgrade yet, restrict anonymous access to public projects. Also stop untrusted users from creating or writing to public projects.
- Rapid7 Exposure Command, Vulnerability Management and Nexpose customers get an authenticated check, expected in the October 13 content release.
Caveats
- The interim controls block only the delivery path Rapid7 demonstrated. They do not fix the vulnerable compiler, so other routes to plant a config (for example an existing account with write access) are not covered.
- No in-the-wild exploitation is confirmed as of publication.
- The root cause and exploit-chain details are deferred to a separate Rapid7 write-up.
Organisations named here
- Onigmo
CVEs named here
- CVE-2026-97229
Technologies named here
- Rapid7 Exposure Command
- Rapid7 Vulnerability Management
- GitLab 19.4.1 CE Linux amd64 official image
- GitLab 19.4.2 CE official image
- Nexpose
- GitLab security advisory
- GitLab.com
- GitLab Dedicated
- Rapid7 Intelligence
- Ruby Onigmo regular expression engine
- GitLab
- Ruby
- CVSS
Techniques named here
- Integer Overflow or Wraparound
- Integer Overflow
Related in AppSec
Flowise MCP Security Bypass Enables RCE
Inside an Oracle Database SQL Injection Attack | Huntress
OASIS
