CVE-2026-97229: GitLab CI/CD Regex Compiler Integer Overflow Vulnerability — Analysis & Mitigation

CVE-2026-97229 GitLab CI/CD regex compiler integer overflow vulnerability — dark cyber illustration of a DevOps code pipeline shattering at a malicious regular expression while an attacker types at a laptop

Summary

On October 12, 2026, GitLab shipped an emergency patch release — versions 19.4.2, 19.3.4, and 19.2.8 — to fix CVE-2026-97229, a maximum-severity CVSS 10.0 vulnerability in the CI/CD Regular Expression Compiler that could allow an unauthenticated attacker to execute arbitrary code on the GitLab server. No login. No account. Just a specially crafted regular expression smuggled into a CI/CD configuration, slipping past insufficient validation and tripping an integer overflow deep in the regex engine. GitLab itself is urging every self-managed installation to upgrade immediately — and this is the third regex-engine flaw in GitLab in a single month, after two CVSS 9.9 regex bugs patched on September 23. The pattern is unmistakable: attackers now know exactly which component of GitLab to keep probing.

Severity

  • CVE ID: CVE-2026-97229
  • Title: GitLab CI/CD Regular Expression Compiler integer overflow — unauthenticated remote code execution
  • CVSS 3.1: 10.0 (Critical) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
  • Weakness: CWE-190 — integer overflow (insufficient regular expression validation)
  • Attack requirements: None — unauthenticated, remote, no user interaction
  • Reported by: researcher "joaxcar" via GitLab's HackerOne bug bounty program
  • Exploited in the wild: No public reports at disclosure; not yet in the CISA KEV catalog

The vector tells the story: network-accessible, low complexity, no privileges, no user interaction, and scope changed — meaning the vulnerable component (the regex compiler) can be abused to compromise resources beyond its own security boundary, i.e. the whole GitLab server. A 10.0 with those properties is the ceiling of the scoring system, and it is fully earned here: the one artifact an attacker needs — a regex inside a CI/CD config — is something the product is designed to accept from the outside world.

Affected Versions

The vulnerability affects self-managed GitLab Community Edition (CE) and Enterprise Edition (EE) on these branches:

  • 19.2.x — all versions before 19.2.8 are vulnerable
  • 19.3.x — all versions before 19.3.4 are vulnerable
  • 19.4.x — all versions before 19.4.2 are vulnerable

Not affected: GitLab.com already runs the patched version, and GitLab Dedicated customers need take no action. The risk population is self-managed servers — and it is enormous: scans counted more than 86,000 internet-exposed GitLab hosts in September 2026. The October 12 patch release fixes 24 security issues in total, including two more high-severity flaws worth your attention: CVE-2026-92883 (8.7, cross-site scripting in syntax highlighting letting an authenticated user run arbitrary JavaScript in other users' browsers via a crafted repository) and CVE-2026-16301 (8.5, an authorization flaw letting a developer run pipelines on protected branches without permission), plus a cache-poisoning bug rated 8.2 that could expose protected CI/CD variables.

Technical Analysis

How an integer overflow becomes remote code execution. The vulnerable component is GitLab's CI/CD Regular Expression Compiler — the engine that parses, compiles, and evaluates regular expressions appearing in pipeline configuration files. Regular expressions sound harmless; they are not. A regex compiler must convert pattern text into an internal program: allocating memory for states, transitions, and capture groups based on the pattern's structure. An integer overflow (CWE-190) happens when a size or length calculation wraps around — the arithmetic that decides "how much memory do I need" silently produces a number far smaller than reality. The compiler then allocates too little memory and writes past the boundary. That is the classic setup for memory corruption, and from memory corruption, a crafted regex can bend the program's execution toward the attacker's payload. What makes this specific overflow devastating is the trust model: the regex arrives inside a CI/CD configuration, and GitLab processes it with no authentication required — under "certain conditions," in GitLab's deliberately careful wording, the untrusted pattern reaches the vulnerable compiler path without any credential check in front of it.

The third regex RCE in a month — this is a pattern, not an accident. On September 23, 2026, GitLab patched CVE-2026-89078 (a double free in the regex parser, CVSS 9.9) and CVE-2026-93577 (an integer overflow in the regex compiler, CVSS 9.9) — both reported by the same researcher, joaxcar, both requiring a low-privilege account. Three weeks later the same engine yields a third overflow, and this one needs no account at all. Security researchers read this the way burglars read a neighborhood: the first break-in maps the layout, the next ones get easier. When one researcher finds two 9.9s in a component in September and a 10.0 in October, you can be certain others are auditing the same code right now — on both sides of the line. The "certain conditions" in GitLab's advisory are doing a lot of work; until the fix is analyzed publicly, treat every exposed self-managed instance as reachable.

Why the blast radius is worse than the CVSS suggests. A GitLab server is not a standalone application — it is the beating heart of a software factory. It holds source code for every project, CI/CD variables containing cloud credentials and API tokens, deploy keys, runner tokens, and the full history of who built what. Arbitrary code execution on that server is a supply-chain compromise waiting to happen: an attacker who can run code on GitLab can read secrets, inject backdoors into build pipelines, and poison artifacts that flow to production. This is the lesson of every GitLab incident since 2021 — and there have been at least five GitLab vulnerabilities exploited in real attacks since then. Notably, last month GitLab fixed another maximum-severity flaw (CVE-2026-85706, unauthenticated reading of sensitive data), and CISA added it to the Known Exploited Vulnerabilities catalog one day later. The speed with which GitLab flaws move from disclosure to exploitation has become one of the industry's fastest.

The scope-changed detail matters more than it looks. CVSS scope "changed" means the vulnerability in one component lets the attacker affect resources outside that component's security authority. Here, the regex compiler — a parsing engine that should be a contained sandbox — can be abused to execute code with the privileges of the GitLab server process itself. That is the difference between "a crash in the parser" and "the parser runs your code on my server." GitLab's own phrasing — insufficient validation of the regular expression — is a polite way of saying the product accepted attacker-shaped input into a memory-unsafe code path without checking it first. The fix, presumably, adds proper validation and bounds checking before compilation. But the deeper question defenders should ask: how many other parsing engines in the codebase (syntax highlighting, Markdown rendering, diff computation — the release notes mention an XSS in syntax highlighting in this very patch) trust their inputs the same way?

No workaround, no detection guidance, no time to waste. GitLab published no workaround for this flaw — the advisory's position is unambiguous: patch. There is also no vendor detection guidance for determining whether an instance was exploited before patching, which is the uncomfortable part of every silent memory-corruption bug. If your GitLab is internet-facing and was unpatched on October 12, the honest assumption is that you cannot prove a negative. Review access and application logs for anomalous unauthenticated requests carrying unusual regex-heavy payloads in CI/CD configuration contexts, audit runner tokens and CI/CD variables for unexpected use, and check for unfamiliar scheduled pipelines or project changes. The release notes flag downtime for single-node instances during database migrations — plan the maintenance window, but do not let it become an excuse to wait.

Why This Matters

GitLab sits at the center of how modern software gets built — and the companies running it include names like NVIDIA, Goldman Sachs, T-Mobile, Lockheed Martin, and Siemens. A remote, unauthenticated code execution flaw in that product is a skeleton key to the software supply chain, not just a server bug. And the trend line is brutal: two 9.9s in the same regex engine in September, a 10.0 in October, all from one researcher's HackerOne reports. The regex compiler is now GitLab's most-audited attack surface, and the auditors are not all friendly.

This also continues a grim enterprise pattern seen across this month's disclosures — remotely exploitable memory-safety and validation flaws in widely deployed on-prem infrastructure, alongside the Atlassian Data Center file-access flaw covered earlier this month. Developer tooling, it turns out, is just as much "critical infrastructure" as the network gear — and it keeps failing in the same places: untrusted input reaching memory-unsafe code without validation.

Mitigation

  1. Patch immediately — no workaround exists. Upgrade to 19.2.8, 19.3.4, or 19.4.2 on your branch (or any later supported release). GitLab "strongly recommends that all self-managed GitLab installations be upgraded to one of these versions immediately." Prioritize internet-facing instances first.
  2. Plan for migration downtime. Single-node instances will have downtime during database migrations. Schedule the window, but do not defer the patch for it.
  3. Assume the instance was probed. There is no vendor detection guidance and no confirmed exploitation — which is not the same as no exploitation. Review application and access logs for anomalous unauthenticated requests with unusual regex payloads in CI/CD contexts, and audit CI/CD variables, runner tokens, deploy keys, and project settings for changes you cannot explain.
  4. Rotate secrets if exposure is plausible. CI/CD variables are the crown jewels of a GitLab server. If the instance was internet-facing and unpatched on October 12, rotate cloud credentials, API tokens, and deploy keys stored in CI/CD variables — quietly, and before you announce anything.
  5. Reduce the attack surface structurally. GitLab has no business being broadly reachable from the internet for the whole world. Restrict access to the instance (VPN, allow-lists, WAF rules) so the next parser flaw in the same codebase finds no unauthenticated path to it. Track this CVE for the CISA KEV listing — the sibling flaw CVE-2026-85706 reached KEV in a day, and this one is more severe.

References

  • GitLab critical patch release — versions 19.2.8, 19.3.4, 19.4.2 (published October 12, 2026)
  • CERT-EU security advisory 2026-016 — Critical vulnerability in GitLab CE and EE (October 12, 2026)
  • NVD entry for CVE-2026-97229 (pending enrichment)

Report by Faizan Akhtar — The Cyber Security Researcher


 

Comments

Popular posts from this blog

CVE-2026-76482: Cisco License On-Prem Signature Verification Vulnerability (CVSS 10.0) — Analysis & Mitigation

CVE-2026-80381: IBM Guardium Data Protection SQL Injection Vulnerability (CVSS 9.8) — Analysis & Mitigation

CVE-2026-104286: Fortinet FortiMail Path Traversal Vulnerability — Analysis & Mitigation