/cards/ once it crosses the publish bar. Status: draft.GitLab Onigmo RCE: attempted exploitation of CVE-2026-97229 seen at Alpine Linux; patch GitLab and Ruby
An attacker tried to exploit CVE-2026-97229, a CVSS 10.0 GitLab flaw in the bundled Onigmo regex engine, against Alpine Linux's GitLab server. Alpine found no proof of code execution but could not rule it out. Today: confirm every self-managed GitLab is on a fixed release, patch Ruby on self-compiled or custom-Ruby installs, and hunt for crashes and unexpected child processes since 20 October.
Triage: Exploitation was attempted against a public GitLab server after the fix shipped, and the vendor-rated CVSS is 10.0 [S1].
All three sources are secondary reporting (The Hacker News) relaying GitLab, Ruby and Alpine statements. No GitLab advisory, Ruby advisory or CISA KEV entry is among the numbered sources.
Changed since version 0
- CISA KEV listed CVE-2026-97229 on 2026-10-29 (federal due 2026-11-01)
What happened
- Alpine Linux said an attacker sent crafted CI configurations with malicious regular expressions to its GitLab server on 20-21 October 2026, about a week after GitLab's fix [S1]
- The attempts crashed GitLab worker processes 8 times, caused 502 errors and made CI jobs fail [S1]
- Alpine found no evidence the exploit ran code but could not rule it out, so it rebuilt the server and reset all passwords [S1]
- The GitLab CVEs depend on three Onigmo bugs fixed in Ruby 4.0.9, 3.4.12 and 3.3.13. These bugs can corrupt memory while Ruby compiles a crafted pattern [S3]
- Upgrading GitLab alone does not fix self-compiled installs or images that bring their own Ruby [S1][S3]
- The companion flaw CVE-2026-110264 is an unauthenticated RCE reported to reach every self-managed release since 7.0. GitLab disclosed no preconditions or workaround for it [S2]
Timeline
| 2026-10-20 to 2026-10-21 | Crafted CI configurations sent to Alpine Linux's GitLab server; workers crash and 502 errors follow S1 |
| 2026-10-21 | Newest GitLab branch releases dated (19.2.9, 19.1.9, 19.0.10, 18.11.13) S1 |
| 2026-10-22 | GitLab fix for CVE-2026-110264 reported; no exploitation or KEV listing reported at that time S2 |
| 2026-10-26 | Ruby 4.0.9, 3.4.12 and 3.3.13 reported as fixing the underlying Onigmo bugs; none of the four CVEs in KEV as of 23 October S3 |
| 2026-10-29 | Alpine Linux attempted-exploitation account reported S1 |
Detect
Ruby crash reports pointing to Onigmo · GitLab application logs / Ruby crash reports
index=* ("[BUG]" OR "Segmentation fault" OR "SIGSEGV") (onig OR regcomp OR regparse OR "Regexp") (puma OR sidekiq) | stats count min(_time) as first max(_time) as last by host, sourceFROM logs-* | WHERE (message LIKE "*[BUG]*" OR message LIKE "*Segmentation fault*" OR message LIKE "*SIGSEGV*") AND (message LIKE "*onig*" OR message LIKE "*regcomp*" OR message LIKE "*regparse*" OR message LIKE "*Regexp*") AND (message LIKE "*puma*" OR message LIKE "*sidekiq*") | STATS count = COUNT(*), first = MIN(@timestamp), last = MAX(@timestamp) BY host.name, log.file.path
A hit means: A GitLab worker crashed inside regex compilation. This matches the crash pattern Alpine saw. Treat it as an exploitation attempt until verified.
Unexpected child processes of Puma or Sidekiq · Process events / EDR on GitLab servers
index=* (parent_process_name="*puma*" OR parent_process_name="*sidekiq*") (process_name=sh OR process_name=bash OR process_name=dash OR process_name=curl OR process_name=wget OR process_name=nc OR process_name=python* OR process_name=perl) | stats count min(_time) as first max(_time) as last values(process) as cmdlines by host, parent_process_name, process_name
FROM logs-* | WHERE (process.parent.name LIKE "*puma*" OR process.parent.name LIKE "*sidekiq*") AND (process.name IN ("sh", "bash", "dash", "curl", "wget", "nc", "perl") OR process.name LIKE "python*") | STATS count = COUNT(*), first = MIN(@timestamp), last = MAX(@timestamp), cmdlines = VALUES(process.command_line) BY host.name, process.parent.name, process.nameA hit means: A GitLab web or job worker spawned a shell or a network tool. If the crafted-regex attempt succeeded, this is the likely follow-on [S1]. Escalate to IR.
GraphQL ciLint requests and CI regexp warnings · GitLab application logs (GraphQL / production logs)
index=* ("ciLint" OR "CiLint" OR "regexp" AND "warning") | stats count min(_time) as first max(_time) as last by host, remote_ipFROM logs-* | WHERE message LIKE "*ciLint*" OR message LIKE "*CiLint*" OR (message LIKE "*regexp*" AND message LIKE "*warning*") | STATS count = COUNT(*), first = MIN(@timestamp), last = MAX(@timestamp) BY host.name, source.ip
A hit means: CI configurations were linted or carried regexp warnings. Bursts from one source, especially before worker crashes, fit the CI-regex delivery Alpine described.
Verify
- Line up the times of crashes, 502 bursts and CI job failures with pushes of .gitlab-ci.yml changes or unusually long non-ASCII file paths [S1]
- For a true positive, look for git-owned files in /tmp, outbound connections from the GitLab host, and changed crontabs or SSH keys for the git user [S1]
- Benign look-alike: Sidekiq and Puma legitimately spawn git and helper processes. Baseline normal children before alerting
- Benign look-alike: memory pressure or OOM kills also crash workers and produce 502s. Check whether the crash trace mentions Onigmo
- Benign look-alike: developers routinely use the CI lint feature
Scope
Affected
- Self-managed GitLab 19.3.4, 19.3.5 and 19.4.1 for CVE-2026-97229; 19.4.1 confirmed in a Rapid7 lab test [S1]
- Self-compiled GitLab, or container images that install their own Ruby, running Ruby older than 3.3.13, 3.4.12 or 4.0.9 [S1][S3]
- Any Ruby application that compiles regexes from attacker-controlled strings via Regexp.new, Regexp.union, Regexp.compile or interpolation [S3]
- CVE-2026-110264: self-managed releases back to 7.0 [S2]
Only if
- The crafted .gitlab-ci.yml and UTF-8 file path must be committed to a branch of a public project, unless new users can self-register and create projects (CVE-2026-97229) [S1]
- Ruby is not patched. The GitLab Linux package and official images carry patched Ruby [S1]
Not affected if
- GitLab.com and GitLab Dedicated (already patched) [S1]
- Linux package or official container image installs at the newest release for their branch [S1]
- Branch 19.5 is listed as not affected for CVE-2026-97229 [S1]
Fixed in: GitLab 19.3.6, 19.4.2, 19.2.9, 19.1.9, 19.0.10, 18.11.13; plus Ruby 3.3.13, 3.4.12 or 4.0.9 for self-compiled and custom-Ruby installs [S1][S3]
Enumerate
- Every self-managed GitLab instance: version, branch and install type (Linux package, official image, self-compiled, custom image)
- Ruby version on self-compiled and custom-image installs
- Instances with public projects, or with open self-registration and project creation
- Other internal Ruby apps that build regexes from user input
- Accounts, tokens and CI runners reachable from each GitLab server, to size any password and token reset
Contain
- Upgrade to a fixed GitLab release, and to fixed Ruby where GitLab does not ship it [S1][S3]
- Until patched, disable open self-registration and review public projects. This removes the stated attack precondition [S1]
- Before any rebuild, preserve application logs, Ruby crash reports, web access logs and process telemetry from 20 October onward
- If compromise cannot be ruled out, isolate and rebuild the server and reset passwords, as Alpine did [S1]. These steps cannot be undone: a rebuild destroys volatile evidence, and resets invalidate existing credentials
- Rotate tokens and CI secrets stored on any server with a confirmed hit. This cannot be undone
Eradicate
- Remove git-owned files in /tmp and any added crontabs or SSH keys for the git user [S1]
- Where code execution is suspected, rebuild from a known-good image rather than cleaning in place [S1]
- Close the root cause by running a fixed GitLab release on patched Ruby [S1][S3]
Recover
- Before restoring, confirm the GitLab version and the Ruby version on the rebuilt host
- Before restoring, confirm credentials and tokens were reset
- After restoring, watch for worker crashes, 502 bursts, unexpected Puma or Sidekiq children and outbound connections [S1]
Re-enter the loop when
- Any source confirms code execution from these attempts, or publishes new IoCs or attacker infrastructure
- GitLab revises the affected branch list. The 19.5 status and the prior card's release data conflict
- Exploitation of CVE-2026-110264 or the two logged-in Onigmo CVEs is reported [S3]
- Crash or process hits appear on a GitLab instance outside the patched set
Debrief
- Record patch dates for each instance against the 20-21 October attack window
- Record which install types needed separate Ruby patching
- Gap: no published IoCs (IPs, payload hashes) from Alpine's incident
- Gap: preconditions for CVE-2026-110264 remain undisclosed [S2]
- Gap: none of the numbered sources is a vendor, Ruby or CISA primary document
Detection coverage — checked automatically
| Category | Source | Status |
|---|---|---|
| Vendor | Impacted vendor / CERT advisory | nothing found — no vendor or CERT page among the thread sources; secondary reporting only |
| Government | CISA KEV · CVE-2026-110264 | nothing found — not in the catalog |
| Government | CISA KEV · CVE-2026-97229 | published — listed 2026-10-29, federal due 2026-11-01 |
| Reference | NVD · CVE-2026-110264 | published — published 2026-10-22, CVSS 3.1 10 |
| Reference | NVD · CVE-2026-97229 | published — published 2026-10-13, CVSS 3.1 10 |
| VM scanners | Qualys · CVE-2026-110264 | nothing found — no ThreatPROTECT or Security Blog post names it; the QID knowledge base needs a login |
| VM scanners | Qualys · CVE-2026-97229 | nothing found — no ThreatPROTECT or Security Blog post names it; the QID knowledge base needs a login |
| VM scanners | Rapid7 · CVE-2026-110264 | published — InsightVM coverage stated |
| VM scanners | Rapid7 · CVE-2026-97229 | published — InsightVM coverage stated · 1 Metasploit module (not linked) |
| VM scanners | Tenable · CVE-2026-110264 | check failed — plugin search page did not render a result list |
| VM scanners | Tenable · CVE-2026-97229 | published — 28 plugins: 365109 FreeBSD : Gitlab -- vulnerabilities (5518664d-c652-11f1-b273-2cf05da270f3); 366188 GitLab 19.2 < 19.2.8 / 19.3 < 19.3.5 / 19.4 < 19.4.2 (CVE-2026-97229); 377599 RHEL 9 : ruby:3.3 (RHSA-2026:96068); 377749 AlmaLinux 9 : ruby (ALSA-2026:96067); … |
| EDR / endpoint VM | CrowdStrike blog | nothing found — no post names it among the feed's 10 newest items |
| EDR / endpoint VM | Microsoft Security blog | nothing found — no post names it among the feed's 10 newest items |
| EDR / endpoint VM | SentinelOne blog | nothing found — no post names it among the feed's 10 newest items |
| EDR / endpoint VM | SentinelOne Labs | nothing found — no post names it among the feed's 10 newest items |
| WAF / edge | Akamai blog | nothing found — no post names it among the feed's 1183 newest items |
| WAF / edge | Cloudflare WAF managed-ruleset changelog | nothing found — no post names it among the feed's 139 newest items |
| Cloud / container | Wiz blog | nothing found — no post names it among the feed's 717 newest items |
| Linux distro errata | Debian tracker · CVE-2026-110264 | published — tracker entry with fixed versions |
| Linux distro errata | Debian tracker · CVE-2026-97229 | published — tracker entry with fixed versions |
| Linux distro errata | Red Hat · CVE-2026-110264 | published — Critical; errata RHSA-2026:96233, RHSA-2026:96235, RHSA-2026:96067, RHSA-2026:96068, RHSA-2026:96120, RHSA-2026:95655 |
| Linux distro errata | Red Hat · CVE-2026-97229 | published — Critical; errata RHSA-2026:96233, RHSA-2026:96235, RHSA-2026:96067, RHSA-2026:96068, RHSA-2026:96120, RHSA-2026:95655 |
| IDS / research | Cisco Talos blog | nothing found — no post names it among the feed's 15 newest items |
| IDS / research | Emerging Threats open · CVE-2026-110264 | nothing found — no open rule names it (exploit, web_server, web_specific_apps sets) |
| IDS / research | Emerging Threats open · CVE-2026-97229 | nothing found — no open rule names it (exploit, web_server, web_specific_apps sets) |
| Detection content | Elastic detection rules | published — 26 files name GitLab: rules/linux/persistence_dbus_service_creation.toml, rules/cross-platform/defense_evasion_masquerading_space_after_filename.toml, rules_building_block/discovery_process_discovery_via_builtin_tools.toml, rules/linux/persistence_systemd_service_creation.toml |
| Detection content | Elastic Security Labs | nothing found — no post names it among the feed's 102 newest items |
| Detection content | SigmaHQ rules | published — 3 files name GitLab: rules/windows/process_creation/proc_creation_win_pua_memprocfs.yml, rules/windows/process_creation/proc_creation_win_github_self_hosted_runner.yml, rules/windows/process_creation/proc_creation_win_powershell_console_history_file_access.yml |
| Detection content | Splunk ESCU | published — 1 file names GitLab: detections/endpoint/powershell_download_from_code_hosting_service.yml |
| Community | Nuclei template · CVE-2026-110264 | nothing found — no template under http/cves |
| Community | Nuclei template · CVE-2026-97229 | published — template in nuclei-templates (main) |
| MSSP / IR firms | Arctic Wolf blog | nothing found — no post names it among the feed's 10 newest items |
| MSSP / IR firms | Huntress blog | nothing found — no post names it among the feed's 754 newest items |
| MSSP / IR firms | Rapid7 blog | published — Rapid7 Analysis: GitLab CI/CD Regex Integer Overflow (CVE-2026-97229) |
| MSSP / IR firms | Sophos threat research | nothing found — no post names it among the feed's 15 newest items |
| Research | Unit 42 | nothing found — no post names it among the feed's 15 newest items |
Checked automatically 2026-11-10 05:36Z from public sources: 15 published, 20 nothing found, 0 not machine-checkable, 1 failed. "Nothing found" means the public source answered and had nothing, as of that moment; a feed covers only its newest posts. Re-checked daily.
What a person would still look up (4)
| Vulnerability scanner | Whether checks exist for CVE-2026-97229 and CVE-2026-110264, and whether they inspect the Ruby version on self-compiled installs |
| EDR | Whether shells or network tools spawned by Puma or Sidekiq are alerted on GitLab hosts |
| SIEM | Whether GitLab application logs and Ruby crash reports are ingested and parsed, so GitLab's Sigma rules can run |
| WAF / reverse proxy | Whether GraphQL ciLint requests and 502 bursts on GitLab are logged and alertable |
Exposure queries — generated automatically
Where each CVE comes from: CVE-2026-97229 — Ruby 4.0.9, 3.4.12 and 3.3.13 fix Onigmo regex bugs behind four critical GitLab RCE CVEs; CVE-2026-110264 — Ruby 4.0.9, 3.4.12 and 3.3.13 fix Onigmo regex bugs behind four critical GitLab RCE CVEs. A product row answers "is the software from that story reachable from the internet", not "is this card about that software".
shodan · cve · CVE-2026-97229
vuln:CVE-2026-97229
open · Shodan tags a service with a CVE from its banner version; a paid-tier filter. Exact for this CVE, blind to a host Shodan has not fingerprinted.
203services internet-wide on Shodan · 2026-11-10▲ 0 on 2026-10-30 (+203) · 198 on 2026-11-09 (+5 +3%)
shodan · cve · CVE-2026-110264
vuln:CVE-2026-110264
open · Shodan tags a service with a CVE from its banner version; a paid-tier filter. Exact for this CVE, blind to a host Shodan has not fingerprinted.
0match this spelling on Shodan · 2026-11-10 — Shodan has tagged no banner with this CVE yet; its tagging follows its own version fingerprinting, not the advisory▬ 0 on 2026-10-30 (+0) · 0 on 2026-11-09 (+0)
shodan · cpe · gitlab:gitlab
cpe:"cpe:/a:gitlab:gitlab"
open · Every Gitlab service Shodan fingerprinted, any version (CPE 2.2 form of cpe:2.3:a:gitlab:gitlab). Affected per NVD: >= 19.2.0 < 19.2.8; >= 19.3.0 < 19.3.5; >= 19.4.0 < 19.4.2.
50,996services internet-wide on Shodan · 2026-11-10▲ 48,638 on 2026-10-30 (+2,358 +5%) · 50,917 on 2026-11-09 (+79 +0%)
shodan · product · gitlab:gitlab
product:"Gitlab"
open · Banner product name, NVD's spelling; adjust if Shodan's differs. Affected per NVD: >= 19.2.0 < 19.2.8; >= 19.3.0 < 19.3.5; >= 19.4.0 < 19.4.2.
49,539services internet-wide on Shodan · 2026-11-10▲ 47,977 on 2026-10-30 (+1,562 +3%) · 49,484 on 2026-11-09 (+55 +0%)
censys · product · gitlab:gitlab
host.services: (software.product = "Gitlab")
Censys Platform host search, software as fingerprinted at layer 7. Affected per NVD: >= 19.2.0 < 19.2.8; >= 19.3.0 < 19.3.5; >= 19.4.0 < 19.4.2.
shodan · alias · gitlab:gitlab
http.html:"GitLab Community Edition"
open · Banner spelling suggested by the model from the card text (self-managed Community Edition pages carry this product string in the HTML); counted against Shodan before it was shown.
917,951services internet-wide on Shodan · 2026-11-10▲ 471,393 on 2026-10-30 (+446,558 +95%) · 896,232 on 2026-11-09 (+21,719 +2%)
Internet-wide count, trend
| Query | First | Latest | Change |
|---|---|---|---|
product:"Gitlab" | 47,977 2026-10-30 | 49,539 2026-11-10 | +1,562 (+3%) over 11 days |
vuln:CVE-2026-97229 | 0 2026-10-30 | 203 2026-11-10 | +203 over 12 days |
vuln:CVE-2026-110264 | 0 2026-10-30 | 0 2026-11-10 | +0 over 12 days |
cpe:"cpe:/a:gitlab:gitlab" | 48,638 2026-10-30 | 50,996 2026-11-10 | +2,358 (+5%) over 11 days |
http.html:"GitLab Community Edition" | 471,393 2026-10-30 | 917,951 2026-11-10 | +446,558 (+95%) over 12 days |
product:"Ruby" | 60 2026-11-03 | 57 2026-11-09 | -3 (-5%) over 6 days |
cpe:"cpe:/a:ruby-lang:ruby" | 1,657,012 2026-11-03 | 2,013,203 2026-11-09 | +356,191 (+21%) over 6 days |
Shodan's count of matching services on the whole internet, one point a day; the scope (your ranges) is never part of it. A count moves with Shodan's crawl as much as with patching, so read the direction, not the digit.
NVD names 2 more affected products (libraries and embedders); the CVE query covers them where Shodan has fingerprinted the version.
Banner spellings: a model read 2 from the NVD names and this card's text (former and marketing names, console titles); 1 matched something on Shodan and is shown above, the rest was dropped.
Scope every query in your own tool, never in a shared document: Shodan `net:<your_ranges>`, `org:"<your_org>"` or `hostname:<your_domain>` (or a Shodan Monitor network alert, which applies the scope for you); Censys `host.ip: <your_ranges>` or `host.dns.names: <your_domain>`. Then compare the banner version with the affected range. Generated automatically 2026-11-10 05:36Z from the CVE ids and NVD's CPE configurations, each Shodan query counted against Shodan itself; re-built daily with the coverage check.
Open questions
- CISA KEV listing of CVE-2026-97229 on 2026-10-29 (federal due 2026-11-01) comes from the pipeline change feed with no numbered source. Confirm against the CISA KEV catalog
- The count of GitLab Sigma rules (six, four experimental, per pipeline guidance; the prior card said two) is not traced to a numbered source. Confirm against GitLab's advisory
- The prior card's 'Oct 12 patches do not cover it' and '19.5.1 critical release' cannot be checked against current sources. They also conflict with 19.5 being listed as not affected
- The prior card's statement that a public PoC is circulating is not reconfirmed by the current sources
Sources
- [S1] https://thehackernews.com/2026/10/attacker-tried-to-exploit-alpine-linuxs.html · The Hacker News
- [S2] https://thehackernews.com/2026/10/critical-gitlab-flaw-cvss-100-could.html · The Hacker News
- [S3] https://thehackernews.com/2026/10/ruby-fixes-three-regex-engine-bugs.html · The Hacker News
Public OSINT only. AI-generated by the pipeline; structure follows the DAIR model from Dynamic Incident Response (Joshua Wright). Published automatically once it crosses the publish bar.