Durante o estudo da vulnerabilidade crítica no OpenSSH revelada na semana passada, foi descoberta mais uma vulnerabilidade semelhante (CVE-2024-6409), que permite a execução remota de código sem passar pela autenticação. A nova vulnerabilidade não é tão perigosa quanto a anterior, pois se manifesta após a elevação de privilégios em um subprocesso gerenciado pelo servidor SSH em execução. A vulnerabilidade está presente nos pacotes do openssh do Red Hat Enterprise Linux 9, baseados na versão 8.7 do OpenSSH, publicada em 2021. O problema também afeta os pacotes para o Fedora Linux 36 e 37, baseados nas versões 8.7 e 8.8 do OpenSSH.
A vulnerabilidade é essencialmente semelhante ao problema anterior e também é causada por uma condição de corrida no manipulador de interrupção SIGALRM, resultante da execução de funções que não foram projetadas para serem chamadas de maneira assíncrona a partir de manipuladores de sinais. O manipulador é ativado ao ocorrer um timeout definido pelo parâmetro LoginGraceTime e interrompe a execução atual do código. O uso de funções não projetadas para execução assíncrona no manipulador de interrupções, que envolvem alocação dinâmica de memória, como syslog(), pode levar à corrupção de estruturas internas do malloc ao ser ativado o SIGALRM durante a execução de um código específico.
A nova vulnerabilidade se distingue pelo fato de que a condição de corrida ocorre devido à chamada, no manipulador de sinal grace_alarm_handler(), da função cleanup_exit(). Na base de código principal do OpenSSH, essa função pode ser usada em código executado de forma assíncrona, mas nos pacotes para RHEL 9 e Fedora foi aplicado um patch adicional que adiciona, no cleanup_exit(), a chamada de uma função para gerar eventos de auditoria, planejada para uso em manipuladores de sinais.
Este patch foi utilizado no RHEL 9 e distribuições derivadas em pacotes baseados no OpenSSH 8.7p1. Nas versões atuais do Fedora, o problema não ocorre, pois a partir do Fedora 38, a distribuição mudou para uma versão mais recente do OpenSSH sem alterar cleanup_exit(). Ao contrário da vulnerabilidade anterior, não há um método alternativo de proteção desejável baseado na utilização da opção "-e" no sshd, que desabilita a saída do log via syslog. No entanto, para bloquear a vulnerabilidade, pode-se definir o parâmetro "LoginGraceTime=0" no sshd_config.
Fonte: opennet.ru
