Vulnerabilidade explorável remotamente no servidor de correio qmail

Pesquisadores de segurança da empresa Qualys foi apresentado a possibilidade operação vulnerabilidades no servidor de e-mail qmail, conhecida já desde 2005 (CVE-2005-1513), mas que permanecia sem correção, uma vez que o autor do qmail afirmava ser irrealista criar um exploit funcional que pudesse ser usado para atacar sistemas na configuração padrão. Na Qualys, foi possível preparar um exploit que refuta essa suposição e permite iniciar a execução remota de código no servidor através do envio de uma mensagem formatada de forma especial.

O problema é causado por um estouro de inteiro na função stralloc_readyplus(), que pode ocorrer ao processar uma mensagem muito grande. Para a exploração, era necessária uma máquina de 64 bits com mais de 4GB de memória virtual. Na análise inicial da vulnerabilidade em 2005, Daniel Bernstein afirmou que a suposição presente no código de que o tamanho do array alocado sempre se encaixa em um valor de 32 bits baseava-se no fato de que ninguém aloca gigabytes de memória para cada processo. Nos últimos 15 anos, sistemas de 64 bits em servidores substituiram os de 32 bits, aumentando drasticamente a quantidade de memória disponível e a largura de banda das redes.

Os pacotes acompanhantes do qmail levaram em consideração a observação de Bernstein e, ao iniciar o processo qmail-smtpd, limitavam a memória disponível (por exemplo, no Debian 10, é definido um limite de 7MB). Mas os engenheiros da Qualys descobriram que isso não era suficiente, e além do qmail-smtpd, um ataque remoto também podia ser levado a cabo no processo qmail-local, que em todos os pacotes analisados permaneceu sem limitação. Como prova, um protótipo de exploit foi preparado, adequado para atacar o pacote qmail fornecido no Debian na configuração padrão.
Para organizar a execução remota de código durante o ataque, é necessário que haja 4GB de espaço livre em disco e 8GB de RAM no servidor.
O exploit permite executar quaisquer comandos shell com os privilégios de qualquer usuário no sistema, exceto root e usuários do sistema que não têm seu próprio subdiretório no diretório "/home" (o processo qmail-local é iniciado com os privilégios do usuário local a quem a entrega é feita).

O ataque é realizado
através do envio de uma mensagem de e-mail muito grande, incluindo várias linhas no cabeçalho, com tamanho de cerca de 4GB e 576MB. O processamento de tal linha no qmail-local resulta em um estouro de inteiro ao tentar entregar a mensagem para o usuário local. O estouro de inteiro, por sua vez, leva a um estouro de buffer ao copiar dados e à possibilidade de sobrescrever páginas de memória com código libc. Através de manipulações na formatação dos dados transmitidos, é possível sobrescrever o endereço da função «open()», substituindo-o pelo endereço da função «system()».

Em seguida, no processo de chamada de qmesearch() no qmail-local, o arquivo «.qmail-extension» é aberto através da função open(), o que leva à execução real da função
system(«.qmail-extension»). Mas como parte do arquivo «extension» é gerada com base no endereço do destinatário (por exemplo, «localuser-extension@localdomain»), os atacantes podem organizar a transmissão de um comando a ser executado, especificando o usuário «localuser-;command;@localdomain» como destinatário da mensagem.

Durante a análise do código, também foram identificadas duas vulnerabilidades no patch adicional qmail-verify, que faz parte do pacote para Debian. A primeira vulnerabilidade (CVE-2020-3811) permite contornar a verificação do endereço de e-mail, enquanto a segunda (CVE-2020-3812) leva ao vazamento de informações locais. Em particular, a primeira vulnerabilidade permite contornar a verificação de validade do endereço usado no exploit para transmitir o comando (a verificação não é acionada para endereços sem domínio, como «localuser-;command;»). A segunda vulnerabilidade pode ser usada para verificar a existência de arquivos e diretórios no sistema, incluindo aqueles acessíveis apenas como root (qmail-verify é executado com privilégios de root), através do acesso direto ao manipulador local.

Para contornar o problema, Bernstein recomendou executar processos do qmail com um limite geral na memória disponível («softlimit -m12345678»), e nesse caso o problema é bloqueado. Como uma alternativa de proteção, também é mencionada a limitação do tamanho máximo da mensagem processada através do arquivo «control/databytes» (que não é criado por padrão nas configurações padrão, fazendo com que o qmail permaneça vulnerável). Além disso, «control/databytes» não protege contra ataques locais por parte de usuários do sistema, já que a limitação é considerada apenas no qmail-smtpd.

O problema afeta o pacote netqmail, que faz parte dos repositórios do Debian. Para este pacote, foi preparado um conjunto de patches que eliminam tanto vulnerabilidades antigas de 2005 (por meio da adição de limites rígidos de memória na função alloc() do código), quanto novos problemas no qmail-verify. Separadamente está preparado uma versão atualizada do patch qmail-verify. Os desenvolvedores da ramificação notqmail prepararam seus patches para bloquear problemas antigos e também iniciaram o trabalho de correção de todas as possíveis vulnerabilidades de estouro de inteiro no código.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster