Foi publicado o lançamento do servidor de e-mail Exim 4.94.2, corrigindo 21 vulnerabilidades (CVE-2020-28007 a CVE-2020-28026, CVE-2021-27216), que foram identificadas pela empresa Qualys e apresentadas sob o codinome 21Nails. Dez problemas podem ser explorados remotamente (incluindo a execução de código com privilégios de root) através de manipulações com comandos SMTP durante a interação com o servidor.
Todas as versões do Exim estão vulneráveis, com um histórico rastreado no Git desde 2004. Prototótipos de exploits funcionais foram preparados para 4 vulnerabilidades locais e 3 problemas remotos. Os exploits para as vulnerabilidades locais (CVE-2020-28007, CVE-2020-28008, CVE-2020-28015, CVE-2020-28012) permitem elevar privilégios até o usuário root. Dois problemas remotos (CVE-2020-28020, CVE-2020-28018) permitem executar código como o usuário exim sem autenticação (depois, é possível obter acesso root explorando uma das vulnerabilidades locais).
A vulnerabilidade CVE-2020-28021 permite a execução imediata de código como root de forma remota, mas requer acesso autenticado (o usuário deve estabelecer uma sessão autenticada, após o que pode explorar a vulnerabilidade através de manipulações com o parâmetro AUTH no comando MAIL FROM). O problema é causado pelo fato de que o atacante pode forçar a substituição da string no cabeçalho do arquivo spool devido à gravação do valor authenticated_sender sem o devido escape de caracteres especiais (por exemplo, passando o comando "MAIL FROM:<AUTH=Raven+0AReyes").
Além disso, observa-se que mais uma vulnerabilidade remota, CVE-2020-28017, é suscetível de exploração para executar código com os privilégios do usuário 'exim' sem autenticação, mas requer mais de 25 GB de memória. Para as outras 13 vulnerabilidades, exploits também podem ser preparados potencialmente, mas esse trabalho ainda não foi realizado.
Os desenvolvedores do Exim foram informados sobre os problemas em outubro do ano passado e levaram mais de 6 meses para desenvolver correções. Todos os administradores são aconselhados a atualizar urgentemente o Exim em seus servidores de e-mail. servidores até a versão 4.94.2. Todas as versões do Exim antes do lançamento 4.94.2 foram declaradas obsoletas. A publicação da nova versão foi coordenada com as distribuições que publicaram atualizações de pacotes simultaneamente: Ubuntu, Arch Linux, FreeBSD, Debian, SUSE e Fedora. RHEL e CentOS não estão sujeitos ao problema, uma vez que o Exim não faz parte de seu repositório de pacotes padrão (a atualização ainda não está disponível no EPEL).
Vulnerabilidades remotas:
- CVE-2020-28017: Sobrecarga de inteiro na função receive_add_recipient();
- CVE-2020-28020: Sobrecarga de inteiro na função receive_msg();
- CVE-2020-28023: Leitura fora da área do buffer alocado na função smtp_setup_msg();
- CVE-2020-28021: Inserção de nova linha no cabeçalho do arquivo de spool;
- CVE-2020-28022: Gravação e leitura fora da área do buffer alocado na função extract_option();
- CVE-2020-28026: Cortes e inserções de string na função spool_read_header();
- CVE-2020-28019: Falha ao redefinir o ponteiro da função após ocorrer um erro BDAT;
- CVE-2020-28024: Sobrecargas na parte inferior do buffer na função smtp_ungetc();
- CVE-2020-28018: Acesso ao buffer após sua liberação (uso após liberação) em tls-openssl.c
- CVE-2020-28025: Leitura fora da área do buffer alocado na função pdkim_finish_bodyhash().
Vulnerabilidades locais:
- CVE-2020-28007: Ataque através de link simbólico no diretório com log do Exim;
- CVE-2020-28008: Ataques ao diretório de spool;
- CVE-2020-28014: Criação de arquivo arbitrário;
- CVE-2021-27216: Exclusão de arquivo arbitrário;
- CVE-2020-28011: Sobrecarga de buffer na função queue_run();
- CVE-2020-28010: Gravação além dos limites do buffer na função main();
- CVE-2020-28013: Sobrecarga de buffer na função parse_fix_phrase();
- CVE-2020-28016: Gravação além dos limites do buffer na função parse_fix_phrase();
- CVE-2020-28015: Inserção de nova linha no cabeçalho do arquivo de spool;
- CVE-2020-28012: Falta do sinalizador close-on-exec para canal não nomeado privilegiado;
- CVE-2020-28009: Sobrecarga de inteiro na função get_stdinput().
Fonte: opennet.ru
