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 que qualquer pessoa envie mensagens ICMPv6 do tipo 130 ou 131 e explore um vazamento de memória no kernel que faz com que o host fique sem memória. Esta vulnerabilidade é notável porque um atacante pode causar uma negação de serviço para todo o sistema ao enviar apenas alguns pacotes.
Causa Raiz - Para encontrar a causa raiz, o melhor lugar para procurar é o próprio git comete história. O autor da correção inicialmente encontrou isto enquanto investigava porque 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 deixando cair skbs, que são as estruturas de dados usadas pelo kernel do linux para guardar informações sobre pacotes. Esta vulnerabilidade ainda está sendo analisada.
Há algumas advertências quanto a esta vulnerabilidade:
- Isto não afeta nenhuma versão do Red Hat Enterprise Linux, pois os kernels disponíveis são anteriores à data 5.13.
- O ramo estável foi afetado.
A única possibilidade de corrigir esta vulnerabilidade é atualizar o núcleo. Um patch para corrigir esta vulnerabilidade já foi aplicado a montante.
Apache Assessoria de Segurança
A vulnerabilidade em que nos concentraremos principalmente é o CVE-2022-23943, mas primeiro vamos resumir rapidamente os outros CVEs na assessoria. As outras vulnerabilidades a serem destacadas nesta consultoria são o CVE-2022-22720, uma vulnerabilidade que permite o contrabando de solicitações http. Há também o CVE-2022-22721, que permite estouros inteiros em sistemas de 32 bits se o LimitXMLRequestBody no httpd.conf for maior que 350MB. O CVE-2022-22719 causa uma falha devido ao mod_lua ter variáveis não-inicializadas.
mod_sed é um módulo opcional Apache que não está instalado ou habilitado por padrão na maioria dos sistemas Linux. É usado para substituir texto em páginas web que Apache serve usando um padrão, similar a como o comando sed funciona.
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 é acionada pelo envio de grandes quantidades de dados através dos filtros mod_sed. Se o pacote enviado for maior que 2GB, um transbordo de inteiro assinado ocorrerá e causará um colapso. Se mais de 4GB forem enviados, então um estouro de número inteiro também ocorrerá.
Causa Raiz - A causa raiz é da função appendmem_to_linebuf quando a memcpia é chamada. A correçã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 o uso 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 ser instalado e configurado manualmente. Normalmente não é puxado como uma dependência para outros pacotes.
As remediações recomendadas para esta vulnerabilidade incluem:
- Atualizando Apache para uma versão maior que 2.4.52
- Desabilitando o mod_sed
Uma mitigação parcial pode ser aplicada definindo LimitRequestBody 1073741824 em httpd.conf. Entretanto, isto somente bloqueará clientes maliciosos de enviar um pedido maior que 2GB. Um atacante ainda pode ser capaz de acionar o mod_sed para ler um arquivo maior que 2GB, fazendo com que a exploração ocorra.
Negação de serviço na OpenSSL
OpenSSL é uma biblioteca e um programa de linha de comando para gerenciar, criar, verificar e assinar certificados. É uma das mais antigas bibliotecas de criptografia de código aberto e é usada quase que universalmente em todos os sistemas linux.
OpenSSL usa a função BN_mod_sqrt(), que calcula uma raiz quadrada modular. Ela contém um bug onde os moduli não-prime podem fazer loop para sempre. Ele é usado 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 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 analisa este tipo de chaves, OpenSSL tentará expandir o ponto comprimido, tentando computar um modulo raiz quadrada o p principal sobre o qual a curva é definida. Entretanto, a primalidade do p não é verificada em nenhum lugar, nem mesmo no BN_mod_sqrt() para o qual ele é um requisito; assim, um bug na implementação causará um loop infinito devido ao p não ser prime como esperado. A consultoria para OpenSSL pode ser encontrada aqui. Atualmente, 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 atendidas:
- Um atacante gera um certificado usando criptografia de curva elíptica com certos parâmetros inválidos, ou modifica um certificado existente.
- Um atacante precisa obter o OpenSSL para verificar o certificado, seja através de acesso local, ou fornecendo-o a uma aplicação web usando mTLS que verifica os certificados fornecidos pelo usuário.
Comentários