The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В GNU Wget2 2.2.1 устранена уязвимость, допускающая перезапись произвольных файлов

05.01.2026 12:11

Доступен выпуск проекта GNU Wget2 2.2.1, развивающего переписанный с нуля и полностью переработанный вариант программы для автоматизации рекурсивной загрузки контента GNU Wget. Wget2 предоставляет набор дополнительных опций, поддерживает загрузку в несколько потоков, позволяет использовать доступную функциональность через библиотеку libwget, поддерживает протоколы HTTP/2 и TLS 1.3, даёт возможность загружать только изменившиеся данные, может сохранять данные с серверов потокового вещания, корректно обрабатывает интернационализированные доменные имена и может перекодировать загружаемое содержимое. Утилита wget2 поставляется под лицензией GPLv3+, а библиотека под LGPLv3+.

В новой версии устранены две уязвимости:

  • CVE-2025-69194 - отсутствие должной проверки файловых путей при обработке контента в формате Metalink, применяемом для описания ссылок на файлы для загрузки. Используя последовательность "../" в файловых путях внутри блока <file name="…">, атакующий может добиться создания, очистки или перезаписи произвольных файлов за пределами базового каталога, в который производится загрузка. Например, атакующий может перезаписать содержимое ~/.ssh/authorized_keys или ~/.bashrc и добиться выполнения своего кода в системе.
  • CVE-2025-69195 - переполнение буфера в коде чистки имён файлов в функции get_local_filename_real(), потенциально способное привести к исполнению кода при обработке специально оформленных URL на загружаемых страницах или при обработке редиректов. Проблема проявляется при включении опции "--restrict-file-names=windows|unix|ascii" и вызвана выделением фиксированного 1024-байтового буфера без проверки фактического размера записываемых данных.

Из не связанных с безопасностью изменений можно отметить добавление опции "--show-progress" для индикации прогресса загрузки, использование локального времени при указании опции "--no-use-server-timestamps", поддержку префикса 'no_' в параметрах конфигурации и задействование libnghttp2 для тестирования HTTP/2.

  1. Главная ссылка к новости (https://www.mail-archive.com/i...)
  2. OpenNews: Выпуск утилиты для загрузки web-контента GNU Wget2 2.2.0
  3. OpenNews: Доступны утилиты wget 1.25 и Curl 8.11. Представлены платные LTS-выпуски Curl
  4. OpenNews: Первый стабильный релиз утилиты для загрузки web-контента GNU Wget2
  5. OpenNews: Выпуск GNU Wget 1.21
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64561-wget
Ключевые слова: wget
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (69) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 12:19, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > отсутствие должной проверки файловых путей

    Никогда такого не было и вот опять

     
     
  • 2.14, Аноним (14), 12:56, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +8 +/
    > Wget2 ... переписанный с нуля и полностью переработанный вариант ... уязвимость, допускающая перезапись произвольных файлов.

    Получается, в исходном непереписанном вгете этого не было, а после переписывания - появилось?!

     
  • 2.48, Аноним (48), 17:24, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ребят, когда качаешь через Wget/Wget2 (с обычного https-сайта), провайдер не видит что скачиваешь?
     
     
  • 3.75, bergentroll (ok), 11:32, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    URL видит, содержимое не видит. От скачивания броузером особо не отличается.
     
     
  • 4.77, Аноним (77), 13:20, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    а чем url внутни http, отличается от содержимого? парочкой символов перевода строки..а, если https?

    > От скачивания броузером особо не отличается.

    в любом браузере есть опция экспорта запроса в curl/wget и тд, такой запрос вообще с точность до байта эквивалентен

     
     
  • 5.78, bergentroll (ok), 15:15, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > а чем url внутни http, отличается от содержимого?

    Вы правы, URL тоже зашифрован. Снаружи только сокет, на который идёт запрос.

     
  • 2.72, Аноним (-), 02:49, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Никогда такого не было и вот опять

    Нестареющая классика жанра :)

     

  • 1.2, Аноним (2), 12:20, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Этих вгетов развелось еще... Подскажите, какой самый трушный и в чем разница?
     
     
  • 2.17, Аноним (14), 13:02, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ни тот, ни другой на паскале не написан.

    > без проверки фактического размера записываемых данных

    В паскале есть ключ компиляции array range check: в зависимости от ситуации делает проверку во время компиляции или при выполнении программы. В си - есть что-то подобное? Если есть, почему программисты об этом не знают? Если нету (а паскаль так-то постарше си будет) - почему никто из программистов не догадался добавить опцию в компилятор?

     
     
  • 3.22, Аноним (-), 13:20, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > В си - есть что-то подобное?

    Пф... ну у тебя и требования!

    > Если есть, почему программисты об этом не знают?

    Типикал Сишник даже стандарт не читал)

    >  Если нету (а паскаль так-то постарше си будет) - почему никто из программистов не догадался добавить опцию в компилятор?

    Ты еще спроси когда СИшники осилили добавить boolean в язык))
    Подсказка в С23.
    Всего 50 лет ушло на то, что уже было в ALGOL 60.

    Думаю еще через лет 20 они добавят data type String чтобы перестать каждый раз бегать в поискать null-terminator, терять его и получать очередную CVE.

     
     
  • 4.29, 12yoexpert (ok), 14:26, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Ты еще спроси когда СИшники осилили добавить boolean в язык))
    > Подсказка в С23.

    вся суть маркетинга растосекты. сходил бы ты в гугл что ли

    тебя ещё в проекте не было, когда в си добавили бул. просто на твоих сельских курсах вайтишников ни один инфоцыган об этом не знает

     
     
  • 5.30, Аноним (30), 14:39, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > тебя ещё в проекте не было, когда в си добавили бул.

    Если ты про stdbool.h то типиКАЛ костыли для недоязычка
    #define true 1
    #define false 0

    dii.uchile.cl/~daespino/files/Iso_C_1999_definition.pdf
    7.16 Boolean type and values <stdbool.h>

    Особенно пocoсным выглядит пункт 4
    Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then
    redefine the macros bool, true, and false.
    Но для недоязыков это нормально.

    А вот тебе стандарт С23, надеюсь ты умеешь читать на английском.
    open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf
    6.4.4.6 Predefined constants
    predefined-constant:
    false
    true

     
     
  • 6.43, Аноним (14), 16:49, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > костыли для недоязычка

    Помнится, они долго не могли сообразить, что такое nil, меняя определение несколько раз. Потом приняли, что это "тождественно равно числовому нулю".

     
     
  • 7.44, Аноним (14), 16:51, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    P.S. макрос NULL имеется ввиду.
     
  • 7.46, Аноним (46), 17:04, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А определение нуля они определили The macros are NULL which expands to an imp... большой текст свёрнут, показать
     
     
  • 8.53, Аноним (14), 18:22, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Продолжаем хохму Dereferencing a null pointer is undefined behavior in C - вр... текст свёрнут, показать
     
     
  • 9.55, Аноним (-), 19:17, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    С одной стороны типа да, но с другой у вас с 99 стандарта оно было implement... текст свёрнут, показать
     
  • 9.57, Аноним (-), 19:36, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А если у нас ARM У нас же СИшечка портабельная Чего адепты постоянно жужжат ч... текст свёрнут, показать
     
     
  • 10.67, Аноним (14), 21:41, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    На каким именно На младших M0-ках по этим адресам может быть отображено ОЗУ Та... текст свёрнут, показать
     
  • 5.32, Аноним (32), 14:55, 05/01/2026 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 4.39, Совершенно другой аноним (?), 16:33, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    тип boolean, конечно, не осилили добавить, а тип _Bool вообще-то с C99.
     
     
  • 5.42, Аноним (-), 16:48, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > тип boolean, конечно, не осилили добавить, а тип _Bool вообще-то с C99.

    Да, я ж написал про stdbool.h

    Особенно класно в "стандарте" прописан размер типа.
    An object declared as type _Bool is large enough to store the values 0 and 1.
    Вот прямым тестом "а фиг его знает, главное чтобы 0-1 влез".

    Ну и сверху это щедро обмазывается  ̶г̶о̶в̶н̶ макросами и дефайнами.
    Но! В стандарте сказано, что если, не дай бог-машина, у вас где-то undef, то ваша программа превращается в тыкву.

    Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then
    redefine the macros bool, true, and false.2

     
     
  • 6.45, Аноним (14), 16:55, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Bool is large enough to store the values 0 and 1

    Особенно классно, когда делают параметр Bool в многопараметрической функции из какой-нибудь библиотеки, а ты сидишь и гадаешь, а каким размером скомпилирован тот параметр, чтобы не промахнуться при обращении в список параметров?

     
     
  • 7.47, Аноним (-), 17:17, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > сидишь и гадаешь

    Зато не на паскале! (с)

    Вооще читая что стандарт, что код удивляешься как оно вообще может работать.
    И вспоминаешь байку про "программистов, дятла и конец цивилизации"))

     
  • 6.51, Совершенно другой аноним (?), 17:50, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> тип boolean, конечно, не осилили добавить, а тип _Bool вообще-то с C99.
    > Да, я ж написал про stdbool.h

    Ну, тогда при чём тут С23. В нём только, если правильно помню, решили, что путь уже будет bool штатным ключевым словом, а не переопределяться через #define на _Bool.

     
     
  • 7.52, Аноним (52), 17:57, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В том что в C23 они смогли наконец то формализовать это самый бул.

    Но он отличается от старого
    The type bool shall have one value bit and (sizeof(bool)*CHAR_BIT)- 1

    А теперь сравни это со старым
    An object declared as type _Bool is large enough to store the values 0 and 1.

     
     
  • 8.54, Совершенно другой аноним (?), 18:32, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/
    C99 6 2 5 Types 2 An object declared as type _Bool is large enough to store ... текст свёрнут, показать
     
  • 4.69, Аноним (69), 22:34, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Ты еще спроси когда СИшники осилили добавить boolean в язык))
    > Подсказка в С23.

    А ты, бедненький, не знал, что сишка прекрасно обходилась (и обходится) 0 и 1?
    > Всего 50 лет ушло на то, что уже было в ALGOL 60.

    И? Ты уверен, что под капотом там будет не те же самые 0 и 1?

     
  • 3.25, Аноним (2), 13:41, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >на паскале не написан

    Меня вообще не это интересовало. Есть два каких-то wget. Зачем? Какой из них лучше и где глянуть сравнение?

     
     
  • 4.26, Аноним (26), 14:01, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Оба хуже.

    https://curl.se/wcurl/manual.html

     
     
  • 5.31, Аноним (-), 14:49, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Такой же дырявый хлам
    curl.se/docs/CVE-2023-38545.html
     
  • 4.41, Аноним (41), 16:44, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Лучше всех aria2
    https://github.com/aria2/aria2
    https://aria2.github.io/
     
     
  • 5.70, хата (?), 00:24, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Без поддержки socks даже через tsocks оно не нужно, в эпоху повсеместных квнвпнвлес у каждой второй бабушки.
     
  • 3.60, Аноним (60), 20:32, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что в си нет массивов, в нем есть указатели.

    a[i] это просто синтаксический сахар для *(a + i)

     
     
  • 4.62, Аноним (62), 20:41, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не совсем правда. Тип массива есть, но он существует только когда ты определяешь тип автоматической или статической переменной.А вот адресация внутри этого массива - да, синтаксический сахар, потому что массив всегда деградирует в указатель на первый элемент.
     
     
  • 5.68, Аноним (68), 21:43, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > потому что массив всегда деградирует в указатель на первый элемент.

    А потом чтобы узнать "а сколько у нас элементов" приходится бегать каждый раз до конца массива.
    Или лепить сбоку и хранить отдельно.


     
     
  • 6.71, Аноним (69), 01:25, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > чтобы узнать "а сколько у нас элементов" приходится бегать каждый раз до конца массива.

    То есть,  с Си ты знаком очень поверхностно.

     
     
  • 7.79, Аноним (-), 16:40, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> чтобы узнать "а сколько у нас элементов" приходится бегать каждый раз до конца массива.
    > То есть,  с Си ты знаком очень поверхностно.

    Ну скажи мне сколько символов в unicode строке.
    И как их быстро посчитать.
    Строки в СИ это же массивы, да?))


     
     
  • 8.80, Совершенно другой аноним (?), 18:43, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    вообще, как-бы, unicode бывают разные Если смотреть UTF-8, то там надо пройти в... текст свёрнут, показать
     
  • 6.81, Аноним (81), 23:08, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Э, ну вот у меня указатель на первый элемент struct {}. Как мне узнать, сколько их там? Очевидно, никак. Размер должен передаваться как то. Или обычно считать, что элемент один.
     
  • 5.73, Аноним (60), 09:31, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    это просто такой helper для выделения фиксированного непрерывного объема памяти на стеке (или глобальной преаллокации при старте программы). в итоге все равно имеем указатель
     
  • 2.74, Аноним (74), 11:09, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    1-й GNU Wget и busybox wget лучше.
     
  • 2.76, aname (ok), 12:26, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Aria2
     

  • 1.3, Аноним (3), 12:29, 05/01/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +3 +/
     

  • 1.4, Аноним (-), 12:29, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    GNU всегда было знаком какчества!
    Буквально вчера была новость про GnuPG, которая позволяет обойти верификацию и выполнить свой код.
    И вот теперь про GNU Wget...
     
     
  • 2.33, Аноним (33), 14:58, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Это GNU Wget2. Он хостится в каком-то болоте, не имеющем отношения к GNU.
     

  • 1.9, Фнон (-), 12:44, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Звучит круто Фикс просто обалденный char fname_esc sizeof tmp buf len... большой текст свёрнут, показать
     
     
  • 2.12, онанист (?), 12:53, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    это ж опен сурсе
    для тестирования , да и исправления,есть юзеры
    тысячи глаз (тм)
     
     
  • 3.16, Аноним (-), 12:58, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Зато можно с гордостью за свой код писать:
    Around 2014, I began contributing to open-source projects and became (co-)maintainer of GNU Wget, GnuTLS, and GNU libidn. Two of my own projects, Wget2 and libpsl, are now packaged in almost every Linux distribution.

     
  • 2.18, Аноним (18), 13:05, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Тут явно же видно, что не в перестановке дело а в условии.

    Наиболее вероятно при просмотре условие инвертировал для читабельности, а выражения местами забыл поменять. Как вариант - отвлекли.

     
     
  • 3.21, Аноним (-), 13:11, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Наиболее вероятно при просмотре условие инвертировал для читабельности,
    > а выражения местами забыл поменять.

    Никто ничего не менял, код зашел одним коммитом.
    gitlab.com/gnuwget/wget2/-/commit/3dc30f5f0c6f8feae97f866c537324f821ea05d6

    Просто кто-то не умеет в память :)

    > Как вариант - отвлекли.

    Рептилоиды с Нибиру?)

     
     
  • 4.59, Аноним (18), 19:40, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Никто ничего не менял, код зашел одним коммитом.

    Ты явно с Нибиру.

    Как то что ты говорил опровергает то, что писал я?

    У тебя нибирушная логика.

     
  • 2.37, Аноним (37), 16:02, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Автор и первого б̶е̶к̶д̶о̶р̶а̶ бага и его исправления Tim Rühsen.

    Немцы те еще бекдорщики :)

     

  • 1.13, Аноним (-), 12:54, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > переполнение буфера потенциально способное привести к
    > исполнению кода

    Никогда такого не было и вот опять!

    > при обработке специально оформленных URL на загружаемых страницах

    А можно дропать юзверю хомяка?
    Офгенное решение чтобы всякие хитрецы не выкачивали сайт wget'ом.

     
     
  • 2.19, Аноним (14), 13:08, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Например, атакующий может перезаписать содержимое ... ~/.bashrc и добиться выполнения своего кода в системе

    а в bashrc пишем известную команду по зачиствке хомяка...

     
  • 2.82, Аноним (81), 23:24, 06/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >    Офгенное решение чтобы всякие хитрецы не выкачивали сайт wget'ом.

    Удивительная жадность.

     

  • 1.20, Аноним (20), 13:09, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А мне кажется, сишники специально делают CVE в своих опусах, ради чёрного пиара своих продуктов. Это же тоже пиар. Больше CVE - больше людей узнают о твоём GNU творении из новостей! Вот так вот!
     
  • 1.23, Аноним (23), 13:29, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Зачем было переписывать? Юзаю 1.25 и никаких проблем.
     
     
  • 2.24, Аноним (-), 13:39, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ты реально думаешь, что wget 1 был менее дыряв У меня для тебя плохие новости ... большой текст свёрнут, показать
     
     
  • 3.63, Аноним (62), 20:52, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Эээ, а чё ему такие высокие очки накидали? Это юзерспейнсая программа, не требующая особых привилегий, а скор такой, будто баг в ядре нашли или в openssl.
     

  • 1.35, Аноним (35), 15:42, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прямо-таки парад найденных в СПО уязвимостей. Косвенно это говорит о том, что ведется серьезная работа по уменьшению его дырявости, под будущую кибервойну. Можно на уровне сервисов внедрить _более безопасный_ раст, но  остаться с дыркой в какой-нибудь крон джобе, использующей вгет.
     
     
  • 2.50, Fyji (-), 17:39, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Прямо-таки парад найденных в СПО уязвимостей.

    Системы автоматического поиска проблем просто стали намного круче.
    Стали доступны не только спецам.
    И внезапно оказалось что диды код писать не умели.

     
     
  • 3.56, Аноним (35), 19:27, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Системы эффективно применить тоже нужны спецы. В конечном счете все сводится к наличию ресурсов на все это.

    > внезапно оказалось что диды код писать не умели

    Спойлерну: отцы, дети и внуки тоже не умеют. Точнее умеют, но не будут. То есть будут, но при финансировании которого не будет, поэтому не будут ))

     
  • 3.66, Аноним (14), 21:29, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > диды код писать не умели

    Или наоборот - умели? Как история с пейджерами.

     

  • 1.49, Аноним (49), 17:33, 05/01/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +3 +/
     
  • 1.64, kusb (?), 21:00, 05/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Блин, эти уязвимости удивительно похожи, такое ощущение, что с ними можно справиться централизованно.
     
     
  • 2.65, Аноним (14), 21:28, 05/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > с ними можно справиться централизованно

    Можно. Но почему-то не нужно.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру