W kompilatorze wyrażeń regularnych (Regexp) w Ruby 3.x wykryto błąd double free (CWE-415), klasyfikowany jako podatność krytyczna z wynikiem CVSS 9.8. Atakujący może wykorzystać ją do zapisu w nieoczekiwanych obszarach pamięci, jeśli aplikacja przetwarza niezaufane dane wejściowe użytkownika jako wyrażenia regularne.
▸ Pokaż oryginał (EN)
A double free was found in the Regexp compiler in Ruby 3.x before 3.0.4 and 3.1.x before 3.1.2. If a victim attempts to create a Regexp from untrusted user input, an attacker may be able to write to unexpected memory locations.
Podatność polega na dwukrotnym zwolnieniu tego samego obszaru pamięci (double free) podczas kompilacji wyrażeń regularnych. Jeśli aplikacja tworzy obiekt Regexp na podstawie danych dostarczonych przez użytkownika, błąd w zarządzaniu pamięcią może zostać wywołany przez specjalnie spreparowany ciąg znaków. W wyniku tego atakujący uzyskuje możliwość zapisu do nieoczekiwanych lokalizacji pamięci, co jest charakterystycznym skutkiem błędów klasy double free.
Atakujący może doprowadzić do zapisu danych w arbitralnych obszarach pamięci procesu, co w praktyce może skutkować wykonaniem dowolnego kodu (RCE), ujawnieniem danych lub destabilizacją aplikacji.
Należy zaktualizować Ruby do wersji 3.0.4 lub wyższej (w gałęzi 3.0.x) oraz do wersji 3.1.2 lub wyższej (w gałęzi 3.1.x). Jako obejście należy unikać tworzenia obiektów Regexp bezpośrednio z niezaufanych danych wejściowych użytkownika do czasu zastosowania patcha.
Ruby w wersjach 3.x przed 3.0.4 oraz 3.1.x przed 3.1.2
Podatność została opisana przez Ruby Security Team i opublikowana oficjalnie 12 kwietnia 2022 r. na stronie ruby-lang.org. Szczegóły techniczne dostępne są również w raporcie HackerOne #1220911.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HRuby Lang Ruby
APPRuby-Lang3.0.0 – 3.0.4 (bez)3.1.0 – 3.1.2 (bez)
Powiązane podatności
Heap overflow w Ruby Psych::Emitter start_document — RCE
Integer overflow w CGI.escape_html w Ruby — przepełnienie bufora
Ruby OpenSSL: błędna generacja kluczy prywatnych RSA (wykładnik = 1)
Błędne porównanie obiektów X.509 w bibliotece OpenSSL dla Ruby
Path traversal w metodach Dir Ruby przez brak walidacji znaków NULL