Skip to main content

Como atualizar o cURL

Escrito por:
Micah Silverman
Micah Silverman
wordpress-sync/feature-screenshot-mockup

11 de outubro de 2023

0 minutos de leitura

Em 3 de outubro de 2023, a equipe do curl fez um anúncio prévio de uma correção pendente para uma vulnerabilidade de alta gravidade que afeta o libcurl e o curl

Os produtos da Snyk ajudam a identificar e corrigir pacotes e contêineres vulneráveis, mas essa vulnerabilidade afeta o curl, uma ferramenta de linha de comando usada diariamente por muitos desenvolvedores. Além disso, o curl é distribuído com muitos sistemas operacionais. Portanto, achamos que seria útil oferecer algumas dicas de como atualizar o seu sistema.

Como atualizar o cURL no seu SO

Nesta seção, sugerimos dicas de verificação de versão e atualização para diferentes sistemas operacionais. Quando a versão 8.4.0 for lançada, esse conhecimento antecipado ajudará você durante a atualização.

Atualização do cURL no macOS

Observação: esta seção cobre o uso da versão mais recente do curl na versão mais recente do macOS executado em um Mac M1. Para Macs Intel ou com versões mais antigas do macOS, a experiência pode ser diferente.

O curl é instalado por padrão no macOS Ventura (13.5.2) e superior. No entanto, a versão instalada é antiga (8.1.2). A Snyk recomenda instalar uma versão mais recente e defini-la como padrão, já que a versão integrada do curl tem vulnerabilidades conhecidas.

A boa notícia é que, ao atualizar para a versão mais recente seguindo estas instruções, você poderá atualizar imediatamente para o curl 8.4.0 for lançado.

O gerenciador de pacotes de terceiros mais popular para o macOS é o Homebrew. A versão mais recente do curl no Homebrew é a 8.3.0, lançada em meados de setembro.

Instale o curl com o Homebrew executando:

brew install curl

O processo ainda não acabou. Essa é uma instalação chamada "keg only". O Homebrew toma cuidado para não sobrescrever nem substituir os utilitários padrão que acompanham o macOS. Portanto, você precisa especificar explicitamente que deseja usar a versão do curl instalada pelo Homebrew em vez da versão padrão do sistema. Para fazer isso, verifique se o caminho do executável do Homebrew é o primeiro no caminho do sistema. No macOS, o local padrão para instalações do Homebrew é /opt/homebrew (para verificar o caminho do homebrew, use o comando brew --prefix). Você pode prefixar o caminho com a versão do Homebrew com o seguinte comando (usando seu prefixo brew):

echo 'export PATH="/opt/homebrew/opt/curl/bin:$PATH"' >> ~/.zshrc

Observação: versões anteriores do Homebrew usavam um caminho diferente, e versões anteriores do macOS usavam bash em vez de zsh.

Para confirmar que está usando a versão correta do curl, abra uma nova janela do Terminal e execute:

curl --version

Você deve ver algo assim:

curl 8.3.0 (aarch64-apple-darwin22.6.0) libcurl/8.3.0 (SecureTransport) OpenSSL/3.1.3 zlib/1.2.11 brotli/1.1.0 zstd/1.5.5 libidn2/2.3.4 libssh2/1.11.0 nghttp2/1.56.0 librtmp/2.3 OpenLDAP/2.6.6
Release-Date: 2023-09-13

Quando o Homebrew for atualizado com a versão 8.4.0 do curl, execute novamente o comando brew install curl para obter a versão mais recente. 

Atualizaremos esta publicação quando a versão 8.4.0 for lançada para o Homebrew.

Atualização do cURL no Windows

O Windows 10 (build 1803) ou acima é fornecido com o curl pré-instalado, mas com uma versão mais antiga. Para testar se você tem o curl e qual versão está usando, abra o Prompt de Comando. Clique no menu "Iniciar" e digite cmd no teclado. No Prompt de Comando, insira curl --version para verificar se o curl está instalado e qual sua versão. As versões anteriores à 8.4.0 precisam ser atualizadas.

C:\Users\bc>curl --version
curl 8.0.1 (Windows) libcurl/8.0.1 Schannel WinIDN
Release-Date: 2023-03-20
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets

Também é importante conferir se você está usando a versão pré-instalada do curl no Windows ou uma versão com instalação separada. Para fazer isso, insira where curl no Prompt de Comando. Se o caminho mostrado no resultado incluir C:\\Windows\\System32, essa é a versão pré-instalada do curl:

C: \Users\bc>where curl
C: \Windows\System32\curl.exe

Depois de identificar se o curl está instalado, qual a versão usada e se essa versão é a pré-instalada ou foi instalada separadamente, você terá todas as informações necessárias para atualizar para a versão mais recente. A versão pré-instalada do curl é fornecida e gerenciada pela Microsoft, ou seja, só pode ser atualizada com segurança pelo Windows Update. Para verificar se há uma atualização oficial do Windows, clique no menu "Iniciar", digite "Windows Update" e selecione a opção "Verificar se há atualizações". O aplicativo "Configurações" abrirá e mostrará o Windows Update. Clique no botão "Verificar se há atualizações" para obter as atualizações mais recentes lançadas pela Microsoft. Provavelmente, uma delas incluirá a versão corrigida do curl.

Fora do Windows Update oficial, há algumas opções para atualizar para a versão mais recente e usá-la em vez da versão pré-instalada. Todas essas opções envolvem a modificação das variáveis de ambiente PATH. Se você não se sentir confortável fazendo isso, aguarde pela atualização no Windows Update.

A instalação de uma versão mais recente do curl no Windows pode ser feita de várias maneiras: 

A maneira mais rápida e fácil de instalar ou atualizar o curl no Windows é usando o Winget.

Instalação do cURL com o Winget

No Prompt de Comando, execute winget install curl.curl. O curl será instalado usando o diretório de pacotes nativo do Winget e adicionado à variável de ambiente "User Path" (Caminho do usuário). No entanto, quando você executar curl --version, ele será executado com a versão pré-instalada do curl e não com a versão recém-instalada. 

Encontre e copie o valor de curl que o Winget adicionou à sua variável "User Path" (Caminho do usuário). Em seguida, adicione esse valor à variável System Path (Caminho do sistema) como prioridade principal (acima de "C:\\Windows\\system32"). Deve ficar mais ou menos assim:

blog-fix-curl-environ-var

Quando terminar, volte ao Prompt de Comando e execute refreshenv para que ele reconheça as alterações na variável de ambiente. Em seguida, execute curl --version para verificar se agora a versão mais recente do curl que o Winget instalou para você está sendo usada.

Instalação do cURL com o Chocolatey

Se ainda não instalou o Chocolatey, faça isso agora. Saiba mais sobre a instalação na documentação do Chocolatey. Após a instalação, você pode executar o seguinte comando no Prompt de Comando/Terminal como administrador:

choco install curl
blog-fix-curl-admin-command

Mas ainda não terminamos. Se você executar curl --version, perceberá que a versão anterior/mais antiga ainda é relatada. Para corrigir isso, é preciso atualizar as variáveis de ambiente do sistema. Clique no menu "Iniciar", digite Editar as variáveis de ambiente do sistema e selecione a primeira opção. Quando a janela "Propriedades do sistema" abrir, clique no botão Variáveis de Ambiente…, que abrirá uma nova janela intitulada Variáveis de Ambiente. Nesta janela, procure a seção Variáveis do sistema e encontre a entrada para Path na coluna Variável.

blog-fix-curl-system-var-path

Clique no botão Editar… para editar o valor e encontre a entrada do Chocolatey como C:\\ProgramData\\chocolatey\\bin. Selecione essa entrada e use o botão Mover para Cima para deslocá-la até o topo da lista e clique em OK.

Volte ao Prompt de Comando/Terminal, insira refreshenv para atualizar as variáveis de ambiente com as alterações que você fez. Em seguida, execute novamente curl --version. Agora você verá que a versão atualizada está em uso. Também é possível executar where curl para ver as duas instâncias do curl instaladas na máquina: a primeira é a localização da nova instalação, e a segunda mostra a localização da instalação do sistema. Agora você está com tudo pronto para começar a usar a nova versão do curl.

C:\Users\bc>where curl
C:\ProgramData\chocolatey\bin\curl.exe
C:\Windows\System32\curl.exe

Atualização do cURL no Linux

Se executar curl --version e determinar que está usando uma versão vulnerável, você poderá atualizá-la no sistema assim que a versão corrigida estiver disponível.

A atualização do curl no Linux depende muito de qual gerenciador de pacotes sua distribuição usa. Estes comandos devem dar uma ideia de como proceder de acordo com a distribuição. De modo geral, você provavelmente vai instruir o gerenciador de pacotes para atualizar o cache do índice de pacotes e, em seguida, instalar uma nova versão. Mais especificamente, estes são os prováveis passos de acordo com a distribuição:

  • Para distribuições baseadas em apt, como Debian ou Ubuntu:

    • Atualize os índices: apt-get update

    • Instale a versão mais recente: apt-get upgrade curl

  • Para pacotes do snap (principalmente Ubuntu):

    • Instale a versão mais recente: snap install curl

  • Para distribuições que usam dnf, como RHEL, Rocky e Fedora:

    • Verifique se há atualizações: dnf check-update

    • Instale a versão mais recente: dnf install curl

  • E para apk no Alpine:

    • Atualize os índices: apk update

    • Instale a versão mais recente: apk add curl

Para obter uma versão atualizada, é necessário que as diversas distribuições atualizem seus repositórios de pacotes. Após executar o comando apropriado para sua distribuição, se você executar curl --version e a versão não for a 8.4.0, verifique o caminho para confirmar se não há outra versão instalada com prioridade superior. Caso prefira, use curl - Download para encontrar um binário compilado para sua plataforma.

$ curl --version
curl 7.81.0
$ which curl
/home/ubuntu/bin/curl

$ echo $PATH
/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

$ /usr/bin/curl --version
curl 8.4.0

No exemplo acima, uma cópia da versão mais antiga está em ~/bin/curl. Como ela é a primeira no caminho, é a versão utilizada. Remova a versão mais antiga ou tire-a do caminho para resolver.

Está com disposição? Compile o curl você por conta própria!

O build-from-source mais recente gera a versão 8.4.0-DEV. Não há garantia de que o código mais recente tenha a correção para a alta vulnerabilidade, mas, se você souber compilar do código-fonte, poderá estar entre as primeiras pessoas a obter a versão mais recente em 11 de outubro.

Nesta seção, vamos ver o processo de compilação em um Mac M1 com o macOS Ventura. A equipe de desenvolvedores, liderada por Daniel Stenberg (badger no GitHub), fez um trabalho notável para facilitar a compilação do curl em diversos sistemas operacionais.

Na documentação de instalação, há uma seção sobre a compilação e instalação para Mac que funcionou perfeitamente no nosso caso. Observação: para que isso funcione, você precisa ter as ferramentas de linha de comando do Xcode instaladas.

Para compilar o curl, executei:

autoreconf -fi
export ARCH=arm64
export SDK=macosx
export DEPLOYMENT_TARGET=13.0
export CFLAGS="-arch $ARCH -isysroot $(xcrun -sdk $SDK --show-sdk-path) -m$SDK-version-min=$DEPLOYMENT_TARGET"
./configure --host=$ARCH-apple-darwin --prefix $(pwd)/artifacts --with-secure-transport
make -j8

Depois confirmei a compilação:

./src/.libs/curl --version

curl 8.4.0-DEV (aarch64-apple-darwin) libcurl/8.4.0-DEV SecureTransport zlib/1.2.11
Release-Date: [unreleased]

Você pode colocar o curl recém-compilado em um diretório local ~/bin ou outro que preceda o curl padrão no seu caminho até que sua distribuição ou sistema operacional disponibilize uma atualização. Assim que uma atualização estiver disponível, sugerimos adotá-la e remover as cópias desatualizadas para evitar futuras vulnerabilidades.