В популярной утилите для синхронизации файлов rsync выявлено сразу шесть уязвимостей. Самая опасная из них (CVE-2026-29518, оценка 7,3 по CVSS v4.0) связана с состоянием гонки при обработке символических ссылок. Она позволяет локальному атакующему повысить свои привилегии, если демон rsync запущен без изоляции chroot (механизм ограничения файловой системы для процесса). Разработчики выпустили исправление в версии 3.4.3, которая устраняет все шесть проблем.
Детали уязвимостей
Rsync - это утилита для синхронизации файлов и каталогов как локально, так и по сети. Её используют системные администраторы, DevOps-инженеры и обычные пользователи для резервного копирования и зеркалирования данных. Уязвимости затрагивают все версии до 3.4.2 включительно. Эксплуатация части проблем возможна только при особых настройках демона, но некоторые риски, например, целочисленное переполнение, актуальны даже при стандартной конфигурации.
Начнём с главной угрозы. Уязвимость CVE-2026-29518 относится к классу TOCTOU (time-of-check time-of-use - "время проверки не совпадает со временем использования"). В режиме демона с отключённым chroot (параметр "use chroot = no") между проверкой родительского пути и операцией открытия файла злоумышленник может заменить каталог на символическую ссылку. В результате демон читает или записывает данные за пределами назначенного модуля. Атакующий получает доступ к произвольным файлам системы, в том числе к конфиденциальным. Исправление включает механизм "secure_relative_open()", который ранее не применялся для демона без chroot.
CVE-2026-43617 (CVSS 4,8). Она затрагивает проверку подлинности по имени хоста и ACL (спискам контроля доступа). Если в конфигурационном файле rsyncd.conf указан "daemon chroot = /X", а в каталоге /X нет библиотек для разрешения DNS (файлов "/etc/resolv.conf", "/etc/nsswitch.conf" и так далее), то обратный DNS-запрос выполняется уже внутри chroot. При неудаче имя подключающегося клиента становится "UNKNOWN". Из-за этого правила, основанные на имени хоста, перестают работать - они молча пропускают нежелательных гостей. IP-фильтрация не страдает. Разработчики перенесли DNS-запрос до входа в chroot.
CVE-2026-43618 (CVSS 8,1, высокий уровень) - целочисленное переполнение в декодере сжатых токенов. Получатель накапливает 32-битный счётчик без проверки переполнения. Вредоносный отправитель может спровоцировать переполнение и получить содержимое памяти процесса: переменные окружения, пароли, адреса кучи и библиотек. Это существенно ослабляет рандомизацию адресного пространства (ASLR). Исправление ограничивает счётчик и добавляет валидацию входящих данных. Временная мера для старых версий - отключить опцию "compress" в rsyncd.conf.
CVE-2026-43619 (CVSS 6,3) - развитие первой уязвимости. Аудит показал, что исправления для состояния гонки на операции открытия файла не были применены к другим системным вызовам: "chmod", "lchown", "utimes", "rename", "unlink", "mkdir", "symlink", "mknod", "link", "rmdir" и "lstat". Все эти вызовы теперь направляются через родительский файловый дескриптор, открытый с ограничениями ядра (на Linux 5.6+ используется "openat2", на FreeBSD 13+ и macOS 15+ - "O_RESOLVE_BENEATH"). По умолчанию "use chroot = yes" не подвержено риску.
CVE-2026-43620 (CVSS 6,5) - чтение за границами буфера в функции "recv_files()", что приводит к отказу в обслуживании любого клиента, подключившегося к вредоносному серверу. Неполное исправление предыдущей проблемы не затронуло аналогичный блок в "recv_files()". Сервер может отправить специально сформированный список файлов и запись передачи, вызывая сигнал SIGSEGV у клиента. Так как режим "inc_recurse" включён по умолчанию для протокола 30+, атака не требует от жертвы особых опций. Временное решение - запускать клиент с флагом "--no-inc-recursive".
CVE-2026-45232 (CVSS 3,1, низкий уровень) - выход за границы стека на единицу в обработчике HTTP-прокси CONNECT. Когда rsync использует переменную окружения "RSYNC_PROXY" для туннелирования через HTTP-прокси, он считывает ответную строку в буфер размером 1024 байта. Если прокси (или атакующий "человек посередине") возвращает 1023 или более байт без символа новой строки, код записывает нулевой байт на один байт за пределами буфера. Атакующий не может управлять позицией записи, поэтому практическое влияние ограничено возможной нестабильностью или крахом клиента. Исправление явно проверяет заполнение буфера без нахождения перевода строки.
Последствия этих уязвимостей варьируются от локального повышения привилегий до удалённой утечки памяти и отказа в обслуживании. Наиболее серьёзная угроза - для организаций, использующих rsync в режиме демона без chroot. В таком случае атакующий с доступом к одному из синхронизируемых каталогов может прочитать служебные файлы, перезаписать критичные системные данные и перемещаться по системе горизонтально. Утечка памяти через целочисленное переполнение компрометирует секреты, хранящиеся в окружении процессов.
Специалистам по информационной безопасности следует немедленно обновить rsync до версии 3.4.3. Тем, кто не может обновиться прямо сейчас, стоит проверить настройки демона: по возможности включить "use chroot = yes" и отключить опцию "compress" в rsyncd.conf. Для защиты от CVE-2026-43620 на клиентах можно временно добавить флаг "--no-inc-recursive", но это снизит производительность. Также рекомендуется контролировать использование переменной "RSYNC_PROXY" и не допускать подключений к недоверенным прокси-серверам.
В целом эти уязвимости напоминают, что даже зрелые и проверенные утилиты могут содержать недочёты, способные привести к серьёзным последствиям. Своевременное обновление и грамотная конфигурация остаются главной линией обороны.
Ссылки