Falhas de segurança na biblioteca SSH em Rust 'russh' expõem sistemas a esgotamento de recursos
Duas vulnerabilidades que afetam versões da biblioteca Eugeny russh até a 0.64.x permitem ataques de consumo de recursos por meio de rotinas de transmissão de canais e de servidor de agente.
The Global Wire Newsroom ·
Link preview · horizonglobalnews.com
Falhas de segurança na biblioteca SSH em Rust 'russh' expõem sistemas a esgotamento de recursos
Duas vulnerabilidades que afetam versões da biblioteca Eugeny russh até a 0.64.x permitem ataques de consumo de recursos por meio de rotinas de transmissão de canais e de servidor de agente.
Este artigo foi traduzido automaticamente pela IA da nossa redação a partir do original em inglês. Ler em inglês
Duas vulnerabilidades distintas de segurança foram identificadas na implementação de código aberto em Rust do protocolo Secure Shell conhecida como Eugeny russh, afetando todas as versões do software até a linha de lançamentos 0.64.x. De acordo com registros de divulgação publicados pela base de dados de vulnerabilidades VulDB em 27 de outubro de 2026, ambas as falhas possibilitam condições de consumo de recursos que podem degradar ou interromper serviços no host. O primeiro problema, registrado como CVE-2026-116774, reside nas rotinas de análise de canais da biblioteca durante a sondagem de transmissão. A segunda vulnerabilidade, registrada como CVE-2026-116696, afeta o módulo interno do servidor de agente de autenticação. Ambas as entradas foram formalmente classificadas pelo VulDB como defeitos problemáticos de consumo de recursos.
## Principais fatos
- As entradas de rastreamento de segurança CVE-2026-116774 e CVE-2026-116696 foram catalogadas em 27 de outubro de 2026, documentando falhas em versões do Eugeny russh até a versão 0.64.x. - A CVE-2026-116774 afeta a função ChannelTx::poll_writable dentro de russh/src/channels/io/tx.rs por meio da manipulação do parâmetro maximum_packet_size. - A CVE-2026-116696 afeta o subsistema de autenticação localizado em russh/src/keys/agent/server.rs dentro da função russh::keys::agent::server::serve. - Ambas as vulnerabilidades são classificadas como bugs problemáticos de consumo de recursos que provocam o esgotamento descontrolado de ativos do sistema. - O software afetado é uma implementação central em Rust puro do protocolo SSH-2 utilizada para construir infraestruturas de cliente e servidor.
## O que aconteceu
De acordo com avisos de segurança publicados pelo VulDB, analistas de segurança registraram dois registros separados de vulnerabilidade cobrindo a base de código do Eugeny russh em 27 de outubro de 2026. Os comunicados descrevem vulnerabilidades que compartilham uma classificação de impacto comum — consumo de recursos —, embora se originem em camadas funcionais totalmente distintas da biblioteca do protocolo.
O primeiro comunicado, referente à CVE-2026-116774, isola uma vulnerabilidade dentro do componente Channel Open Parsing da biblioteca. Especificamente, a falha está localizada no arquivo-fonte russh/src/channels/io/tx.rs, dentro da função ChannelTx::poll_writable. Segundo o VulDB, um invasor pode manipular o argumento maximum_packet_size durante operações de gerenciamento de canais. Essa manipulação interfere no agendamento de transmissão esperado e resulta em consumo excessivo de recursos, potencialmente paralisando ou sobrecarregando o processo que realizou a chamada.
O segundo comunicado, referente à CVE-2026-116696, aborda uma falha no componente de manipulação do agente de autenticação da biblioteca. O código vulnerável está localizado em russh/src/keys/agent/server.rs, dentro do caminho de execução serve, identificado como russh::keys::agent::server::serve. O VulDB relata que a manipulação direcionada dessa rotina de servidor causa consumo anormal de recursos, submetendo de maneira semelhante a infraestrutura de computação ou memória a sobrecarga, sem exigir uma violação completa dos limites criptográficos.
Ambos os registros apontam o intervalo afetado como versões de software até a série 0.64.x inclusive, indicando que compilações de produção atuais e históricas dependentes dessas ramificações herdam os comportamentos estruturais subjacentes descritos nos relatórios.
## Por que isso importa
O protocolo Secure Shell (SSH), padronizado principalmente pela RFC 4251 da Internet Engineering Task Force (IETF) e especificações correlatas, constitui a espinha dorsal administrativa da infraestrutura moderna em nuvem, da execução remota automatizada e da orquestração segura de sistemas. Quando uma biblioteca SSH sofre com bugs de esgotamento de recursos, as consequências ameaçam diretamente a disponibilidade dos serviços de infraestrutura.
Em protocolos de rede, vulnerabilidades de consumo de recursos normalmente se manifestam como condições de negação de serviço. Quando um daemon de servidor ou cliente SSH processa quadros de rede, ele precisa alocar buffers de memória, gerenciar filas de transmissão e manter máquinas de estado para cada sessão ativa. Na CVE-2026-116774, como o problema envolve o parâmetro maximum_packet_size na rotina ChannelTx::poll_writable, existe o potencial de que um par externo force loops desequilibrados de buffering ou ciclos repetidos de sondagem (polling). Se um par especificar tamanhos de pacotes anormais ou que distorçam limites durante a negociação de canal, a lógica assíncrona de transmissão pode consumir ciclos excessivos de CPU na tentativa de reconciliar os limites de pacotes solicitados com o espaço de janela disponível, ou pode alocar buffers desproporcionais na memória heap, esgotando a memória do host.
De modo similar, a CVE-2026-116696 atinge o mecanismo do servidor de agente. O protocolo do agente SSH, comumente usado para manter chaves privadas na memória e responder a solicitações de assinatura por meio de conexões encaminhadas, opera como um daemon local confiável ou encaminhado. Uma vulnerabilidade de consumo de recursos no loop serve significa que qualquer cliente ou proxy de encaminhamento capaz de enviar requisições à interface do agente poderia induzir o esgotamento de threads, vazamentos de memória ou iterações irrestritas de loop. Isso torna o agente sem resposta, bloqueando sessões de administração legítimas e encerrando pipelines de integração contínua que dependem do encaminhamento de agente para credenciais.
Como o Rust é amplamente adotado justamente por sua segurança de memória e previsibilidade, os desenvolvedores frequentemente presumem que crates em Rust são inerentemente imunes a vulnerabilidades de baixo nível. Embora o Rust elimine a corrupção espacial de memória, como transbordamentos de buffer (buffer overflows) e condições de use-after-free em código seguro, ele não elimina automaticamente ataques de complexidade algorítmica, deadlocks de máquinas de estado ou manipulação sem validação de parâmetros que causam negação de serviço. Essas divulgações destacam que defeitos de lógica de processamento continuam sendo uma ameaça operacional em softwares modernos de sistemas.
## Contexto
A crate russh originou-se como um fork do Thrussh, uma implementação inicial em Rust puro de uma estrutura cliente e servidor para SSH-2. Com o tempo, sob a liderança do mantenedor Eugeny Pankov — amplamente conhecido pelo desenvolvimento do emulador de terminal multiplataforma Tabby —, a biblioteca cresceu e se tornou uma das implementações nativas em Rust mais proeminentes do protocolo SSH. Construída sobre o runtime assíncrono Tokio, a russh fornece comunicações de rede não bloqueantes baseadas em futuros, projetadas para lidar com ambientes de alta concorrência sem gerar threads dedicadas do sistema operacional para cada conexão.
Dentro da arquitetura SSH-2, a comunicação é organizada em torno de canais. Múltiplos canais lógicos, como shells interativos, túneis diretos de encaminhamento TCP e canais de encaminhamento de agente, são multiplexados sobre uma única sessão de transporte criptográfico autenticada. Segundo a RFC 4254, cada lado de um canal regula a entrada de dados anunciando um tamanho máximo de pacote e um tamanho de janela inicial. A janela define quantos bytes o remetente remoto pode enviar antes de aguardar um ajuste, enquanto o maximum_packet_size especifica a maior carga individual de dados permitida em um único pacote.
O caminho de transmissão em frameworks assíncronos como o Tokio depende de sondagem de prontidão. O método poll_writable verifica se o transporte subjacente pode aceitar novos dados sem bloquear a thread do runtime. Em russh/src/channels/io/tx.rs, a estrutura ChannelTx orquestra o empacotamento dos dados de saída. Se a biblioteca não aplicar limites estritos de sanidade ou checagens de limites matemáticos ao maximum_packet_size, um adversário ou par malformado pode provocar casos extremos em que o runtime registra constantemente a prontidão, mas não faz qualquer progresso real, ou, inversamente, divide dados em milhões de micropacotes, saturando o escalonamento de CPU.
Na frente de autenticação, os protocolos de agente SSH derivam do modelo padrão do agente OpenSSH. Os daemons escutam em sockets de domínio Unix locais ou fluxos encaminhados, aceitando cargas de bytes estruturadas que representam solicitações para listar chaves ou assinar desafios. A função serve em russh/src/keys/agent/server.rs atua como o despachante de eventos para quadros recebidos do protocolo do agente. O processamento de fluxos não confiáveis ou adversários dentro desse loop exige validação rigorosa de comprimento; sem isso, cabeçalhos de mensagens malformados podem desencadear alocações de leitura ilimitadas ou execução de loops infinitos, paralisando o host.
Historicamente, bibliotecas de rede em C, Go e Python enfrentaram vulnerabilidades análogas de gerenciamento de recursos. Incidentes conhecidos no OpenSSH, como ataques de privação de recursos contra conexões de pré-autenticação e esgotamento de estado de canais, forçaram desenvolvedores de protocolos ao longo de décadas a implementar limites defensivos, limitadores de taxa e checagens estritas de validação em valores de dimensionamento fornecidos pelo cliente.
## Repercussão
A repercussão pública após os registros de 27 de outubro permaneceu amplamente restrita a feeds técnicos de vulnerabilidade e ferramentas automatizadas de varredura de pacotes, visto que nem os principais fornecedores de nuvem nem as distribuições convencionais de sistemas operacionais emitiram comunicados de resposta emergencial até o momento. As divulgações iniciais originaram-se nos fluxos automatizados de monitoramento do VulDB.
No ecossistema mais amplo de código aberto, espera-se que mantenedores de softwares derivados que dependem da crate russh — incluindo gateways SSH customizados, ferramentas automatizadas de backup e aplicativos de terminal — monitorem os repositórios do projeto em busca de correções. Nos fluxos de trabalho típicos de vulnerabilidade em código aberto, os mantenedores revisam os rastros das funções sinalizadas em pull requests ou rastreadores de problemas no Git, estabelecem testes de regressão que reproduzem as cargas anormais de parâmetros e publicam versões corrigidas no registro crates.io. Usuários da comunidade Rust rotineiramente esperam que os mantenedores de crates lancem incrementos de versão semântica que apliquem checagens defensivas de limites superiores aos argumentos de entrada e restrinjam alocações de memória durante a sondagem assíncrona.
## O que ainda não se sabe
Especificidades técnicas significativas continuam omitidas das divulgações iniciais publicadas pelo VulDB. Mais criticamente, os comunicados não fornecem strings de vetores do Common Vulnerability Scoring System (CVSS), pontuações numéricas exatas de severidade ou atribuições de Common Weakness Enumeration (CWE) além do rótulo genérico de consumo de recursos.
Também não há confirmação sobre se essas vulnerabilidades exigem autenticação criptográfica prévia para serem exploradas. No caso da CVE-2026-116774, embora a abertura de canais normalmente ocorra após a conclusão do handshake SSH e da autenticação do usuário, certas configurações de multiplexação ou bastiões automatizados podem permitir a negociação de canais não autenticados ou semiconfiáveis. Para a CVE-2026-116696, os relatórios não esclarecem se o loop vulnerável serve fica exposto exclusivamente por sockets locais de comunicação entre processos ou se pode ser alcançado remotamente por meio de mecanismos de encaminhamento do agente SSH.
Além disso, os comunicados não informam se existe uma prova de conceito pública de exploit, se os problemas foram observados em exploração ativa no ambiente real ou se hashes de commit específicos abordando as falhas já foram integrados ao branch principal de desenvolvimento do repositório.
## O que observar
Engenheiros de sistemas e mantenedores de pacotes devem acompanhar vários pontos críticos nas próximas semanas. O principal indicador será a publicação de lançamentos posteriores à versão 0.64.x no crates.io, especificamente acompanhados de notas de versão que façam referência a tx.rs e server.rs.
Equipes de segurança também devem monitorar a National Vulnerability Database (NVD), operada pelo National Institute of Standards and Technology (NIST), para a sincronização oficial dos CVEs e atribuição de pontuações formais de CVSS. Uma pontuação CVSS esclarecerá se as vulnerabilidades possuem severidade baixa, média ou alta, ditada em grande parte pelos privilégios exigidos e pelo escopo do vetor de ataque.
Nesse ínterim, desenvolvedores que constroem sobre a russh podem inspecionar suas implementações diretas. Auditorias de engenharia devem se concentrar em avaliar se as aplicações expõem ouvintes do servidor de agente diretamente a redes não confiáveis ou concedem a usuários não confiáveis a capacidade de negociar dimensões irrestritas de pacotes de canais sem validação em nível de aplicação.
Este relatório é baseado em divulgações de vulnerabilidades catalogadas e reportadas pelo VulDB.
Fonte: vuldb.com


