Avançar para o conteúdo principal
BlogSegurançaLinode Security Digest 20 - 26 de Março de 2022

Linode Security Digest 20 - 26 de março de 2022

Linode Security Digest

Esta semana, discutiremos algumas vulnerabilidades de alta severidade no kernel Linux, Apache, e openssl.

ICMPv6 Negação de Serviço no Kernel Linux

CVE-2022-0742 permite a qualquer pessoa enviar mensagens ICMPv6 do tipo 130 ou 131 e explorar uma fuga de memória no kernel que faz com que o hospedeiro fique sem memória. Esta vulnerabilidade é digna de nota porque um atacante pode causar uma negação de serviço para todo o sistema enviando apenas alguns pacotes.

Causa Raiz - Para encontrar a causa raiz, o melhor lugar para procurar é o próprio git cometer história. O autor da correcção encontrou inicialmente isto enquanto investigava porque é que a função synchronize_net() foi adicionada dentro do ipv6_mc_down(). O autor do commit descobriu que igmp6_event_query() e igmp6_event_report() estavam a deixar cair skbs, que são as estruturas de dados utilizadas pelo kernel do linux para guardar informação sobre pacotes. Esta vulnerabilidade ainda está a ser analisada.

Há algumas advertências quanto a esta vulnerabilidade: 

  • Isto não afecta quaisquer versões do Red Hat Enterprise Linux, uma vez que os kernels disponíveis são anteriores à data 5.13.
  • O ramo estável foi afectado.

A única possibilidade de corrigir esta vulnerabilidade é através da actualização do núcleo. Um remendo para corrigir esta vulnerabilidade já foi aplicado a montante.

Apache Assessoria de Segurança

A vulnerabilidade em que nos vamos concentrar principalmente é o CVE-2022-23943, mas primeiro vamos rapidamente resumir os outros CVEs no aconselhamento. As outras vulnerabilidades a serem destacadas neste aconselhamento são o CVE-2022-22720, uma vulnerabilidade que permite o contrabando de pedidos http. Há também o CVE-2022-22721, que permite transbordos inteiros em sistemas de 32 bits se o LimitXMLRequestBody em httpd.conf for superior a 350MB. O CVE-2022-22719 causa uma falha devido a mod_lua ter variáveis não inicializadas. 

mod_sed é um módulo opcional Apache que não está instalado ou activado por defeito na maioria dos sistemas Linux. É utilizado para substituir texto em páginas web que Apache serve usando um padrão, semelhante a como funciona o comando sed.

CVE-2022-23943 é uma vulnerabilidade de corrupção da memória que pode causar uma DoS. A vulnerabilidade de corrupção da memória vem do mod_sed. A exploração é despoletada pelo envio de grandes quantidades de dados através de filtros mod_sed. Se o pacote enviado for maior do que 2GB, ocorrerá um transbordo de inteiro assinado e causará um crash. Se forem enviados mais de 4GB, ocorrerá também um transbordamento de números inteiros.

Causa Raiz - A causa raiz é da função appendmem_to_linebuf quando a memcpy é chamada. A correcção que foi aplicada alterou o buffer referenciado nos parâmetros de funções para usar apr_size_t em vez de int. Apr_size_t permite a utilização de um int de 4 bytes assinado, e 8 bytes sem assinatura.

Há algumas advertências quanto a esta vulnerabilidade:

  • mod_sed é raramente utilizado; e
  • mod_sed precisa de ser instalado e configurado manualmente. Normalmente não é puxado como uma dependência para outros pacotes.

As remediações recomendadas para esta vulnerabilidade incluem:

  • Actualização de Apache para uma versão superior a 2.4.52
  • Desactivar mod_sed

Uma mitigação parcial pode ser aplicada através da definição de LimitRequestBody 1073741824 em httpd.conf. No entanto, isto só irá bloquear clientes maliciosos de enviarem um pedido superior a 2GB. Um atacante pode ainda ser capaz de desencadear mod_sed para ler um ficheiro superior a 2GB, fazendo com que a exploração ocorra.

Negação de serviço em OpenSSL

OpenSSL é uma biblioteca e um programa de linha de comando para gerir, criar, verificar, e assinar certificados. É uma das mais antigas bibliotecas de criptografia de código aberto e é utilizada quase universalmente em todo o lado em sistemas linux.

OpenSSL utiliza a função BN_mod_sqrt(), que calcula uma raiz quadrada modular. Contém um bug onde os moduli não-prime podem fazer loop para sempre. É utilizado na verificação de certificados que contêm chaves públicas de curva elíptica em forma comprimida ou parâmetros de curva elíptica explícitos com um ponto base codificado em forma comprimida. Para elaborar um certificado para causar DoS, o atacante precisa de modificar um certificado que usa uma curva elíptica com algo como um editor hexadecimal para torná-lo matematicamente inválido.

Causa Raiz - O núcleo da vulnerabilidade está na análise das chaves EC com pontos em formato comprimido; enquanto que ao analisar este tipo de chaves, OpenSSL tentará expandir o ponto comprimido, tentando calcular um modulo raiz quadrada o p principal sobre o qual a curva é definida. No entanto, a primazia do p não é verificada em lado nenhum, nem mesmo no BN_mod_sqrt() para o qual é um requisito; assim, um bug na implementação causará um loop infinito devido ao p não ser prime como esperado. O aconselhamento para OpenSSL pode ser encontrado aqui. Actualmente, as versões corrigidas são:

  • OpenSSL 3.0.2
  • OpenSSL 1.1.1n  
  • OpenSSL 1.0.2zd 

Além disso, há algumas advertências para explorar com sucesso esta vulnerabilidade e as seguintes condições devem ser satisfeitas:

  • Um atacante gera um certificado utilizando criptografia de curva elíptica com certos parâmetros inválidos, ou modifica um certificado existente.
  • Um atacante precisa de obter OpenSSL para verificar o certificado, quer através de acesso local, quer fornecendo-o a uma aplicação web utilizando mTLS que verifica os certificados fornecidos pelo utilizador.

Comentários

Deixe uma resposta

O seu endereço de correio electrónico não será publicado. Os campos obrigatórios estão marcados com *