Уязвимости безопасности в Rust-библиотеке SSH 'russh' подвергают системы риску исчерпания ресурсов
Две уязвимости, затрагивающие версии библиотеки Eugeny russh вплоть до 0.64.x, позволяют проводить атаки типа «исчерпание ресурсов» через процедуры передачи по каналам и серверной части агента.
The Global Wire Newsroom ·
Link preview · horizonglobalnews.com
Уязвимости безопасности в Rust-библиотеке SSH 'russh' подвергают системы риску исчерпания ресурсов
Две уязвимости, затрагивающие версии библиотеки Eugeny russh вплоть до 0.64.x, позволяют проводить атаки типа «исчерпание ресурсов» через процедуры передачи по каналам и серверной части агента.
Эта статья переведена автоматически нашим редакционным ИИ с английского оригинала. Читать на английском
В реализации протокола Secure Shell с открытым исходным кодом на языке Rust, известной как Eugeny russh, были выявлены две уязвимости безопасности, затрагивающие все версии программного обеспечения вплоть до линейки релизов 0.64.x. Согласно отчетам о раскрытии, опубликованным базой данных уязвимостей VulDB 27 октября 2026 года, обе проблемы создают условия для чрезмерного потребления ресурсов, что может привести к ухудшению работы или нарушению функционирования служб хоста. Первая проблема, отслеживаемая как CVE-2026-116774, находится в процедурах парсинга каналов библиотеки при опросе готовности к передаче. Вторая уязвимость, зарегистрированная как CVE-2026-116696, затрагивает внутренний модуль сервера агента аутентификации. Обе записи были официально классифицированы VulDB как проблемные дефекты, связанные с потреблением ресурсов.
## Key facts
- Записи отслеживания безопасности CVE-2026-116774 и CVE-2026-116696 были каталогизированы 27 октября 2026 года, задокументировав бреши во всех релизах Eugeny russh вплоть до версии 0.64.x. - CVE-2026-116774 затрагивает функцию ChannelTx::poll_writable в файле russh/src/channels/io/tx.rs через манипулирование параметром maximum_packet_size. - CVE-2026-116696 затрагивает подсистему аутентификации, расположенную в russh/src/keys/agent/server.rs, внутри функции russh::keys::agent::server::serve. - Обе уязвимости классифицированы как проблемные ошибки потребления ресурсов, вызывающие неконтролируемое исчерпание системных активов. - Затронутое ПО представляет собой базовую реализацию протокола SSH-2 на чистом Rust, используемую для построения клиентской и серверной инфраструктуры.
## What happened
Согласно бюллетеням безопасности, опубликованным VulDB, аналитики по безопасности зарегистрировали две отдельные записи об уязвимостях в кодовой базе Eugeny russh 27 октября 2026 года. В уведомлениях описываются бреши, которые имеют общую классификацию воздействия — потребление ресурсов — при этом возникая на совершенно разных функциональных уровнях библиотеки протокола.
Первый бюллетень, определяющий CVE-2026-116774, выделяет уязвимость в компоненте парсинга открытия каналов (Channel Open Parsing) библиотеки. В частности, дефект расположен в исходном файле russh/src/channels/io/tx.rs внутри функции ChannelTx::poll_writable. Согласно VulDB, злоумышленник может манипулировать аргументом maximum_packet_size во время операций управления каналами. Это вмешательство нарушает ожидаемое планирование передачи данных и приводит к чрезмерному потреблению ресурсов, потенциально вызывая зависание или перегрузку вызывающего процесса.
Второй бюллетень, посвященный CVE-2026-116696, рассматривает уязвимость в компоненте обработки агента аутентификации библиотеки. Уязвимый код находится в файле russh/src/keys/agent/server.rs на пути выполнения serve, обозначенном как russh::keys::agent::server::serve. VulDB сообщает, что целенаправленное манипулирование этой серверной процедурой приводит к аномальному потреблению ресурсов, аналогичным образом перегружая вычислительную инфраструктуру или память без необходимости полного преодоления криптографических барьеров.
В обоих отчетах затронутый диапазон определен как версии программного обеспечения вплоть до серии 0.64.x включительно. Это означает, что текущие и ранее созданные производственные сборки, опирающиеся на данные ветки, наследуют описанное базовое структурное поведение.
## Why it matters
Протокол Secure Shell (SSH), стандартизированный преимущественно в рамках документа Internet Engineering Task Force (IETF) RFC 4251 и сопутствующих спецификаций, формирует основу администрирования современной облачной инфраструктуры, автоматизированного удаленного выполнения команд и безопасной оркестрации систем. Когда библиотека SSH сталкивается с ошибками исчерпания ресурсов, последствия напрямую угрожают доступности инфраструктурных сервисов.
В сетевых протоколах уязвимости потребления ресурсов обычно проявляются в виде условий отказа в обслуживании (DoS). Когда серверный или клиентский демон SSH обрабатывает сетевые фреймы, он вынужден выделять буферы памяти, управлять очередями передачи и поддерживать конечные автоматы для каждой активной сессии. В случае CVE-2026-116774, поскольку проблема связана с параметром maximum_packet_size в процедуре ChannelTx::poll_writable, существует потенциальная возможность для внешнего узла спровоцировать разбалансированные циклы буферизации или повторяющиеся циклы опроса. Если пир задает аномальные или искажающие границы размеры пакетов во время согласования канала, асинхронная логика передачи данных может тратить чрезмерное количество циклов ЦП на попытки согласовать запрошенные границы пакетов с доступным объемом окна, либо может выделять чрезмерные буферы кучи, истощая память хоста.
Аналогично, CVE-2026-116696 нацелена на механизм сервера агента. Протокол SSH-агента, обычно используемый для хранения закрытых ключей в памяти и обработки запросов на создание цифровой подписи через перенаправленные соединения, работает как доверенный локальный или перенаправленный демон. Уязвимость потребления ресурсов внутри цикла serve означает, что любой клиент или прокси-сервер пересылки, способный отправлять запросы интерфейсу агента, может вызвать исчерпание пула потоков, утечки памяти или неограниченные итерации цикла. Это приводит к потере отзывчивости агента, блокируя легитимные сеансы администрирования и останавливая конвейеры непрерывной интеграции (CI), зависящие от пересылки агента для получения учетных данных.
Поскольку Rust широко используется именно из-за гарантируемой безопасности работы с памятью и предсказуемости, разработчики часто предполагают, что крейты Rust по умолчанию защищены от низкоуровневых уязвимостей. Хотя Rust исключает повреждение пространственной памяти, такое как переполнение буфера и использование памяти после освобождения (use-after-free) в безопасном коде, он автоматически не устраняет атаки алгоритмической сложности, взаимоблокировки конечных автоматов или неконтролируемую обработку параметров, приводящие к отказу в обслуживании. Данные публикации подчеркивают, что логические дефекты парсинга остаются эксплуатационной угрозой для современного системного ПО.
## The background
Крейт russh возник как форк Thrussh — ранней реализации клиентского и серверного фреймворка SSH-2 на чистом Rust. Со временем под руководством мейнтейнера Eugeny Pankov, широко известного разработкой кроссплатформенного эмулятора терминала Tabby, библиотека выросла в одну из самых заметных нативных реализаций протокола SSH на Rust. Построенная поверх асинхронной среды выполнения Tokio, russh обеспечивает неблокирующие сетевые коммуникации на основе фьючерсов, предназначенные для работы в средах с высоким уровнем параллелизма без создания выделенных потоков операционной системы для каждого соединения.
В архитектуре SSH-2 взаимодействие организовано вокруг каналов. Множество логических каналов, таких как интерактивные оболочки, прямые туннели перенаправления TCP и каналы пересылки агента, мультиплексируются поверх единой аутентифицированной криптографической транспортной сессии. Согласно RFC 4254, каждая сторона канала регулирует входящие данные, объявляя максимальный размер пакета (maximum packet size) и начальный размер окна (initial window size). Размер окна определяет, сколько байтов удаленный отправитель может передать до ожидания корректировки, в то время как maximum_packet_size указывает наибольшую полезную нагрузку отдельных данных, допустимую в одном пакете.
Тракт передачи в таких асинхронных фреймворках, как Tokio, опирается на опрос готовности (readiness polling). Метод poll_writable проверяет, может ли базовый транспорт принять новые данные без блокировки потока среды выполнения. В russh/src/channels/io/tx.rs структура ChannelTx организует пакетирование исходящих данных. Если библиотека не обеспечивает строгих пределов корректности или математических проверок границ для maximum_packet_size, злоумышленник или некорректно работающий пир может спровоцировать граничные ситуации, когда среда выполнения постоянно фиксирует готовность, но не продвигается вперед, или, наоборот, разбивает данные на миллионы микропакетов, перегружая планировщик ЦП.
В области аутентификации протоколы SSH-агента берут начало от стандартной модели OpenSSH agent. Демоны прослушивают локальные сокеты домена Unix или перенаправленные потоки, принимая кадрированные полезные нагрузки в байтах, представляющие собой запросы на перечисление ключей или подписание вызовов проверки подлинности. Функция serve в russh/src/keys/agent/server.rs выступает в роли диспетчера событий для входящих фреймов протокола агента. Обработка недоверенных или враждебных потоков внутри этого цикла требует строгой валидации длины; без нее поврежденные заголовки сообщений могут спровоцировать неограниченное выделение памяти для чтения или бесконечные циклы, парализуя хост.
Исторически сетевые библиотеки на C, Go и Python сталкивались с аналогичными уязвимостями управления ресурсами. Хорошо известные инциденты в OpenSSH, такие как атаки исчерпания ресурсов на соединения до аутентификации и истощение состояний каналов, десятилетиями вынуждали разработчиков протоколов внедрять защитные лимиты, ограничители скорости и строгие проверки размеров, передаваемых клиентами.
## Reaction
Публичная реакция после публикации записей от 27 октября осталась в основном ограниченной техническими лентами уязвимостей и автоматическими сканерами пакетов, поскольку ни крупные облачные провайдеры, ни основные дистрибутивы операционных систем пока не выпустили экстренных бюллетеней реагирования. Первоначальные сведения поступили через автоматизированные каналы отслеживания VulDB.
Ожидается, что в более широкой экосистеме открытого исходного кода мейнтейнеры зависимого программного обеспечения, использующего крейт russh (включая специализированные шлюзы SSH, автоматизированные средства резервного копирования и терминальные приложения), будут отслеживать репозитории проекта на предмет исправлений. В рамках стандартных рабочих процессов устранения уязвимостей в open source мейнтейнеры изучают отмеченные трассировки функций в пулл-реквестах или трекерах проблем Git, создают регрессионные тесты, воспроизводящие аномальные полезные нагрузки параметров, и публикуют исправленные версии в реестре crates.io. Пользователи в сообществе Rust традиционно ожидают, что мейнтейнеры крейтов выпустят обновление семантической версии, внедряющее защитные проверки верхних пределов входных аргументов и ограничивающее выделение памяти при асинхронном опросе.
## What we don't know yet
Существенные технические детали остаются нераскрытыми в первоначальных отчетах, опубликованных VulDB. Что важнее всего, в бюллетенях отсутствуют векторные строки Common Vulnerability Scoring System (CVSS), точные числовые оценки степени серьезности и классификаторы Common Weakness Enumeration (CWE), помимо общего обозначения исчерпания ресурсов.
Также не подтверждено, требуют ли эти уязвимости предварительной криптографической аутентификации для эксплуатации. В случае с CVE-2026-116774, хотя открытие канала обычно происходит после завершения рукопожатия SSH и аутентификации пользователя, определенные конфигурации мультиплексирования или автоматизированные бастионные серверы могут разрешать согласование каналов без аутентификации или на полудоверенной основе. Что касается CVE-2026-116696, в отчетах не уточняется, доступен ли уязвимый цикл serve исключительно через локальные сокеты межпроцессного взаимодействия или же к нему можно обратиться удаленно через механизмы пересылки SSH-агента.
Кроме того, в бюллетенях не указано, существует ли общедоступный эксплойт концептуального уровня (proof-of-concept), фиксировались ли случаи активной эксплуатации проблем «в дикой природе» и были ли уже внесены конкретные коммиты с исправлениями в основную ветку разработки репозитория.
## What to watch
Системным инженерам и мейнтейнерам пакетов следует обратить внимание на несколько ключевых моментов в ближайшие недели. Главным индикатором станет публикация релизов новее версии 0.64.x на crates.io, в частности, сопровождаемых примечаниями к выпуску с упоминанием tx.rs и server.rs.
Командам безопасности также следует отслеживать данные National Vulnerability Database (NVD), управляемой National Institute of Standards and Technology (NIST), на предмет официальной синхронизации CVE и формальных оценок CVSS. Оценка CVSS прояснит, обладают ли уязвимости низким, средним или высоким уровнем серьезности, что во многом определяется требуемыми привилегиями и вектором атаки.
Тем временем разработчики, создающие решения на базе russh, могут проинспектировать свои реализации напрямую. Инженерные аудиты должны быть сосредоточены на том, открывают ли приложения прямой доступ к слушателям серверов агентов для недоверенных сетей и предоставляют ли они недоверенным пользователям возможность согласовывать неограниченные размеры пакетов каналов без валидации на уровне приложения.
Данный материал основан на данных об уязвимостях, каталогизированных и опубликованных VulDB.
Источник: vuldb.com


