Уязвимость вызвана ошибкой в коде резолвинга имени хоста перед обращением к SOCKS5-прокси. При длине имени хоста до 256 символов curl сразу передаёт имя в SOCKS5-прокси для резолвинга на его стороне, а если имя больше 255 символов переключается на локальный резолвер и передаёт в SOCKS5 уже определённый адрес. Из-за ошибки в коде, флаг, указывающий на необходимость локального резолвинга, в процессе медленного согласования соединения через SOCKS5 мог быть выставлен не в то значение, что приводило к записи длинного имени хоста в буфер, выделенный с расчётом на сохранение IP-адреса или имени, не превышающего 255 символов.
Владелец сайта, к которому curl обращается через SOCKS5-прокси, может инициировать переполнение буфера на стороне клиента, вернув в ответ код перенаправления запроса (HTTP 30x) и выставив в заголовке «Location:» URL с именем хоста, размер которого находится в диапазоне от 16 до 64 КБ (значение 16 КБ обусловлено минимальным размером, необходимым для переполнения выделенного буфера, а значение 65 КБ связано с максимально разрешённой длиной имени хоста в URL). Если в настройках libcurl разрешено перенаправление запросов и используемый SOCKS5-прокси достаточно медленный, то имя длинное хоста будет записано в небольшой буфер, заведомо меньшего размера.
Уязвимость в основном затрагивает приложения на базе libcurl и проявляется в утилите curl только при использовании опции «—limit-rate» со значением, меньше 65541 — в libcurl по умолчанию выделяется буфер, размером 16 КБ, а в утилите curl — 100 КБ, но
этот размер меняется в зависимости от значения параметра «—limit-rate».
Источник: http://www.opennet.ru/opennews/art.shtml?num=59909