Уязвимость переполнения буфера в стеке в libcurl при обработке NTLM type-3 заголовков
Описание
В библиотеке libcurl присутствует уязвимость переполнения буфера в стеке. Функция, создающая исходящий заголовок типа NTLM type-3
(lib/vauth/ntlm.c:Curl_auth_create_ntlm_type3_message()
), формирует содержимое HTTP-заголовка на основе ранее полученных данных. Проверка, предназначенная для предотвращения переполнения локального буфера, реализована некорректно из-за использования операций с беззнаковыми числами, что не предотвращает переполнение. Эти данные могут превысить размер локального буфера, если из предыдущего заголовка NTLMv2
от злоумышленника или неправильно настроенного HTTP-сервера извлекаются очень большие данные nt response
. Размер таких данных должен составлять около 1000 байт или более. Фактические данные полезной нагрузки, копируемые в целевой буфер, берутся из заголовка ответа типа NTLMv2 type-2
.
Затронутые версии ПО
- libcurl с 7.36.0 до 7.64.0 (исключая 7.64.0)
Тип уязвимости
Переполнение буфера в стеке
Ссылки
- Third Party AdvisoryVDB Entry
- Third Party Advisory
- ExploitIssue TrackingPatchThird Party Advisory
- Third Party Advisory
- PatchVendor Advisory
- Third Party Advisory
- PatchThird Party Advisory
- Third Party Advisory
- Third Party Advisory
- Third Party Advisory
- Third Party Advisory
- PatchThird Party Advisory
- PatchThird Party Advisory
- Third Party AdvisoryVDB Entry
- Third Party Advisory
- ExploitIssue TrackingPatchThird Party Advisory
- Third Party Advisory
- PatchVendor Advisory
Уязвимые конфигурации
Одно из
Одно из
Одно из
EPSS
7.1 High
CVSS3
9.8 Critical
CVSS3
7.5 High
CVSS2
Дефекты
Связанные уязвимости
libcurl versions from 7.36.0 to before 7.64.0 are vulnerable to a stack-based buffer overflow. The function creating an outgoing NTLM type-3 header (`lib/vauth/ntlm.c:Curl_auth_create_ntlm_type3_message()`), generates the request HTTP header contents based on previously received data. The check that exists to prevent the local buffer from getting overflowed is implemented wrongly (using unsigned math) and as such it does not prevent the overflow from happening. This output data can grow larger than the local buffer if very large 'nt response' data is extracted from a previous NTLMv2 header provided by the malicious or broken HTTP server. Such a 'large value' needs to be around 1000 bytes or more. The actual payload data copied to the target buffer comes from the NTLMv2 type-2 response header.
libcurl versions from 7.36.0 to before 7.64.0 are vulnerable to a stack-based buffer overflow. The function creating an outgoing NTLM type-3 header (`lib/vauth/ntlm.c:Curl_auth_create_ntlm_type3_message()`), generates the request HTTP header contents based on previously received data. The check that exists to prevent the local buffer from getting overflowed is implemented wrongly (using unsigned math) and as such it does not prevent the overflow from happening. This output data can grow larger than the local buffer if very large 'nt response' data is extracted from a previous NTLMv2 header provided by the malicious or broken HTTP server. Such a 'large value' needs to be around 1000 bytes or more. The actual payload data copied to the target buffer comes from the NTLMv2 type-2 response header.
libcurl versions from 7.36.0 to before 7.64.0 are vulnerable to a stac ...
libcurl versions from 7.36.0 to before 7.64.0 are vulnerable to a stack-based buffer overflow. The function creating an outgoing NTLM type-3 header (`lib/vauth/ntlm.c:Curl_auth_create_ntlm_type3_message()`), generates the request HTTP header contents based on previously received data. The check that exists to prevent the local buffer from getting overflowed is implemented wrongly (using unsigned math) and as such it does not prevent the overflow from happening. This output data can grow larger than the local buffer if very large 'nt response' data is extracted from a previous NTLMv2 header provided by the malicious or broken HTTP server. Such a 'large value' needs to be around 1000 bytes or more. The actual payload data copied to the target buffer comes from the NTLMv2 type-2 response header.
Уязвимость библиотеки libcurl, вызванная переполнением буфера на стеке, позволяющая нарушителю оказать воздействие на конфиденциальность, целостность и доступность защищаемой информации
EPSS
7.1 High
CVSS3
9.8 Critical
CVSS3
7.5 High
CVSS2