Vulnerabilidades no OpenSMTPD que permitem acesso root remoto e local

Empresa Qualys revelado outra vulnerabilidade crítica remota (CVE-2020-8794) no servidor de e-mail OpenSMTPD, desenvolvido pelo projeto OpenBSD. Como o identificado no final de janeiro vulnerabilidade, um novo problema torna possível executar remotamente comandos shell arbitrários em um servidor com direitos de usuário root. Vulnerabilidade eliminado em questão OpenSMTPD 6.6.4p1.

O problema é causado por um erro no código que entrega mensagens ao servidor de correio remoto (não no código que trata das conexões de entrada). O ataque é possível tanto do lado do cliente quanto do lado do servidor. Do lado do cliente, o ataque é possível na configuração padrão do OpenSMTPD, em que o OpenSMTPD aceita solicitações apenas na interface de rede interna (localhost) e envia mensagens de correio para servidores externos. Para explorar a vulnerabilidade, basta que, durante a entrega de uma carta, o OpenSMTPD estabeleça uma sessão com um servidor de e-mail controlado pelo invasor, ou que o invasor consiga invadir a conexão do cliente (MITM ou redirecionamento durante ataques via DNS ou BGP ).

Para um ataque no lado do servidor, o OpenSMTPD deve ser configurado para receber solicitações de rede externa de outros servidores de e-mail ou servir serviços de terceiros que permitem enviar uma solicitação para um e-mail arbitrário (por exemplo, formulários de confirmação de endereço em sites). Por exemplo, um invasor pode se conectar ao servidor OpenSMTPD e enviar uma carta incorreta (para um usuário inexistente), o que levará a uma resposta enviando uma carta com um código de erro (bounce) ao servidor do invasor. Um invasor pode explorar a vulnerabilidade quando o OpenSMTPD se conecta para entregar uma notificação ao servidor do invasor. Os comandos shell injetados durante o ataque são colocados em um arquivo que é executado com direitos de root quando o OpenSMTPD é reiniciado, portanto, o invasor deve aguardar a reinicialização do OpenSMTPD ou iniciar uma falha do OpenSMTPD para concluir o ataque.

O problema está presente na função mta_io() no código para analisar a resposta multilinha retornada pelo servidor remoto após o estabelecimento de uma conexão (por exemplo, "250-ENHANCEDSTATUSCODES" e "250 HELP"). OpenSMTPD calcula que a primeira linha inclui um número de três dígitos e texto separados por um caractere “-“, e a segunda linha contém um número de três dígitos e texto separados por um espaço. Se um número de três dígitos não for seguido por um espaço e texto na segunda linha, o ponteiro usado para definir o texto é definido para o byte após o caractere '\0' e é feita uma tentativa de copiar os dados após o final da linha no buffer.

A pedido do projeto OpenBSD, a publicação de detalhes sobre a exploração da vulnerabilidade foi adiada até 26 de fevereiro para permitir que os usuários atualizem seus sistemas. O problema está presente na base de código desde dezembro de 2015, mas a exploração antes da execução do código com privilégios de root é possível desde maio de 2018. Os pesquisadores prepararam um protótipo funcional do exploit, que foi testado com sucesso em compilações do OpenSMTPD para OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (teste) e Fedora 31.

No OpenSMTPD também identificado Outra vulnerabilidade (CVE-2020-8793) que permite que um usuário local leia a primeira linha de qualquer arquivo do sistema. Por exemplo, você pode ler a primeira linha de /etc/master.passwd, que contém o hash da senha do usuário root. A vulnerabilidade também permite que você leia todo o conteúdo de um arquivo de propriedade de outro usuário se esse arquivo estiver localizado no mesmo sistema de arquivos que o diretório /var/spool/smtpd/. O problema não pode ser explorado em muitas distribuições Linux onde o valor de /proc/sys/fs/protected_hardlinks está definido como 1.

O problema é consequência da eliminação incompleta проблем, manifestado durante a auditoria realizada pela Qualys em 2015. Um invasor pode executar seu código com os direitos do grupo “_smtpq” definindo a variável “PATH=.”. e colocar um script chamado makemap no diretório atual (o utilitário smtpctl executa makemap sem especificar explicitamente o caminho). Ao obter acesso ao grupo "_smtpq", o invasor pode então causar uma condição de corrida (criar um arquivo grande no diretório offline e enviar um sinal SIGSTOP) e, antes que o processamento seja concluído, substituir o arquivo no diretório offline por um disco rígido link simbólico apontando para o arquivo de destino cujo conteúdo precisa ser lido.

Vale ressaltar que no Fedora 31 a vulnerabilidade permite obter imediatamente os privilégios do grupo root, já que o processo smtpctl está equipado com o sinalizador setgid root, em vez do sinalizador setgid smtpq. Ao obter acesso ao grupo raiz, você pode sobrescrever o conteúdo de /var/lib/sss/mc/passwd e obter acesso root completo ao sistema.

Fonte: opennet.ru

Adicionar um comentário