Rack — это модульный интерфейс веб-сервера Ruby. До версий 2.2.23, 3.1.21 и 3.2.6 Rack::Files#fail устанавливает заголовок ответа Content-Length, используя String#size вместо String#bytesize. Если тело ответа содержит многобайтовые символы UTF-8, объявленная длина содержимого меньше количества байтов, фактически отправленных по сети.
Поскольку Rack::Files отражает запрошенный путь в ответах 404, злоумышленник может вызвать это несоответствие, запросив несуществующий путь, содержащий символы UTF-8 в процентной кодировке. Это приводит к неправильному формированию ответа HTTP и может вызвать десинхронизацию ответа в развертываниях, которые полагаются на неправильное значение Content-Length. Эта проблема исправлена в версиях 2.2.23, 3.1.21 и 3.2.6.
Показать оригинальное описание (EN)
Rack is a modular Ruby web server interface. Prior to versions 2.2.23, 3.1.21, and 3.2.6, Rack::Files#fail sets the Content-Length response header using String#size instead of String#bytesize. When the response body contains multibyte UTF-8 characters, the declared Content-Length is smaller than the number of bytes actually sent on the wire. Because Rack::Files reflects the requested path in 404 responses, an attacker can trigger this mismatch by requesting a non-existent path containing percent-encoded UTF-8 characters. This results in incorrect HTTP response framing and may cause response desynchronization in deployments that rely on the incorrect Content-Length value. This issue has been patched in versions 2.2.23, 3.1.21, and 3.2.6.
Характеристики атаки
Последствия
Строка CVSS v3.1
Уязвимые продукты 3
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Rack Rack
cpe:2.3:a:rack:rack:*:*:*:*:*:ruby:*:*
|
— |
2.2.23
|
|
Rack Rack
cpe:2.3:a:rack:rack:*:*:*:*:*:ruby:*:*
|
3.0.0
|
3.1.21
|
|
Rack Rack
cpe:2.3:a:rack:rack:*:*:*:*:*:ruby:*:*
|
3.2.0
|
3.2.6
|