A empresa Qualys identificou uma vulnerabilidade crítica (CVE-2024-6387) no OpenSSH, que permite a execução remota de código com privilégios de root sem autenticação. A vulnerabilidade, codinome regreSSHion, se manifesta na configuração padrão a partir da versão OpenSSH 8.5 em sistemas com a biblioteca padrão Glibc.
A possibilidade de realizar um ataque foi demonstrada em um sistema de 32 bits com Glibc, com a proteção ASLR (aleatorização do espaço de endereçamento) ativada. Para um ataque bem-sucedido em condições laboratoriais, foram necessários de 6 a 8 horas, durante as quais se servidor estabeleceram continuamente conexões com a intensidade máxima permitida na configuração do sshd. A realização do ataque é facilitada e requer menos tempo em sistemas sem ASLR ou em distribuições que utilizam OpenSSH modificado, no qual a re-aleatorização ASLR para cada conexão está desativada. Um protótipo funcional do exploit não será publicado publicamente até que a vulnerabilidade seja amplamente corrigida, mas uma descrição detalhada da natureza da vulnerabilidade está disponível, tornando o aparecimento de exploits de terceiros uma questão de tempo.
Não se descarta a possibilidade de ataques também em sistemas de 64 bits, mas um exploit funcional para esses sistemas ainda não está pronto. Supõe-se que a realização de um ataque em sistemas de 64 bits levará muito mais tempo, mas não mais de uma semana. O OpenSSH no OpenBSD não é vulnerável ao problema, pois este sistema aplica desde 2001 um mecanismo de proteção que bloqueia classes similares de ataques. Em outros sistemas com base em bibliotecas padrão diferentes da Glibc, a adaptação do método para realizar um ataque é teoricamente possível (na Qualys, esta questão ainda não foi estudada).
A vulnerabilidade foi corrigida na versão do OpenSSH 9.8 (patch) publicada hoje. É possível acompanhar as publicações de atualizações de pacotes nas distribuições nas páginas: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, ROSA, Gentoo, ALT Linux, Arch e FreeBSD. Como uma solução alternativa para bloquear a vulnerabilidade, no sshd_config, o parâmetro "LoginGraceTime=0" pode ser configurado; no entanto, desativar o tempo limite facilitará a iniciação de um ataque de negação de serviço ao estabelecer um grande número de conexões que excedam os limites definidos pelo parâmetro MaxStartups.
Um dos sinais de uma tentativa de ataque é o surgimento no log de um grande número de entradas "Timeout before authentication".
A vulnerabilidade surgiu como resultado de uma alteração regressiva incluída na versão do OpenSSH 8.5, que leva a uma condição de corrida no código de processamento de sinais no sshd. A regressão resultou na desativação da proteção contra uma antiga vulnerabilidade CVE-2006-5051, que se manifestava até a versão 4.4 do OpenSSH (2006) e tinha um caráter teórico.
Durante o desenvolvimento do OpenSSH 8.5, por engano, o bloco "#ifdef DO_LOG_SAFE_IN_SIGHAND" foi removido da função sigdie(), que é chamada diretamente do manipulador SIGALRM.
O manipulador SIGALRM é chamado no sshd de forma assíncrona, se o cliente não conseguiu se autenticar dentro do tempo limitado pelo timeout de conexão (LoginGraceTime, padrão de 120 segundos). O ataque baseia-se no fato de que o manipulador de sinais chama funções que não são seguras durante o processamento assíncrono de sinais, como syslog(). A função syslog() na Glibc não é projetada para uso em manipuladores de sinais executados de forma assíncrona, pois chama as funções malloc() e free(). A ativação do sinal SIGALRM, que interrompe um código específico no sshd, pode levar a uma violação do estado de execução, e o objetivo do exploit é criar condições para interromper o código necessário no momento certo de sua execução. A vulnerabilidade não afeta o OpenBSD, pois nele, em vez de syslog() no manipulador de sinais SIGALRM, é chamada a função syslog_r(), especificamente criada para execução assíncrona.
Fonte: opennet.ru
