Выпуск curl 7.71.0 с устранением двух уязвимостей
Доступна новая версия утилиты для получения и отправки данных по сети - curl 7.71.0, предоставляющей возможность гибкого формирования запроса с заданием таких параметров, как cookie, user_agent, referer и любых других заголовков. cURL поддерживает HTTP, HTTPS, HTTP/2.0, HTTP/3, SMTP, IMAP, POP3, Telnet, FTP, LDAP, RTSP, RTMP и другие сетевые протоколы. Одновременно вышло обновление параллельно развиваемой библиотеки libcurl, предоставляющей API для задействования всех функций curl в программах на таких языках, как Си, Perl, PHP, Python.
В новом выпуске добавлена опция "--retry-all-errors" для осуществления повторных попыток выполнения операций при возникновении любых ошибок и устранено две уязвимости:
- Уязвимость CVE-2020-8177 позволяет перезаписать локальный файл в системе при обращении к подконтрольному атакующему серверу. Проблема проявляется только при одновременном использовании опций "-J" ("--remote-header-name") и "-i" ("--head"). Опция "-J" позволяет сохранить файл с именем, указанным в заголовке "Content-Disposition". В случае если файл с таким именем уже существует, программа curl в штатном режиме отказывается выполнить перезапись, но в случае наличия опции "-i" логика проверки нарушается и файл перезаписывается (проверка осуществляется на этапе получения тела ответа, но при опции "-i" вначале выводятся HTTP-заголовки и они успевают сохраниться до начала обработки тела ответа). В файл записываются только HTTP-заголовки, но сервер может отдать вместо заголовков произвольные данные и они будут записаны.
- Уязвимость CVE-2020-8169 может привести к утечке на сервер DNS части некоторых паролей доступа к сайту (Basic, Digest, NTLM и т.п.). При использовании символа "@" в пароле, который также используется в качестве разделителя пароля в URL, при срабатывании HTTP-перенаправления curl отправит часть пароля после символа "@" вместе с доменом для определения имени. Например, при указании пароля "passw@rd123" и имени пользователя "dan", curl сгенерирует URL "https://dan:passw@rd123@example.com/path" вместо "https://dan:passw%40rd123@example.com/path" и отправит запрос на резолвинг хоста "rd123@example.com" вместо "example.com".
Проблема проявляется при включении поддержки относительных HTTP-редиректорв (отключаются через CURLOPT_FOLLOWLOCATION). В случает использования традиционных DNS информацию о части пароля может узнать провадер DNS и атакующий, имеющий возможность перехвата транзитного сетевого трафика (даже если исходный запрос был по HTTPS, так как DNS-трафик не шифруется). При применении DNS-over-HTTPS (DoH) утечка ограничивается оператором DoH.