Представлен релиз GNU Wget 1.25, программы для автоматизации загрузки файлов с использованием протоколов HTTP/HTTPS и FTP/FTPS. Утилита поддерживает такие возможности, как возобновление прерванных загрузок, зеркалирование сайтов с фильтрацией загружаемых данных по маскам, преобразование ссылок внутри документов, выставление Cookie и обновление только изменившихся файлов. Код проекта написан на языке Си и распространяется под лицензией GPLv3.
В новой версии:
- Переписан разбор части URL с информацией об имени пользователя (protocol://userinfo@host:port/path). Ранее wget при разборе userinfo неверно обрабатывал символ “;”, что приводило к уязвимости (CVE-2024-38428) из-за того, что часть данных userinfo могла быть обработана как имя хоста. Например, имя пользователя “attackerhost;” в URL “ftp://attackerhost;@host” приводило к обращению к хосту “attackerhost”, вместо “host”.
- Прекращена поддержка сокращённого формата URL-ссылок на HTTP- и FTP-ресурсы (без явного указания протокола, например, “wget username:password@myserver”), который ранее был объявлен устаревшим и приводил к уязвимости CVE-2024-10524. Сведения об уязвимости пока не раскрываются, но судя по всему она является одним из вариантов вышеотмеченной проблемы CVE-2024-38428.
- Чтения из файлов и стандартного потока (stdin) переведено на использование неблокирующего режима. Изменение позволяет постепенно передавать через входной поток ссылки, используя команду “print_urls | wget -i-“. Ранее wget читал имеющиеся данные и сразу закрывал файловый дескриптор.
Кроме того, можно отметить выпуск утилиты для получения и отправки данных по сети – curl 8.11.0, предоставляющей возможность гибкого формирования запроса с заданием таких параметров, как cookie, user_agent, referer и любых других заголовков. cURL поддерживает HTTP, HTTPS, HTTP/2.0, HTTP/3, SMTP, IMAP, POP3, SSH, Telnet, FTP, LDAP, RTSP, RTMP и другие сетевые протоколы. Код проекта распространяется под лицензией Curl (вариант лицензии MIT).
Среди изменений в curl 8.11:
- Устранена уязвимость (CVE-2024-9681), приводящая к возможности обратиться к ресурсу по протоколу http://, несмотря на наличие правил HSTS (HTTP Strict Transport Security), предписывающих использование только HTTPS.
Проблема проявляется при наличии контроля над поддоменами атакуемого хоста. Например, при запросе хоста x.example.com атакущий может через манипуляции с HTTP-заголовком “Strict-Transport-Security:” повлиять на данные в кэше HSTS для домена example.com. - Объявлена стабильной поддержка протокола WebSocket.
- Предоставлена возможность использования режима “–create-dirs” вместе с опцией “–dump-header”.
- В криптобэкенд на базе GnuTLS добавлена поддержка сертификатов в формате P12.
- При использовании GnuTLS реализована поддержка механизма Early Data, позволяющего клиенту отправлять данные до завершения стадии согласования соединения TLSv1.3.
- Добавлена настройка для отключения протокола IPFS.
- Для GnuTLS и wolfSSL добавлена поддержка кэширования сеансов на базе протокола QUIC.
- Добавлена поддержка динамического включения поддержки TLS-расширения ECH (Encrypted Client Hello), предназначенного для шифрования информации о параметрах TLS-сеансов, таких как запрошенное доменное имя.
- Добавлена возможность совместного использования опций “–show-headers” и “–remote-header-name”, а также использования опции “–skip-existing” вместе с “–parallel”.
Дэниел Cтенберг (Daniel Stenberg), автор проекта curl, представил инициативу по поддержанию LTS-выпусков (Rock-solid), обновления с исправлением серьёзных ошибок и уязвимостей для которых будут публиковаться как минимум в течение 5 лет. Первым LTS-проектом объявлена ветка 8.9.x, для которой уже сформирован корректирующий релиз 8.9.2 с устранением двух уязвимостей. Доступ к LTS-обновлениям предоставляется только клиентам, заключившим договор о поддержке.
Код LTS-выпусков продолжает распространяться под прежней лицензией Curl (вариант MIT), но по отдельному запросу предусмотрена возможность поставки под отдельной коммерческой лицензией. Полученные средства будут потрачены на поддержание проекта и финансирование разработчиков. Новые LTS-ветки планируют формировать каждые 8-24 месяцев. Использование LTS-ветки позволит получить стабильную базу, избавленную от вероятности возникновения регрессивных изменений.