«Я всего лишь человек», – прокомментировал свою ошибку главный разработчик проекта.
Вслед за оживлёнными дискуссиями о проблемах безопасности инструмента командной строки для передачи данных curl, сегодня наконец была выпущена новая версия , устраняющая выявленные ранее уязвимости.
Даниэль Стенберг, основатель и главный разработчик проекта curl, описал уязвимости как «вероятно, самые серьёзные проблемы безопасности curl за долгое время». Вышедшие исправления устраняют две отдельные уязвимости: CVE-2023-38545 и CVE-2023-38546 .
Первая уязвимость под идентификатором CVE-2023-38545 имеет высокую степень серьёзности и представляет из себя ошибку переполнения буфера кучи, которая затрагивает как libcurl, так и curl. Среди возможных последствий — повреждение данных и даже выполнение произвольного кода.
Эта уязвимость может происходить во время медленного подтверждения связи прокси-сервера SOCKS5 из-за неправильной обработки имён хостов длиннее 255 байт. Когда имя хоста превышает 255 байт, curl переключается на локальное разрешение, а не позволяет прокси разрешать имя хоста удалённо.
«Из-за ошибки локальная переменная со значением "let the host resolve the name", могла получить неправильное значение во время медленного подтверждения SOCKS5 и, вопреки намерению, скопировать слишком длинное имя хоста в целевой буфер», — сообщил разработчик.
В сообщении так же говорится, что злоумышленники могли воспользоваться этой уязвимостью, используя вредоносный HTTPS-сервер, перенаправляющий на URL, который был создан специально для запуска переполнения буфера кучи.
Приложениям, зависимым от libcurl версии от 7.69.0 до 8.3.0 включительно, рекомендуется как можно скорее обновиться до версии 8.4.0. Особенно уязвимы приложения, в которых не установлен предпочтительный размер буфера приёма (CURLOPT_BUFFERSIZE), или те, в которых он установлен меньше 65541 байта.
Конфигурация инструмента curl по умолчанию защищает от этой уязвимости, но приложениям, зависимым от libcurl, может потребоваться внести ручные изменения. Также разработчик порекомендовал не использовать прокси CURLPROXY_SOCKS5_HOSTNAME и устанавливать переменную окружения прокси в схему «socks5h://».
«Читая код сейчас, невозможно не увидеть ошибку. Мне действительно больно признавать тот факт, что я допустил ошибку, которая затем осталась в коде на 1315 дней. Я приношу извинения. Я всего лишь человек», — раскаивается разработчик.
В версии 8.4.0 Стенберг гарантирует возврат утилитой ошибки при обнаружении имён хостов длиной более 255 байт.
Вторая уязвимость под идентификатором CVE-2023-38546 — уже менее опасна. Она связана с инъекцией cookie и затрагивает только libcurl.
Разработчик отдельно отметил , что вероятность того, что злоумышленники могли бы выполнить ряд условий, необходимых для запуска уязвимости CVE-2023-38546, невелика. Но даже если бы они это сделали, риск атаки с использованием cookie-файлов для безопасности пользователя всё ещё невелик.
Затронутыми версиями являются libcurl от 7.9.1 до 8.3.0 включительно. Пользователям рекомендуется как можно скорее обновиться до curl 8.4.0 и вызывать «curl_easy_setopt(cloned_curl, CURLOPT_COOKIELIST, "ALL");» после каждого обращения к «curl_easy_duphandle();».
Даниэль Стенберг признал, что подобные ошибки в curl не существовали бы, если бы инструмент был написан на более безопасном языке программирования с большим объёмом памяти, а не на устаревшем языке C. Однако переход на другой язык пока не планируется. Это связано с возможными трудностями и ограниченными ресурсами разработчика. Стенберг подчеркнул, что в обозримом будущем разработка curl продолжится на языке C.
«Все, кому это не нравится, могут засучить рукава и самостоятельно приступить к разработке», — добавил Стенберг.
Гравитация научных фактов сильнее, чем вы думаете