Ruby heeft versies 4.0.9, 3.4.12 en 3.3.13 uitgebracht om drie bugs in Onigmo, de reguliere-expressie-engine die in de taal is ingebouwd, te verhelpen. Die bugs liggen aan de basis van vier kritieke beveiligingslekken die GitLab de afgelopen maand heeft gepatcht.
GitLab ontdekte dat een speciaal geconstrueerd patroon het geheugen kan beschadigen tijdens het compileren door Ruby, wat mogelijk kan leiden tot code-uitvoering op hun eigen servers.
Ruby zegt dat elke applicatie die een reguliere expressie bouwt uit tekst die een aanvaller beheert, getroffen is — niet alleen GitLab.
Welke applicaties zijn getroffen
In zijn advies schreef Ruby dat een applicatie alleen is getroffen als deze een reguliere expressie compileert vanaf een string die een aanvaller controleert. Dat gebeurt wanneer een programma zo’n string doorgeeft aan Regexp.new, Regexp.union of Regexp.compile, of het in een patroon plaatst via interpolatie, zoals in /#{input}/.
Applicaties die alleen reguliere expressies gebruiken die door hun eigen ontwikkelaars zijn geschreven, zijn niet getroffen.
Ruby heeft de bugs opgelost in 4.0.9, 3.4.12 en 3.3.13. De releases 3.4.12 en 3.3.13 zijn de eerste in hun serie die een van de drie fixes bevatten.
- Ruby 4.0: upgrade naar 4.0.9
- Ruby 3.4: upgrade naar 3.4.12
- Ruby 3.3: upgrade naar 3.3.13
Een eerdere uitgave uit dezelfde week, 4.0.8, bevat niet de fix voor één van de fouten, CVE-2026-110264, dus 4.0-gebruikers moeten 4.0.9 installeren.
Ruby 3.2 en eerder krijgen geen fix meer. Ruby 3.2 bereikte end-of-life op 1 april 2026 en 3.2.11 was de laatste release. Ruby raadt aan over te stappen naar 3.4 of 4.0.
Als u nu nog niet kunt upgraden, zegt het advies om te stoppen met het compileren van reguliere expressies uit onbetrouwbare invoer.
Twee verdedigingsmaatregelen die logisch lijken, helpen niet. Het instellen van Regexp.timeout stopt deze bugs niet. Het begrenzen van de lengte van een patroon is ook onbetrouwbaar omdat korte patronen de bugs kunnen triggeren.
Hoe de bugs GitLab bereikten
GitLab compileert reguliere expressies die door gebruikers worden aangeleverd, bijvoorbeeld patronen in een CI/CD-configuratie. Men ontdekte dat geconstrueerde patronen het geheugen kunnen beschadigen tijdens het compileren door Ruby, en GitLab gaf tussen 23 september en 21 oktober vier CVE’s uit, die ieder werden opgelost door een gepatchte Ruby uit te brengen.
De eerste twee, onthuld op 23 september, vereisten elk een ingelogd account en werden beoordeeld met 9,9 van de 10. De twee uit oktober, CVE-2026-97229 op 12 oktober en CVE-2026-110264 op 21 oktober, vereisen geen account en kregen een score van 10,0, het maximum. CVE-2026-110264 treft elke GitLab-versie vanaf 7.0.
Een onderzoeker met de handle joaxcar meldde alle vier via GitLab’s bugbountyprogramma. Per 23 oktober stond geen van de vier vermeld in de CISA-lijst Known Exploited Vulnerabilities.
Vooralsnog geen Ruby-CVE
Ruby heeft zelf voorlopig geen CVE-identifiers aangevraagd voor deze fixes, “althans voor nu”, en liet gebruikers weten de problemen te volgen via de vier CVE-nummers van GitLab.
Dat laat een gat achter voor wie op CVE scant. De CVE-records van GitLab noemen alleen GitLab als het getroffen product, dus een scanner die die records controleert tegen geïnstalleerde Ruby-versies vindt geen match.
Ruby heeft dit soort fouten eerder als kwetsbaarheid behandeld en CVE-nummers toegekend aan fixes in 2022 en 2024, ook al is het al lange tijd onveilig om een reguliere expressie te bouwen vanuit onbetrouwbare invoer.
De documentatie beschrijft onbetrouwbare patronen nog steeds alleen als een risico voor denial-of-service. Ruby zei dat het zijn advies zal bijwerken als het zelf CVE-identifiers aanvraagt.
Voor GitLab-beheerders
Zelfbeheerde GitLab-instanties hebben de release nodig die CVE-2026-110264 oplost. GitLab leverde die op 21 oktober en heeft de fix teruggeporteerd tot zover terug als versie 18.11.13.
- 19.5.1
- 19.4.3
- 19.3.6
- 19.2.9
- 19.1.9
- 19.0.10
- 18.11.13
GitLab.com draait al de gepatchte versie en GitLab Dedicated-tenanten op recente interne releases hoeven geen actie te ondernemen, aldus GitLab. Omdat GitLab zijn eigen kopie van Ruby bundelt en daarmeepatched, zorgt het installeren van een van deze gefixeerde versies ervoor dat de fix wordt toegepast.
GitLab publiceerde ook detectieregels die zelfbeheerders kunnen gebruiken om tekenen van exploitatiepogingen op te sporen.
