Skip to main content

Vulnerabilidade de alta gravidade encontrada no libcurl e no curl (CVE-2023-38545)

Escrito por:
Hadas Bloom
Hadas Bloom
Tal Dromi
Micah Silverman
Micah Silverman
feature-curl-vuln

4 de outubro de 2023

0 minutos de leitura

Atualização: 11 de outubro de 2023

Hoje, às 6h UTC, os mantenedores do cURL lançaram as versões 8.4.0 do curl e do libcurl para mitigar um estouro de buffer de alta gravidade baseado em heap (prova de conceito e notificação inicial) que pode afetar sistemas com configurações e pré-condições específicas.

Essa vulnerabilidade de dia zero está presente em diversos ecossistemas de código aberto gerenciados e não gerenciados, incluindo, entre outros, C/C++, cargo, cocoapods, npm, NuGet, pip e pub, bem como diversas distribuições do Linux, como Alpine, Debian, RHEL e outras.

Essa é a primeira vulnerabilidade de alta gravidade encontrada no curl nos últimos anos (a mais recente ocorreu no início de 2021).

blog-curl-vuln-chart
Captura de tela da tabela de vulnerabilidades do cURL

As versões afetadas do curl/libcurl (desde março de 2020) são:

  • Versões afetadas: libcurl 7.69.0 até 8.3.0 (inclusive)

  • Versões não afetadas: libcurl inferior a 7.69.0, e 8.4.0 ou superiores

Com uma complexidade considerada alta, o exploit só pode ser acionado em cenários específicos. Como explicado na publicação do mantenedor, How I made a heap overflow in curl, a vulnerabilidade exige que a biblioteca vulnerável entre em contato com um servidor não controlado e comprometido (para ser explorada via redirecionamento HTTP) ou usando um URL controlado pelo invasor via proxy SOCKS5 com resolução de nome de host habilitada para acionar a condição vulnerável. Mesmo assim, é um estouro de heap de conjunto de caracteres limitado. Os estouros de heap em sistemas modernos são extremamente difíceis de transformar em execução arbitrária de código (ACE), e é por isso que são considerados um exploit de alta complexidade.

Agora que a vulnerabilidade está publicada e rastreada, você pode usar o recurso de relatórios da Snyk para encontrar os projetos afetados selecionando a organização e escolhendo Reports (Relatórios) na barra lateral. Selecione +Add Filter (+Adicionar filtro) abaixo dos detalhes do problema, selecione CVE e insira o número da CVE: CVE-2023-38545

blog-curl-vuln-filter
Restrinja a visualização à CVE-2023-38545

Este blog será atualizado com as novas informações que se tornarem disponíveis.

Atualização: 4 de outubro de 2023

Em 3 de outubro de 2023, Daniel Stenberg, o mantenedor de longa data e autor original do curl, publicou uma nota no LinkedIn e no X (antigo Twitter) sobre a disponibilização da versão 8.4.0 do curl, que terá uma correção para o que ele descreveu como "provavelmente o pior problema de segurança encontrado no curl em muito tempo".Esse problema deve ser levado a sério, pois os mantenedores do curl têm se manifestado sobre a minimização do risco associado à maioria das vulnerabilidades relatadas a respeito do curl no passado (um exemplo recente é o artigo CVE-2020-19909 is everything that is wrong with CVEs). Neste caso especial, eles destacam especificamente o risco e complementam: "prepare-se".

De acordo com os mantenedores, a versão corrigida, 8.4.0, será lançada em 11 de outubro de 2023 por volta das 6h UTC.

Hoje (4 de outubro de 2023) mais cedo, as CVEs que serão usadas para conter informações sobre vulnerabilidades foram anunciadas em uma discussão no GitHub.

A CVE-2023-38545será atribuída ao problema de alta gravidade que afeta o libcurl e o curl. Também será corrigido outro problema de baixa gravidade, atribuído à CVE-2023-38546 (que afeta apenas o libcurl).

O que sabemos agora?

O cURL é um projeto popular que fornece a biblioteca libcurl (usada para transferências de URL) e a ferramenta de linha de comando curl (usada para obter e enviar dados com URLs). O cURL foi lançado há 27 anos e tem sido usado amplamente desde 1996. 

Muitas, se não todas, distribuições Linux com suporte da Snyk usam libcurl. Portanto, o possível escopo do impacto é amplo.

Como se preparar para a correção

  • Verifique o uso de contêineres e pacotes com antecedência para avaliar sua exposição

  • Identifique os hosts com curl instalado e determine como a instalação foi feita

  • Use curl --version para verificar a versão do curl em uso

Avalie sua exposição

Antes do lançamento da versão corrigida do libcurl, você pode usar a Snyk para encontrar rapidamente os projetos e imagens de contêiner de código aberto que podem ser afetados. 

Navegue até as Dependencies (Dependências) na barra lateral da IU do aplicativo da Snyk. Na visualização de dependências, expanda o filtro "Dependencies" (Dependências) e digite "curl". Você pode selecionar versões individuais ou marcar o atalho Select all (Selecionar tudo) e clicar fora do filtro para ver os resultados. Serão exibidos todos os projetos que você tem com as versões selecionadas do libcurl. Você pode continuar navegando pelos projetos e dependências para avaliar sua exposição e priorizar o que deve ser corrigido primeiro.

Identifique hosts com o curl instalado

Por padrão, muitos sistemas operacionais vêm com o curl instalado. O local da instalação depende do sistema operacional e do método de instalação. Para determinar de imediato se o curl está instalado e no seu caminho, execute: curl --version

Se a execução não retornar um erro, você verá a versão do curl que foi encontrada no seu caminho. Ela pode estar instalada em mais de um local. Por exemplo, em computadores Apple recentes, ela fica por padrão em /usr/bin/curl, mas também pode ter sido instalada via homebrew. Você pode determinar onde está a versão do seu caminho executando which curl. Estes são alguns outros locais a verificar em sistemas operacionais baseados em macOS ou Linux:

  • /bin/curl

  • /usr/bin/curl

  • /usr/local/bin/curl

  • /opt/homebrew/opt/curl

Encontre todas as ocorrências que precisam ser atualizadas durante o preparo para a nova versão.

O que fazer após o lançamento da atualização

No dia do lançamento, planejado para 11 de outubro de 2023, por volta das 6h UTC, fique com tudo preparado para implementar a versão 8.4.0. Quando a nova versão estiver disponível, a Snyk terá mais detalhes e publicará as novidades sobre a vulnerabilidade neste blog (também incluiremos aqui links para os posts seguintes da série).

Atualize pacotes e contêineres vulneráveis

Use as informações reunidas na preparação e atualize os projetos e imagens de contêiner para obter a versão corrigida do libcurl. Ecossistemas e distribuições Linux diferentes podem aguardar para atualizar o uso dos pacotes afetados apenas após esse momento. Provavelmente, a disponibilidade de correções será faseada. Por exemplo, alguns mantenedores podem aguardar correções upstream antes de lançar atualizações para imagens de contêiner ou pacotes, enquanto outros podem corrigir no local. Em ambos os casos, a Snyk pode ajudar a encontrar e corrigir os problemas.

Atualize o curl nos dispositivos

Assim que uma versão corrigida do binário do curl estiver disponível, atualize as versões que você instalou. Publicaremos algumas dicas sobre como fazer essa atualização em outro post. Há várias maneiras de instalar o curl, e os métodos de atualização podem variar de acordo com o sistema operacional. 

O que a Snyk está fazendo?

A Snyk publicou um aviso temporário sobre o problema upstream de alta gravidade. Quando tivermos mais informações, o conteúdo dessas orientações será atualizado. 

Os especialistas em segurança da Snyk estão acompanhando ativamente as atualizações de lançamento, informações sobre vulnerabilidades, conversas nas redes sociais e outras fontes para manter os clientes informados sobre todas as novidades. Além disso, estamos conduzindo estudos para encontrar mais pacotes downstream que possam ter sido afetados. Vamos atualizar esta publicação conforme surjam mais informações relevantes.