
Erkennungsbasierte Triage für GitLab CVE-2026-97229 (und CVE-2026-110264): Bewertung einer selbst verwalteten GitLab-Version samt ihrer Ruby-Version, um die Fallstricke des Oktober-12-Patches und des benutzerdefinierten Ruby zu erkennen. Keine Payloads, keine Netzwerk-Sonden.
gitlab-onigmo-scannerVersions-Triage für die beiden CVSS 10.0-Regex-Schwachstellen in GitLab, CVE-2026-97229 und CVE-2026-110264. Gib ihm eine GitLab-Version, die dir gehört, und es sagt dir, ob dieser Build noch offen ist, und es erkennt die beiden Fallen, die bereits Leute erwischen. Es greift nie auf das Netzwerk zu, sendet nie eine Payload, ruft nie einen CI-Lint-Endpunkt auf, kompiliert nie ein manipuliertes Regex.
Die SchwachstelleDetail | Wert |
|---|---|
CVE | CVE-2026-97229, plus CVE-2026-110264, gleichrangig daneben eingestuft |
Fehler | Integer Overflow (CWE-190) in Onigmo, der in Ruby eingebauten Regex-Engine, wenn GitLab einen benutzerseitig gelieferten regulären Ausdruck kompiliert |
Auswirkung | Unauthenticated Remote Code Execution auf einem selbst verwalteten GitLab-Server unter bestimmten Bedingungen |
Schweregrad | 10.0 kritisch für beide, von GitLab als CNA bewertet |
Ausnutzung | CVE-2026-97229 am 2026-10-29 in CISA KEV aufgenommen, föderale Frist 2026-11-01. CVE-2026-110264 hat zum Zeitpunkt dieses Schreibens keinen KEV-Eintrag, und GitLab meldet keine Hinweise auf eine Ausnutzung in Angriffen |
CVE-2026-97229 ist die CI/CD-Regex-Schwachstelle: ein speziell konstruierter regulärer Ausdruck in einer CI/CD-Konfiguration, unzureichende Regex-Validierung, behoben am 2026-10-12. CVE-2026-110264 ist eine zweite, breitere Regex-Schwachstelle, behoben am 2026-10-21, die jede selbst verwaltete Version bis zurück zu 7.0 betrifft. Gleiche Engine, gleicher Score, anderer Fehler, und genau deshalb reicht eine Prüfung nicht aus.
Behobene VersionenCVE-2026-97229 (behoben am 2026-10-12)Linie | Behoben in |
|---|---|
GitLab 19.2 | 19.2.8 |
GitLab 19.3 | 19.3.5 |
GitLab 19.4 | 19.4.2 |
GitLab 19.5, älter als 19.2 | Nicht als von diesem CVE betroffen aufgeführt |
CVE-2026-110264 (behoben am 2026-10-21)Linie | Behoben in |
|---|---|
GitLab 19.5 | 19.5.1 |
GitLab 19.4 | 19.4.3 |
GitLab 19.3 | 19.3.6 |
GitLab 19.2 | 19.2.9 |
GitLab 19.1 | 19.1.9 |
GitLab 19.0 | 19.0.10 |
GitLab 18.11 | 18.11.13 |
GitLab 18.10 und älter | Kein behobenes Release, Upgrade auf 18.11.13 oder neuer |
Ruby, für Quell- und Custom-Image-InstallationenLinie | Behoben in |
|---|---|
Ruby 3.3 | 3.3.13 |
Ruby 3.4 | 3.4.12 |
Ruby 4.0 | 4.0.9 |
Ruby 3.2 und älter | Kein Fix, End of Life, wechsle zu 3.4 oder 4.0 |
Falle 1: Der Patch vom 12. Oktober deckt den 21. Oktober nicht ab19.4.2, 19.3.5 und 19.2.8 behoben CVE-2026-97229. Jede davon liegt unter dem CVE-2026-110264-Fix für ihren Branch (19.4.3, 19.3.6, 19.2.9). Wenn du am 12. Oktober gepatcht und dann aufgehört hast, bist du weiterhin verwundbar, und ein Scanner, der nur das erste CVE kennt, wird dich als sauber einstufen. Dieses Tool bewertet beide und benennt die Falle in seiner Ausgabe, wenn es sie erkennt.
Falle 2: Ein GitLab-Upgrade behebt nicht dein eigenes RubyGitLabs Fix ist ein Patch für das Ruby, das in seinen offiziellen Paketen und Images gebündelt ist. Eine Quellinstallation oder ein Custom-Image, das Ruby separat installiert, erhält diesen Patch nicht durch ein GitLab-Upgrade. Alpine Linux hat genau das erlebt: Es aktualisierte am 2026-10-22 auf GitLab 19.3.6 und blieb verwundbar, weil sein Image Standard-Ruby verwendete. Ein Angreifer sondierte seinen Server am 2026-10-20 und 21, brachte Worker achtmal zum Absturz, kam bei vier davon teilweise durch den Exploit und kehrte am 25 und 26 zurück. Alpine fand keinen Beweis, dass der Exploit erfolgreich war, konnte es aber nicht ausschließen, baute die Instanz von Grund auf neu auf, ersetzte seine geheimen Schlüssel und setzte alle Passwörter zurück. Sein behobenes Image, nach dem 2026-10-27 erneut gepullt, enthält Ruby 3.3.13.
So: --install-type official bewertet allein die GitLab-Version, weil das Ruby damit einhergeht. --install-type source oder custom bewertet zusätzlich das Ruby, das du mit --ruby-version angibst, und eine fehlende Ruby-Version wird als UNKNOWN bewertet, nicht als sauber. Ruby 4.0.8 ist ein Sonderfall, den man kennen sollte: Es behebt den Fehler CVE-2026-97229, aber nicht CVE-2026-110264, daher wird es hier als VULNERABLE bewertet. Ruby hat für diese Fixes keine eigenen CVE-Kennungen angefordert, weshalb ein Scanner, der CVE-Datensätze mit installierten Paketen abgleicht, nirgends ein verwundbares Ruby findet. Dieses Tool prüft stattdessen die Ruby-Version direkt.
Was es prüftGitLab-Version: CVE-2026-97229 und CVE-2026-110264 getrennt, dann ein GesamturteilCSV-Inventar vieler Instanzen: name,gitlab_version,ruby_version,install_type,hostingRuby-Falle, wenn du angibst, dass die Installation source oder custom istGitLab.com und Dedicated als bereits gepatcht, keine Aktion erforderlichJeder Befund erhält ein Urteil: VULNERABLE, FIXED, EOL_NO_FIX, UNKNOWN oder NOT_AFFECTED für eine einzelne CVE auf einem Branch, den sie nicht betrifft. EOL_NO_FIX zählt als verwundbar: Für diese Linie wird es keinen Patch geben.
Was es niemals tutKeine Netzwerkanfragen. Kein Sondieren entfernter Server. Keine konstruierten Regexe, keine CI-Lint-Anfrage, kein Exploit-Traffic, kein PoC-Code. Es liest die von dir angegebenen Versionsstrings und hört dann auf. Das ist Absicht: Die öffentlichen PoCs für CVE-2026-97229 existieren bereits, und einen davon hier nachzubauen, würde nichts Defensives hinzufügen.
Warum das, wenn es bereits PoCs und Versionszähler gibtDas öffentliche Material zu CVE-2026-97229 ist überwiegend offensiv: PoCs, die Code als git-Benutzer ausführen, und Labs, die abbilden, welche Builds waffenfähig sind. Censys zählt exponierte Hosts nach Version. GitLab hat Sigma-Regeln veröffentlicht, um Exploit-Versuche in Logs zu erkennen. Nichts davon ist ein eigenständiges defensives Triage-Tool, das beide Oktober-Schwachstellen mit CVSS 10.0 gemeinsam bewertet und das Ruby unter einer Source- oder Custom-Installation prüft. Diese Lücke füllt dieses Repo: ein Befehl, beide CVEs, beide Fallen, keine Payload. Verwende es zusammen mit den Sigma-Regeln von GitLab, nicht anstelle von ihnen. Wenn eine Instanz sondiert wurde, ist Versions-Triage keine Kompromittierungs-Triage: Prüfe Worker-Crash-Logs und Onigmo-Crash-Berichte und folge dem Beispiel von Alpine, wenn du einen Versuch nicht ausschließen kannst.
BewertungBefund | Schweregrad |
|---|---|
GitLab unterhalb des Fixes seines Branches für eine der beiden CVEs | VULNERABLE |
GitLab auf 18.10 oder älter, oder Ruby 3.2 oder älter bei einer Source-/Custom-Installation | EOL_NO_FIX, zählt als verwundbar |
GitLab auf oder jenseits beider Fixes, und ein behobenes Ruby, wo zutreffend | FIXED |
Source/custom-Installation ohne Ruby-Version, oder ein Branch neuer als die Daten dieses Tools (2026-10-30) | UNKNOWN, nicht sauber |
GitLab.com / Dedicated | FIXED, von GitLab gepatcht |
Verwendung# One instance, official package or image
python3 gitlab_onigmo_scanner.py --version 19.4.2
# One instance, source install with its own Ruby
python3 gitlab_onigmo_scanner.py --version 19.4.3 --ruby-version 3.4.11 --install-type source
# A whole estate, machine-readable output
python3 gitlab_onigmo_scanner.py --list inventory.csv --json
# Tests (version tables only, no network)
python3 -m unittest discover -s tests -v
inventory.csv-Format, Kopfzeile optional:
name,gitlab_version,ruby_version,install_type,hosting
prod,19.4.1,,official,self-managed
staging,19.4.3,,official,self-managed
legacy-source,19.4.3,3.4.11,source,self-managed