Patched Exim - faça o patch novamente. Execução fresca de comando remoto no Exim 4.92 em uma solicitação


Mais recentemente, no início do verão, houve enormes pedidos de atualização do Exim para a versão 4.92 devido à vulnerabilidade CVE-2019-10149 ( atualização urgente do Exim para 4.92 - infecção ativa / Habr ). No outro dia, descobriu-se que o malware Sustes decidiu tirar proveito dessa vulnerabilidade.


Agora, todos os que estão com urgência de atualização podem novamente ficar "felizes": em 21 de julho de 2019, o pesquisador da Zerons descobriu uma vulnerabilidade crítica no agente Exim Mail Transfer (MTA) ao usar o TLS para versões de 4.80 a 4.92.1 inclusive, permitindo a execução remota de código com privilégios privilegiados ( CVE -2019-15846 ).


Vulnerabilidade


A vulnerabilidade está presente ao usar as bibliotecas GnuTLS e OpenSSL ao estabelecer uma conexão TLS segura.


Segundo o desenvolvedor Heiko Schlittermann, o arquivo de configuração no Exim não usa TLS por padrão, no entanto, muitas distribuições criam os certificados necessários durante a instalação e incluem uma conexão segura. As versões mais recentes do Exim também configuram a opção tls_advertise_hosts = * e geram os certificados necessários.


depende da configuração. A maioria das distribuições o habilita por padrão, mas o Exim precisa de um certificado + chave para funcionar como um servidor TLS. Provavelmente, as distros criam um certificado durante a instalação. Exims mais recentes têm a opção tls_advertise_hosts como "*" e cria um certificado autoassinado, se nenhum for fornecido.

A vulnerabilidade em si consiste no processamento SNI incorreto (Server Name Indication, uma tecnologia introduzida em 2003 na RFC 3546 para um cliente solicitar um certificado válido para um nome de domínio, Distribuição do padrão TLS SNI / Blog da empresa WEBO Group / Habr ) durante um handshake TLS. É suficiente para um invasor enviar um SNI terminando em uma barra invertida ("\") e um caractere nulo ("\ 0").


Os pesquisadores da Qualys encontraram um bug na função string_printing (tls_in.sni), que é o escape \ "incorreto. Como resultado, a barra invertida é gravada no formato sem escape no arquivo de cabeçalho do spool de impressão. Além disso, esse arquivo com direitos privilegiados é lido pela função spool_read_header (), que leva ao estouro da pilha.


Vale ressaltar que, no momento, os desenvolvedores do Exim criaram vulnerabilidades de PoC com a execução de comandos em um servidor vulnerável remoto, mas ainda não está disponível ao público. Devido à facilidade de operação do bug, isso é apenas uma questão de tempo e bastante curta.


Um estudo mais detalhado da Qualys pode ser encontrado aqui .


Usando SNI no TLS


Usando SNI no TLS


Número de servidores públicos potencialmente vulneráveis


Segundo as estatísticas de um grande provedor de hospedagem E-Soft Inc, a partir de 1º de setembro, a versão 4.92 é usada em mais de 70% dos hosts em servidores alugados.


VersãoNúmero de servidoresPorcentagem
4.92.164711,28%
4,9237643674,22%
4,915817911,47%
4.957321,13%
4,89107002,11%
4,87141772,80%
4,8499371,96%
Outras versões255685,04%

Estatísticas da empresa E-Soft Inc


Se você recorrer ao mecanismo de pesquisa Shodan , de 5.250.000 no banco de dados do servidor:


  • cerca de 3.500.000 usam o Exim 4.92 (cerca de 1.380.000 usando SSL / TLS);
  • mais de 74.000 usam 4.92.1 (cerca de 25.000 usam SSL / TLS).

Assim, existem cerca de 1,5 milhão de servidores Exim potencialmente conhecidos e acessíveis publicamente.


Localizando servidores Exim em Shodan


Localizando servidores Exim em Shodan


Protecção


  • A opção mais fácil, mas não recomendada, é não usar o TLS, o que levará ao encaminhamento de mensagens de email em texto não criptografado.
  • Para evitar a exploração da vulnerabilidade, será mais preferível atualizar para o Exim Internet Mailer 4.92.2 .
  • Se não for possível atualizar ou instalar a versão corrigida, é possível definir a ACL na configuração do Exim para a opção acl_smtp_mail com as seguintes regras:

    # to be prepended to your mail acl (the ACL referenced # by the acl_smtp_mail main config option) deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}} deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}} 

Source: https://habr.com/ru/post/pt467089/


All Articles