Empresa Qualys
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
O problema é consequência da eliminação incompleta
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