Como atualizar o cURL
Micah Silverman
11 de outubro de 2023
0 minutos de leituraEm 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:
Use um gerenciador de pacotes do Windows (como o Homebrew para macOS):
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:
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
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.
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.
Primeiros passos com Capture the Flag
Saiba como resolver desafios de Capture the Flag assistindo ao nosso workshop virtual de conceitos básicos sob demanda.