Vulnerabilidade explorável remotamente no servidor de correio qmail

Pesquisadores de segurança da Qualys ter mostrado oportunidade operacional vulnerabilidades no servidor de email qmail, famoso em 2005 (CVE-2005-1513), mas permaneceu sem correção porque o autor do qmail argumentou que não era realista criar uma exploração funcional que pudesse ser usada para atacar sistemas na configuração padrão. A Qualys foi capaz de preparar uma exploração que refuta essa suposição e permite iniciar a execução remota de código no servidor, enviando uma mensagem especialmente projetada.

O problema é causado por um estouro de número inteiro na função stralloc_readyplus(), que pode ocorrer ao processar uma mensagem muito grande. A operação exigia um sistema de 64 bits com mais de 4 GB de memória virtual. Quando a vulnerabilidade foi analisada originalmente em 2005, Daniel J. Bernstein argumentou que a suposição no código de que o tamanho da matriz alocada está sempre dentro do valor de 32 bits se baseia no fato de que ninguém fornece gigabytes de memória para cada processo. Nos últimos 15 anos, os sistemas de 64 bits em servidores substituíram os sistemas de 32 bits e a quantidade de memória fornecida e a largura de banda da rede aumentaram dramaticamente.

Os mantenedores do pacote qmail levaram em consideração a nota de Bernstein e limitaram a memória disponível ao iniciar o processo qmail-smtpd (por exemplo, no Debian 10 o limite é definido para 7 MB). Mas os engenheiros da Qualys descobriram que isso não é suficiente e, além do qmail-smtpd, um ataque remoto pode ser realizado no processo qmail-local, que permaneceu irrestrito em todos os pacotes testados. Como prova, foi preparado um protótipo de exploração adequado para atacar o pacote Debian com qmail na configuração padrão.
Para organizar a execução remota de código durante um ataque, o servidor requer 4 GB de espaço livre em disco e 8 GB de RAM.
A exploração permite que você execute qualquer comando shell com os direitos de qualquer usuário no sistema, exceto para usuários root e do sistema que não possuem seu próprio subdiretório no diretório “/home” (o processo qmail-local é iniciado com os direitos do usuário local a quem a entrega é realizada).

O ataque é realizado
através do envio de uma mensagem de correio muito grande, incluindo várias linhas de cabeçalho, medindo aproximadamente 4 GB e 576 MB. O processamento de tal string em qmail-local resulta em um estouro de número inteiro ao tentar entregar uma mensagem ao usuário local. Um estouro de número inteiro leva a um estouro de buffer ao copiar dados e à possibilidade de sobrescrever páginas de memória com código libc. Ao manipular o layout dos dados transmitidos, também é possível reescrever o endereço da função “open()”, substituindo-o pelo endereço da função “system()”.

A seguir, no processo de chamada de qmesearch() em qmail-local, o arquivo “.qmail-extension” é aberto através da função open(), o que leva à execução real da função
sistema(".qmail-extensão"). Mas como a parte “extensão” do arquivo é gerada com base no endereço do destinatário (por exemplo, “localuser-extension@localdomain”), os invasores podem fazer com que o comando seja enviado para execução especificando o usuário “localuser-;command ;@localdomain” como destinatário da mensagem.

Durante a análise do código, duas vulnerabilidades também foram identificadas no patch adicional qmail-verify, que faz parte do pacote para Debian. Primeira vulnerabilidade (CVE-2020-3811) permite ignorar a verificação de endereço de e-mail, e o segundo (CVE-2020-3812) leva ao vazamento de informações locais. Em particular, a primeira vulnerabilidade permite ignorar a verificação da exatidão do endereço usado na exploração para enviar um comando (a verificação não funciona para endereços sem domínio, como “localuser-;command;”). A segunda vulnerabilidade pode ser usada para verificar a presença de arquivos e diretórios no sistema, incluindo aqueles acessíveis apenas ao root (qmail-verify é executado com direitos de root), através de uma chamada direta ao manipulador local.

Para contornar o problema, Bernstein recomendou executar processos qmail com um limite total de memória disponível (“softlimit -m12345678”), caso em que o problema será bloqueado. Como método alternativo de proteção, também é mencionado limitar o tamanho máximo da mensagem processada através do arquivo “control/databytes” (por padrão não é criado com configurações padrão o qmail permanece vulnerável). Além disso, "control/databytes" não protege contra ataques locais de usuários do sistema, uma vez que o limite só é levado em consideração pelo qmail-smtpd.

O problema afeta o pacote netqmail, incluído nos repositórios Debian. Um conjunto de patches foi preparado para este pacote, eliminando vulnerabilidades antigas de 2005 (adicionando limites de memória ao código da função alloc()) e novos problemas no qmail-verify. Separadamente preparado versão atualizada do patch qmail-verify. Desenvolvedores galhos notqmail prepararam seus próprios patches para bloquear problemas antigos e também começaram a trabalhar para eliminar todos os possíveis overflows de inteiros no código.

Fonte: opennet.ru

Adicionar um comentário