Pesquisadores de segurança da Qualys
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 (
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
Fonte: opennet.ru