Vulnerabilidade de hash fraco descoberta no crypto-js e no crypto-es (CVE-2023-46233 e CVE-2023-46133)
25 de outubro de 2023
0 minutos de leituraEm 18 de outubro, o pesquisador de segurança Zemnmez iniciou o processo de divulgação responsável de uma vulnerabilidade de “Uso de hash fraco” encontrada no crypto-js, uma biblioteca JavaScript de código aberto com padrões de criptografia cuja manutenção foi descontinuada. A vulnerabilidade também afeta o pacote crypto-es (para ES6 e TypeScript), e o pesquisador abriu uma issue semelhante solicitando que os responsáveis pela manutenção habilitassem divulgações privadas. Os repositórios crypto-js e crypto-es habilitaram os recursos “avisos de segurança” e “relato privado de vulnerabilidades” solicitados por Zemnmez. Desde então, descobrimos que a vulnerabilidade afeta todas as versões anteriores das bibliotecas. Não há indícios de que as vulnerabilidades afetem as bibliotecas de criptografia principais do Node.js.
Links rápidos
Entenda as vulnerabilidades do crypto-js e do crypto-es
A Snyk criou dois avisos sobre a vulnerabilidade:
SNYK-JS-CRYPTOJS-6028119 para
crypto-js(CVE-2023-46233)SNYK-JS-CRYPTOES-6032390 para
crypto-es(CVE-2023-46133)
Novas versões das bibliotecas crypto-es (2.1.0) e crypto-js (4.2.0) foram lançadas para corrigir a vulnerabilidade de segurança sinalizada por Zemnmez. O commit do crypto-es indica que houve uma alteração nos “parâmetros padrão para reforçar a segurança”. Embora também haja uma correção para a biblioteca crypto-js, é importante lembrar que, apesar de ela não estar marcada como deprecated, normalmente não recebe atualizações. Por isso, considere outras opções (veja mais abaixo).
Os avisos relacionados apresentam descrições semelhantes do problema:
“As versões afetadas deste pacote estão vulneráveis a ‘Uso de hash fraco’ devido às configurações de segurança inadequadas da classe
PBKDF2 (Algo), que usa SHA1 inseguro e tem um número baixo de iterações: 1. Essas configurações inseguras permitem que invasores realizem ataques de força bruta quandoPBKDF2 (Algo)é usado com os parâmetros padrão (o aviso do crypto-js também ressalta que a biblioteca não recebe mais manutenção).”
As correções alteraram o valor padrão do parâmetro iterations de 1 para 250000. O maior risco dessa vulnerabilidade é expor a ataques de força bruta os dados que foram submetidos a hash com essa funcionalidade, como senhas armazenadas. No caso de pbkdf2, os usos mais comuns seriam senhas e assinaturas armazenadas (por exemplo, para verificar arquivos). Quando pbkdf2 é usado para validar assinaturas, também pode ser possível — embora potencialmente caro — realizar um ataque de texto simples escolhido que resulte em uma assinatura criptográfica idêntica. Assim, o invasor pode criar uma entrada que passe pela validação criptográfica.
Como se preparar para corrigir o problema
Avalie sua exposição
Você pode usar a Snyk para encontrar rapidamente projetos de código aberto e imagens de contêiner afetados, mesmo antes do lançamento das versões corrigidas de crypto-js e crypto-es.
Acesse Dependências na barra lateral da interface do app Snyk. Na visualização Dependências, expanda o filtro de dependências e digite “crypto-js”. Selecione versões individuais ou marque o atalho Selecionar tudo. Em seguida, clique fora do filtro para ver os resultados e repita o processo para “crypto-es”. Isso mostrará todos os projetos que usam as versões de crypto-es selecionadas. Você também pode explorar os projetos e as dependências para avaliar sua exposição e priorizar o que deve corrigir primeiro.

Use o Snyk Advisor para avaliar a saúde dos seus pacotes
O Snyk Advisor ajuda você a encontrar o pacote ideal para seu próximo projeto. Uma pesquisa rápida por crypto-js mostra que, embora a biblioteca de criptografia tenha uma comunidade ativa, sua manutenção está inactive, além de mencionar pacotes semelhantes. (Esta captura de tela foi feita antes da divulgação e da atribuição das vulnerabilidades. Como o desenvolvedor publicou uma nova versão, o nível de manutenção agora é considerado sustainable.)

Acompanhe as melhorias no projeto principal ou no ecossistema
Os antigos responsáveis pela manutenção da biblioteca crypto-js, cuja manutenção foi descontinuada, atribuem essa decisão, em parte, ao fato de que “o desenvolvimento futuro do CryptoJS faria dele apenas um invólucro para o Crypto nativo”. Acompanhar a pontuação de saúde das bibliotecas que você usa pode ajudar a evitar vulnerabilidades de forma proativa, mas também é importante ficar por dentro das melhorias no próprio ecossistema. Para algumas equipes, a melhor opção nesse tipo de situação é verificar se a funcionalidade nativa do ecossistema pode substituir bibliotecas de terceiros.
Detecte as vulnerabilidades com a Snyk
Há várias maneiras de detectar as vulnerabilidades do crypto-js e do crypto-es com a Snyk. Com a Snyk CLI, você pode testar seus projetos localmente; também pode importá-los para a Snyk usando nossas integrações com SCM ou usar os relatórios da Snyk para pesquisar rapidamente crypto-js e crypto-es em todos os projetos que você já importou para a Snyk.
Teste seus projetos com a Snyk CLI
Snyk Container e Snyk Open Source podem alertar você sobre pacotes de sistema operacional ou bibliotecas de código aberto que dependem de versões vulneráveis do crypto-js ou do crypto-es. Para isso, use snyk container test e snyk test, respectivamente. A Snyk pode monitorar suas imagens de contêiner e seus projetos de código aberto para avisar você quando surgirem novas vulnerabilidades, como estas no crypto-js ou no crypto-es. Para isso, registre-os com snyk container monitor (para imagens de contêiner) ou snyk monitor (para o uso de bibliotecas de código aberto).
O exemplo a seguir mostra a Snyk CLI analisando um projeto Node.js. Neste caso, ela indica que o projeto usa a versão 4.0.0 do crypto-js e que você deve atualizá-la para a versão 4.2.0.
Teste seus projetos com a integração de SCM
Ao importar seu projeto para a Snyk usando nossas integrações de SCM compatíveis (GitHub, Bitbucket, GitLab e Azure Repos), um teste é iniciado automaticamente. Assim, você pode usar a interface da Snyk para identificar, priorizar e corrigir as vulnerabilidades do crypto-js e do crypto-es nos seus projetos.
Use o Snyk Reporting ou o Snyk Insights para detectar vulnerabilidades em todos os seus projetos
Clientes da Snyk com acesso aos relatórios da Snyk (plano Enterprise) e ao Snyk Insights podem identificar rapidamente o crypto-js ou o crypto-es nos projetos já importados e monitorados pela Snyk. As duas variantes da vulnerabilidade crypto- compartilham um CWE. Na página Insights, filtre pelo CWE em comum, CWE-328, como mostrado abaixo.

Se você encontrar o problema, poderá ver exatamente onde ele está sendo usado. Depois, clique no próprio projeto para obter mais informações sobre o problema e instruções de correção.
Priorize as correções com a Risk Score da Snyk
É provável que você encontre vários problemas relacionados ao crypto-js ou ao crypto-es nos seus projetos, o que pode dificultar a decisão sobre por onde começar as correções. A Snyk oferece vários recursos para ajudar na priorização, mas recomendamos usar nossa Risk Score.
A Risk Score da Snyk calcula diversos fatores de risco para ajudar você a identificar rapidamente os problemas que devem ser corrigidos primeiro. A pontuação considera vários sinais, como EPSS, maturidade de exploração, CVSS e tendências em redes sociais, entre outros. Com ela, você pode analisar rapidamente a lista de vulnerabilidades e priorizar as correções. No caso do crypto-js e do crypto-es, a pontuação varia conforme o contexto.

A pontuação aparece para cada problema relacionado ao crypto-js e ao crypto-es na página Projetos e também está disponível nos relatórios da Snyk.
Como corrigir as vulnerabilidades do crypto- em projetos de código aberto ou imagens base de contêiner
Atualize sua imagem base para uma tag mais recente com a vulnerabilidade corrigida. Nos ecossistemas compatíveis, você pode gerar solicitações de pull com as correções necessárias diretamente na Snyk.
Por exemplo, a Snyk recomenda imagens base alternativas de contêiner pela interface ou pela CLI. Quando você importa seu repositório de código-fonte por um SCM, como o GitHub, é possível automatizar a correção da imagem do contêiner. Para isso, a Snyk abre uma solicitação de pull que atualiza a entrada FROM do Dockerfile.

Também pode ser possível evitar o impacto da vulnerabilidade especificando o parâmetro iterations no uso de PBKDF2. Mas é igualmente importante garantir que você não esteja especificando também um valor baixo para iterations:
...pois isso reproduziria a vulnerabilidade anterior.
Próximas etapas para responder às vulnerabilidades do crypto-js e do crypto-es
Teste seus projetos com a Snyk usando os métodos descritos neste artigo. Para começar, crie uma conta gratuita na Snyk e, em seguida, importe e analise todos os projetos potencialmente afetados usando o assistente de importação.
Identifique as correções prioritárias para as vulnerabilidades do
crypto-jse docrypto-esusando a pontuação de prioridade ou o Insights (para clientes do plano Snyk Enterprise).Aplique as correções atualizando as dependências dos seus projetos de código aberto ou as imagens de contêiner para usar
crypto-jsna versão 4.2.0 ou posterior ecrypto-esna versão 2.1.0 ou posterior.Continue acompanhando o caso e consulte o Blog da Snyk para ficar por dentro das novidades. As equipes de segurança da Snyk atualizarão nossos recursos regularmente com as informações mais recentes.
Se você usa o
crypto-js, que não recebe mais manutenção, considere migrar para ocrypto-esou usar as funções integradas.
Comece a resolver desafios de capture the flag
Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.
