BigSig, uma vulnerabilidade no Mozilla NSS que pode permitir a execução de código

As notícias sobre identificando uma vulnerabilidade crítica (já listado em CVE-2021-43527) en o conjunto de bibliotecas criptográficas NSS (Serviços de segurança de rede) da Mozilla que pode levar à execução de código malicioso ao processar assinaturas digitais DSA ou RSA-PSS especificadas usando DER (Regras de codificação distintas).

O problema se manifesta em aplicativos que usam NSS para lidar com assinaturas digitais CMS, S / MIME, PKCS # 7 e PKCS # 12, ou ao verificar certificados em implantações TLS, X.509, OCSP e CRL. A vulnerabilidade pode surgir em vários aplicativos de cliente e servidor com suporte TLS, DTLS e S / MIME, clientes de email e visualizadores de PDF que usam a chamada NSS CERT_VerifyCertificate () para verificar assinaturas digitais.

LibreOffice, Evolution e Evince são mencionados como exemplos de aplicativos vulneráveis. Potencialmente, o problema também pode afetar projetos como Pidgin, Apache OpenOffice, Suricata, Curl, entre outros.

Ao mesmo tempo, a vulnerabilidade não aparece no Firefox, Thunderbird e Tor Browser, que usa uma biblioteca mozilla :: pkix separada para verificação, que também faz parte do NSS. O Navegadores baseados em Chrome (a menos que tenham sido compilados especificamente com NSS), que usava NSS até 2015, mas depois transportou para BoringSSL, eles não são afetados pelo problema.

A vulnerabilidade se deve a um bug no código de verificação de certificado no vfy_CreateContext função do arquivo secvfy.c. O erro se manifesta tanto quando o cliente lê o certificado do servidor como quando o servidor processa os certificados do cliente.

Ao verificar uma assinatura digital codificada por DER, o NSS decodifica a assinatura em um buffer de tamanho fixo e passa esse buffer para o módulo PKCS # 11. Durante o pós-processamento, para assinaturas DSA e RSA-PSS, o tamanho é verificado incorretamente, resultando no qual leva a um estouro do buffer alocado para a estrutura VFYContextStr, se o tamanho da assinatura digital exceder 16384 bits (2048 bytes são alocados para o buffer, mas não é verificado se a assinatura pode ser maior).

O código que contém a vulnerabilidade remonta a 2003, mas não era uma ameaça até a refatoração em 2012. Em 2017, o mesmo erro foi cometido ao implementar o suporte RSA-PSS. Para realizar um ataque, não é necessária a geração intensiva de recursos de determinadas chaves para obter os dados necessários, uma vez que o estouro ocorre na etapa anterior à verificação da validade da assinatura digital. A parte fora dos limites dos dados é gravada em uma área da memória que contém ponteiros de função, facilitando a criação de exploits funcionais.

A vulnerabilidade foi identificada por pesquisadores do Google Project Zero durante experimentos com novos métodos de teste de difusão e é uma boa demonstração de como vulnerabilidades triviais podem passar despercebidas por um longo tempo em um projeto conhecido amplamente testado.

Quanto a principais problemas para os quais o problema passou despercebido durante muito tempo:

  • A biblioteca da unidade NSS e os testes de difusão não foram executados em sua totalidade, mas no nível de componente individual.
  • Por exemplo, o código para decodificar DER e processar certificados foi verificado separadamente; No decurso do fuzzing, pode muito bem ter sido obtido um certificado, conduzindo à manifestação da vulnerabilidade em questão, mas a sua verificação não atingiu o código de verificação e o problema não foi revelado.
  • Durante os testes de difusão, limites estritos foram definidos no tamanho da saída (10,000 bytes) na ausência de tais limitações no NSS (muitas estruturas no modo normal podem ser maiores do que 10,000 bytes, portanto, para identificar problemas, são necessários mais dados de entrada ) Para a verificação completa, o limite deve ser de 2 24 -1 bytes (16 MB), que corresponde ao tamanho máximo de um certificado permitido em TLS.
  • Equívoco sobre a cobertura de código por testes de difusão. O código vulnerável foi testado ativamente, mas usando fuzers, que não foram capazes de gerar os dados de entrada necessários. Por exemplo, o fuzzer tls_server_target usava um conjunto predefinido de certificados prontos para uso, que limitava a verificação do código de verificação do certificado a apenas mensagens TLS e alterações de estado de protocolo.

Finalmente, Vale a pena mencionar que o problema com o codinome BigSig foi corrigido no NSS 3.73 e NSS ESR 3.68.1 e as atualizações da solução em forma de pacote já foram lançadas nas diferentes distribuições: Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD, etc.

Se você quiser saber mais sobre isso, pode consultar o seguinte link.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: AB Internet Networks 2008 SL
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.