Rsync 3.5

1000px.jpg

13 августа состоялся выпуск rsync 3.5.0, свободной утилиты для синхронизации и передачи файлов, широко применяемой для резервного копирования, создания зеркал и переноса данных между системами. Основное внимание в новой версии уделено безопасности: разработчики устранили 33 проблемы, обнаруженные в ходе целевого аудита обработки путей, фаззинга сетевого протокола rsync daemon и анализа сообщений внешних исследователей.

Среди наиболее важных изменений rsync 3.5.0:

  • Исправлена критическая CVE-2026–53791 в PROXY Protocol. Сервер с параметром proxy protocol = true мог принимать предоставленный клиентом исходный IP-адрес даже при непосредственном подключении в обход доверенного прокси. Это позволяло обходить правила hosts allow и hosts deny, основанные на IP. Теперь адрес из PROXY Protocol принимается только от явно настроенных доверенных прокси, а конфигурация без списка proxy protocol hosts работает по принципу запрета доступа.

  • Закрыта возможность чтения произвольных файлов через символические ссылки (CVE-2026–53802). Проблема могла проявляться при обработке --filter, --files-from, --include-from, --exclude-from, файлов паролей и секретов демона. Проверка компонентов пути теперь выполняется через openat() с O_NOFOLLOW и дополнительной проверкой владельца.

  • Устранена возможность перенаправления записи через подмену пути (CVE-2026–53803). Уязвимость затрагивала --log-file, batch-файлы и ряд конфигурационных файлов. В качестве одного из потенциальных последствий разработчики приводят возможность добавления данных в authorized_keys.

  • Усилена ограниченная SSH-обёртка rrsync (CVE-2026–53783). Исправлена TOCTOU-гонка между проверкой пути через realpath() и его последующим использованием. В Linux проверенный объект теперь может закрепляться через /proc/self/fd. Для ограниченного режима также запрещён ряд потенциально опасных параметров.

  • Исправлены несколько ошибок нарушения границ памяти. CVE-2026–70461 приводила к однобайтовой записи за пределами heap-буфера при обработке специально сформированных фильтров, CVE-2026–70458 — к выходу за пределы выделенной памяти при работе с некорректной hardlink-записью, а CVE-2026–70456 — к записи завершающего NULL за пределы массива аргументов.

  • Закрыты сетевые способы вызвать отказ в обслуживании. CVE-2026–70464 позволяла клиенту пройти первоначальное приветствие rsync daemon и затем неопределённо долго удерживать соединение, занимая в том числе доступные слоты max connections. Для начальной стадии протокола введён отдельный тайм-аут.

  • Ограничено число потоков Zstandard. Через CVE-2026–70455 клиент мог передать чрезмерное значение --compress-threads и заставить сервер создать сотни потоков на одно соединение. При тестировании значение 256 приводило к созданию 257 потоков. Для rsync daemon теперь установлен предел в восемь потоков.

  • Исправлена DoS-проблема в алгоритме поиска контрольных сумм (CVE-2026–70453). Специально подобранная последовательность блоков с одинаковыми слабыми контрольными суммами могла привести к квадратичному росту нагрузки CPU в hash_search(). Изначально проблема была зарегистрирована ещё в 2021 году как ошибка производительности.

  • Изменена обработка ошибок DNS в hosts deny (CVE-2026–70452). Если имя запрещённого хоста не удавалось разрешить, правило могло фактически работать в режиме fail-open. Теперь при ошибках разрешения имени используется безопасное поведение с запретом доступа.

  • Усилена проверка TLS в rsync-ssl (CVE-2026–70454). При использовании stunnel ранее не всегда обеспечивалась обязательная проверка центра сертификации и соответствия сертификата имени сервера, что позволяло провести атаку «человек посередине». В rsync 3.5 эти проверки включены по умолчанию.

  • Ужесточена работа с символическими ссылками каталогов назначения. Теперь rsync по умолчанию следует такой ссылке только в том случае, если она принадлежит root или пользователю, запустившему процесс. Старое менее безопасное поведение можно вернуть параметром --insecure-links.

  • Добавлены дополнительные ограничения входных данных. Ограничены размеры HTTP CONNECT-запросов и ответов прокси, объём расширения xattr и потенциально опасные значения некоторых параметров сетевого протокола.

  • Добавлены проверки целочисленных переполнений при расчёте размеров хеш-таблиц, списков файлов и других внутренних структур данных.

  • Переработан обработчик SIGUSR2, чтобы вызываемые из обработчика сигнала операции были async-signal-safe.

  • Исправлено чтение памяти за границей буфера в AVX2-коде. Оптимизированная реализация скользящей контрольной суммы могла читать до 64 байт после окончания входного буфера.

  • Исправлена работа --link-dest на файловых системах, которые не поддерживают создание hardlink для некоторых типов объектов.

  • Исправлена обработка %% в параметрах --out-format и --log-file-format.

  • Исправлена работа --chmod=a+s и ряд других менее заметных ошибок командной строки и обработки файлов.

Для каждой из 33 исправленных проблем разработчики подготовили регрессионный тест, который воспроизводит дефект на старом коде и проверяет его отсутствие после исправления.

Значительная часть изменений появилась в результате аудита безопасности. В работе участвовали исследователи Trail of Bits в рамках программы Patch the Planet, Грег Кроа-Хартман и другие специалисты. Сопровождающий rsync Эндрю Триджелл также отметил вклад новых участников команды проекта, занимавшихся разбором отчётов, подготовкой исправлений и тестов.

rsync распространяется под лицензией GPLv3 и используется как самостоятельная программа, так и в составе многочисленных систем резервного копирования и зеркалирования. Исходный код и готовые архивы rsync 3.5.0 опубликованы на GitHub.

>>> Источник

©  Linux.org.ru