Уязвимость повреждения памяти в GNU Wget из-за некорректной обработки отрицательных значений длины чанка
Описание
В функции retr.c:fd_read_body() происходит обработка ответов со статусом OK. При обработке фрагментированных ответов в версиях wget до 1.19.2, парсер фрагментов (чанков) использует функцию strtol() для чтения длины каждого фрагмента, однако не проверяет, что длина фрагмента является неотрицательным числом. Код пытается считать фрагмент кусками по 8192 байта, используя макрос MIN(), но в результате передает отрицательную длину фрагмента в функцию retr.c:fd_read(). Поскольку fd_read() принимает аргумент типа int, старшие 32 бита длины фрагмента отбрасываются, позволяя злоумышленнику полностью контролировать длину аргумента для fd_read(). Злоумышленник может повредить метаданные функции malloc после выделенного буфера.
Затронутые версии ПО
- GNU Wget до релиза 1.19.2
Тип уязвимости
Повреждение памяти
Ссылки
- Issue TrackingPatchThird Party Advisory
- Issue TrackingThird Party Advisory
- Issue TrackingThird Party AdvisoryVDB Entry
- Issue TrackingThird Party AdvisoryVDB Entry
- Issue TrackingThird Party Advisory
- Issue TrackingPatchThird Party Advisory
- Issue TrackingPatchThird Party Advisory
- Issue TrackingThird Party Advisory
- Issue TrackingThird Party AdvisoryVDB Entry
- Issue TrackingThird Party AdvisoryVDB Entry
- Issue TrackingThird Party Advisory
- Issue TrackingPatchThird Party Advisory
Уязвимые конфигурации
Одно из
EPSS
8.8 High
CVSS3
9.3 Critical
CVSS2
Дефекты
Связанные уязвимости
The retr.c:fd_read_body() function is called when processing OK responses. When the response is sent chunked in wget before 1.19.2, the chunk parser uses strtol() to read each chunk's length, but doesn't check that the chunk length is a non-negative number. The code then tries to read the chunk in pieces of 8192 bytes by using the MIN() macro, but ends up passing the negative chunk length to retr.c:fd_read(). As fd_read() takes an int argument, the high 32 bits of the chunk length are discarded, leaving fd_read() with a completely attacker controlled length argument. The attacker can corrupt malloc metadata after the allocated buffer.
The retr.c:fd_read_body() function is called when processing OK responses. When the response is sent chunked in wget before 1.19.2, the chunk parser uses strtol() to read each chunk's length, but doesn't check that the chunk length is a non-negative number. The code then tries to read the chunk in pieces of 8192 bytes by using the MIN() macro, but ends up passing the negative chunk length to retr.c:fd_read(). As fd_read() takes an int argument, the high 32 bits of the chunk length are discarded, leaving fd_read() with a completely attacker controlled length argument. The attacker can corrupt malloc metadata after the allocated buffer.
The retr.c:fd_read_body() function is called when processing OK respon ...
The retr.c:fd_read_body() function is called when processing OK responses. When the response is sent chunked in wget before 1.19.2, the chunk parser uses strtol() to read each chunk's length, but doesn't check that the chunk length is a non-negative number. The code then tries to read the chunk in pieces of 8192 bytes by using the MIN() macro, but ends up passing the negative chunk length to retr.c:fd_read(). As fd_read() takes an int argument, the high 32 bits of the chunk length are discarded, leaving fd_read() with a completely attacker controlled length argument. The attacker can corrupt malloc metadata after the allocated buffer.
Уязвимость функции fd_read_body() программного средства для загрузки файлов по сети Wget , позволяющая нарушителю выполнить произвольный код
EPSS
8.8 High
CVSS3
9.3 Critical
CVSS2