Funkcja CGI.escape_html w bibliotece Ruby CGI zawiera błąd integer overflow prowadzący do przepełnienia bufora (buffer overflow). Podatność dotyczy platform, gdzie typy size_t i long mają różną szerokość (np. Windows), i może być wywołana przez nieprawidłowo długi ciąg znaków.
▸ Pokaż oryginał (EN)
CGI.escape_html in Ruby before 2.7.5 and 3.x before 3.0.3 has an integer overflow and resultant buffer overflow via a long string on platforms (such as Windows) where size_t and long have different numbers of bytes. This also affects the CGI gem before 0.3.1 for Ruby.
Na platformach, gdzie rozmiar typów size_t i long jest różny (takich jak Windows 64-bit), przetwarzanie bardzo długiego ciągu znaków przez funkcję CGI.escape_html powoduje przepełnienie liczby całkowitej (integer overflow, CWE-190). Wynik tej operacji jest następnie używany jako rozmiar alokacji pamięci, co prowadzi do zapisu poza przeznaczonym obszarem bufora (buffer overflow). Atakujący może dostarczyć spreparowany, odpowiednio długi ciąg wejściowy do aplikacji korzystającej z tej funkcji.
Udane wykorzystanie podatności może umożliwić atakującemu zdalne wykonanie kodu (RCE), a także prowadzić do naruszenia poufności, integralności i dostępności systemu — co odzwierciedla maksymalny wynik CVSS 9.8.
Należy zaktualizować Ruby do wersji 2.7.5 lub nowszej (dla gałęzi 2.7.x) albo do wersji 3.0.3 lub nowszej (dla gałęzi 3.0.x). Gem CGI należy zaktualizować do wersji 0.3.1 lub nowszej. W przypadku dystrybucji Linux należy zastosować patche dostępne u producenta zgodnie z referencjami (Fedora, Debian, Gentoo).
Ruby przed wersją 2.7.5 oraz Ruby 3.x przed wersją 3.0.3; gem CGI przed wersją 0.3.1 dla Ruby. Podatność szczególnie dotyczy platform, gdzie size_t i long mają różną liczbę bajtów (np. Windows).
Podatność zgłoszona poprzez platformę HackerOne (raport #1328463). Problem dotyczy głównie środowisk Windows ze względu na różnicę w szerokości typów size_t i long na tej platformie.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HFedora Project Fedora
OSFedoraproject3435Ruby Lang Cgi
APPRuby-Lang< 0.3.1≤ 0.1.0≤ 0.2.0Ruby Lang Ruby
APPRuby-Lang2.7.0 – 2.7.5 (bez)3.0.0 – 3.0.3 (bez)
Powiązane podatności
PHP CGI argument injection – RCE na Windows przez mechanizm Best-Fit
Type Confusion w V8 (Google Chrome) — RCE przez spreparowaną stronę HTML
Type Confusion w silniku V8 Chrome — zdalne wykonanie kodu (RCE)
Use-after-free w Google Chrome Visuals umożliwiający ucieczkę z sandbox
Integer overflow w Skia w Google Chrome — sandbox escape