Bezpieczeństwo · 2 listopada 2026

Błędy w silniku wyrażeń regularnych Ruby spowodowały krytyczne luki w GitLab

macbook pro on white table
Devin Pickell / Unsplash

Zespół Ruby wydał wersje 4.0.9, 3.4.12 oraz 3.3.13, aby naprawić trzy błędy w silniku wyrażeń regularnych Onigmo. Usterki te mogą umożliwić wykonanie szkodliwego kodu na serwerach, na których uruchomione są podatne aplikacje.

Najbardziej znanym przypadkiem wykorzystania tych błędów są luki w systemie GitLab, o których poinformowano w ostatnich tygodniach. Zagrożona jest każda aplikacja napisana w języku Ruby, która generuje wyrażenia regularne na podstawie danych wejściowych od użytkowników. Zespół Ruby zaznaczył, że osoby korzystające wyłącznie z własnoręcznie napisanych wzorców nie muszą się obawiać. Błędy występują na etapie kompilacji, czyli podczas tłumaczenia wzorca na program wewnętrzny, a nie podczas samego dopasowywania tekstu.

W przypadku GitLab luki pojawiły się, ponieważ usługa ta kompiluje wyrażenia regularne z danych wejściowych, na przykład z konfiguracji CI/CD. Badacz bezpieczeństwa Johan Carlsson zgłosił cztery luki: CVE-2026-89078 oraz CVE-2026-93577 z wartością CVSS 9,9, a także CVE-2026-97229 i CVE-2026-110264 z maksymalną wartością 10,0. Te dwie ostatnie można było wykorzystać bez uwierzytelnienia. GitLab zamknął te luki między 23 września a 21 października, stosując własne poprawki do dołączonego języka Ruby. Ostatnia aktualizacja dotyczy wszystkich wersji GitLab od wersji 7.0 z 2014 roku.

Zespół Ruby przypisał cztery identyfikatory CVE do trzech błędów. CVE-2026-89078 wynika z podwójnego zwalniania pamięci podczas odczytu wzorca. CVE-2026-93577 oraz CVE-2026-97229 są spowodowane przepełnieniem liczby całkowitej przy obliczaniu rozmiaru skompilowanego programu. Z kolei CVE-2026-110264 wynika z przepełnienia wewnętrznych liczników w wzorcach z bardzo dużą liczbą powtórzeń.

Żadna z trzech poprawek nie jest nowa. Rozwiązanie problemu podwójnego zwalniania pamięci trafiło do gałęzi rozwojowej w maju 2025 roku i jest obecne w wersji 4.0.0. Poprawka liczników dla CVE-2026-110264 pojawiła się w kwietniu 2026 roku, a poprawka rozmiaru programu we wrześniu 2026 roku. Wersja 4.0.8 z 22 października wprowadziła poprawkę rozmiaru programu w ramach rutynowej aktualizacji, bez informacji o bezpieczeństwie. Dzień później wydano wersję 4.0.9 z ostatnią brakującą poprawką, a stabilne gałęzie 3.4 i 3.3 otrzymały wszystkie trzy jednocześnie. Wersja 3.3.13 została wydana jako wyjątek, ponieważ GitLab przypisał do tych błędów numery CVE.

W najgorszym scenariuszu kod napastnika może zostać uruchomiony z uprawnieniami procesu Ruby, co daje dostęp do bazy danych, sekretów środowiskowych i systemu plików. Bardziej prawdopodobne jest jednak zawieszenie procesu, co prowadzi do odmowy usługi bez konieczności logowania. Zarówno GitLab, jak i zespół Ruby nie zgłosili dotychczas aktywnych ataków.

Zespół Ruby wyjaśnił, że mechanizm Regexp.timeout nie chroni przed tymi błędami, ponieważ przerywa on jedynie zbyt długie dopasowywanie, a usterki występują wcześniej, podczas kompilacji. Ograniczenie długości wzorca również nie jest skuteczne, gdyż niektóre błędy wyzwalają krótkie wzorce. Projekt Ruby nie wnioskował o własne numery CVE, uznając kompilowanie obcych wzorców za niebezpieczną praktykę, którą powinny unikać aplikacje.