Skip to main content

Mise à jour de curl, mode d’emploi

Écrit par:
Micah Silverman
Micah Silverman
wordpress-sync/feature-screenshot-mockup

11 octobre 2023

0 minutes de lecture

Le 3 octobre 2023, l’équipe de curl a annoncé la disponibilité prochaine d’un correctif pour une vulnérabilité de gravité élevée touchant à la fois libcurl et curl

Les produits de Snyk vous aident à identifier et corriger les paquets et conteneurs vulnérables, mais cette faille est particulière, car elle touche curl, un outil en ligne de commande que de nombreux développeurs utilisent au quotidien. Cet outil est par ailleurs préinstallé sur de nombreux systèmes d’exploitation, et nous avons donc estimé qu’il serait intéressant de vous montrer comment le mettre à jour.

Mise à jour de curl

Dans cette section, nous allons vous expliquer comment identifier la version installée et la mettre à jour pour différents systèmes d’exploitation. Ces informations en main, vous serez prêt à passer à l’action une fois la version 8.4.0 disponible.

Mise à jour de curl sous macOS

Remarque : cette section concerne la version la plus récente de curl sur la version la plus récente de macOS sur un ordinateur doté d’une puce M1. Pour les Mac dotés d’une puce Intel ou les versions antérieures de macOS, le processus peut être différent.

À partir de macOS Ventura (13.5.2), curl est installé par défaut. Toutefois, il s’agit d’une version assez ancienne (8.1.2). Snyk vous recommande de passer sur une version plus récente et de la définir comme version par défaut, car la version intégrée présente des vulnérabilités connues.

La bonne nouvelle, c’est qu’en suivant ces instructions pour passer sur la dernière version actuelle, vous serez paré pour le passage à la 8.4.0 une fois qu’elle sera disponible.

Le gestionnaire de paquets tiers le plus populaire pour macOS s’appelle Homebrew. La dernière version de curl proposée par cet outil à l’heure actuelle est la 8.3.0, publiée à la mi-septembre.

Installez curl avec Homebrew en exécutant la commande suivante :

brew install curl

Mais attention, vous n’en avez pas encore terminé. Cette installation est appelée « keg only ». Homebrew veille à ne pas écraser les utilitaires fournis par défaut avec macOS. Par conséquent, vous devez indiquer explicitement que vous souhaitez utiliser la version de curl installée par Homebrew et pas celle du système. Pour ce faire, vérifiez que le chemin de l’exécutable de Homebrew est le premier dans votre chemin système. L’emplacement d’installation de Homebrew par défaut sous macOS est /opt/homebrew (vous pouvez le vérifier avec la commande brew --prefix). Vous pouvez préfixer ce chemin à la variable de chemin à l’aide de la commande suivante (utilisez votre préfixe Homebrew) :

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

Remarque : les versions précédentes de Homebrew utilisaient un autre chemin, et les versions précédentes de macOS utilisaient bash et non zsh.

Vous pouvez confirmer que vous utilisez la bonne version de curl en ouvrant une nouvelle fenêtre de terminal et en exécutant la commande suivante :

curl --version

Vous devriez obtenir le résultat suivant :

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

Lorsque la version 8.4.0 sera disponible sur Homebrew, il vous suffira d’exécuter une nouvelle fois la commande brew install curl pour la récupérer. 

Nous mettrons à jour cet article quand cela sera le cas.

Mise à jour de curl sous Windows

Windows 10 (build 1803) et les versions ultérieures intègrent curl d’origine, mais dans une version assez ancienne. Pour vérifier si curl est installé et déterminer sa version, ouvrez l’invite de commandes. Cliquez sur le menu Démarrer et saisissez cmd. Dans l’invite de commandes, saisissez curl --version. Si la version affichée est inférieure à la 8.4.0, vous allez devoir procéder à une mise à jour.

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

Vous devez également vérifier si vous utilisez la version préinstallée sous Windows ou une version installée par la suite. Pour cela, saisissez where curl dans l’invite de commande. Si le chemin inclut C:\\Windows\\System32, il s’agit de la version préinstallée de curl :

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

Une fois que vous savez si vous disposez de curl, quelle version vous utilisez et s’il s’agit d’une installation préintégrée ou d’une installation ultérieure, vous pouvez passer à la mise à jour. La version préinstallée de curl est gérée par Microsoft et vous pouvez donc passer sans problème par Windows Update pour faire la mise à jour. Pour rechercher une mise à jour officielle de Windows, cliquez sur le menu Démarrer, saisissez « Windows Update », puis sélectionnez l’option Rechercher les mises à jour. L’application Paramètres s’ouvre dans la vue Windows Update. Vous pouvez alors cliquer sur le bouton Rechercher des mises à jour pour récupérer les mises à jour les plus récentes publiées par Microsoft. L’une d’entre elles inclura probablement la version corrigée de curl.

Vous pouvez également migrer vers la version la plus récente et l’utiliser en lieu et place de la version préinstallée sans passer par Windows Update. Pour cela, vous devrez modifier vos variables d’environnement PATH. Si vous ne comprenez pas totalement les implications de ces modifications, attendez la disponibilité d’une mise à jour officielle, comme expliqué ci-dessus.

Plusieurs options s’offrent à vous pour installer une version plus récente de curl sous Windows : 

La solution la plus simple et la plus rapide est de passer par Winget.

Installation de curl via Winget

Dans l’invite de commandes, exécutez winget install curl.curl. Cette commande installera curl à partir de l’annuaire de paquets natif de winget et l’ajoutera automatiquement à votre variable d’environnement utilisateur PATH. Néanmoins, la commande curl --version se référera à la version préinstallée de curl et non pas à cette nouvelle version. 

Localisez la valeur curl ajoutée par Winget à votre variable d’utilisateur PATH et copiez-la. Ensuite, ajoutez-la à la variable Path en position prioritaire (au-dessus de « C:\\Windows\\system32 »). Vous devriez obtenir l’organisation suivante :

blog-fix-curl-environ-var

Une fois cette opération effectuée, revenez à l’invite de commandes et exécutez la commande refreshenv pour que vos modifications soient prises en compte. Ensuite, exécutez curl --version pour vous assurer que la dernière version de curl installée par Winget est bien utilisée.

Installation de curl via Chocolatey

Si ce n’est pas déjà fait, commencez par installer Chocolatey. Pour plus de détails sur cette opération, consultez la documentation de l’utilitaire. Une fois le logiciel prêt à l’utilisation, exécutez la commande suivante depuis l’invite de commandes en tant qu’administrateur :

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

La procédure n’est pas terminée pour autant. Si vous exécutez la commande curl --version, vous noterez qu’elle fait encore référence à la version précédente. Pour corriger ce problème, vous devez mettre à jour vos variables d’environnement système. Cliquez sur le bouton Démarrer, saisissez Modifier les variables d’environnement système, puis choisissez la première option proposée. Une fois la fenêtre Propriétés système ouvertes, cliquez sur le bouton Variables d’environnement… Une nouvelle fenêtre intitulée Variables d’environnement s’ouvre. Dans cette fenêtre, cherchez la section Variables système, puis l’entrée Path dans la colonne Variable.

blog-fix-curl-system-var-path

Cliquez sur le bouton Modifier… pour modifier la valeur, puis recherchez l’entrée Chocolatey C:\\ProgramData\\chocolatey\\bin. Sélectionnez-la, puis utilisez le bouton Déplacer vers le haut pour la placer en première position de la liste. Enfin, cliquez sur OK.

De retour dans l’invite de commandes, saisissez refreshenv pour que le système tienne compte des modifications que vous avez apportées à vos variables d’environnement. Ensuite, exécutez de nouveau curl --version. Cette fois, la version mise à jour devrait être utilisée. Vous pouvez également exécuter la commande where curl pour visualiser les deux instances installées de curl sur votre machine : la première doit correspondre à l’emplacement d’installation de la nouvelle version, et la deuxième à celle du système. Vous pouvez désormais utiliser la nouvelle version de curl.

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

Mise à jour de curl sous Linux

Si vous exécutez la commande curl --version et constatez que vous disposez d’une version vulnérable, vous pourrez la mettre à jour une fois la version corrigée disponible.

La procédure de mise à jour sous Linux dépend en grande partie du gestionnaire de paquets de votre distribution. Les commandes suivantes devraient vous donner une idée de la marche à suivre. Quel que soit le gestionnaire utilisé, vous devrez sans doute lui demander d’actualiser son cache, puis d’installer une nouvelle version. Voici la procédure pour quelques distributions :

  • Pour les distributions utilisant apt, comme Debian ou Ubuntu :

    • Mise à jour des caches : apt-get update

    • Installation de la dernière version : apt-get upgrade curl

  • Pour les paquets snap (principalement pour Ubuntu) :

    • Installation de la dernière version : snap install curl

  • Pour les distributions utilisant dnf, comme RHEL, Rocky et Fedora :

    • Recherche de mises à jour : dnf check-update

    • Installation de la dernière version : dnf install curl

  • Et enfin pour apk sous Alpine :

    • Mise à jour des caches : apk update

    • Installation de la dernière version : apk add curl

Notez que pour obtenir une version mise à jour, la plupart des distributions devront mettre à jour leurs référentiels de paquets. Si après l’exécution de la commande correspondant à votre distribution, la commande curl --version, ne fait pas référence à la version 4.8.0, vérifiez le chemin pour vous assurer qu’aucune autre version installée n’est prioritaire. Vous pouvez également vous rendre sur le site de curl pour trouver un fichier binaire compilé pour votre plateforme.

$ 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

Dans l’exemple ci-dessus, une copie de l’ancienne version se trouve à l’emplacement ~/bin/curl. Ce chemin étant prioritaire, c’est cette version qui est sélectionnée. Supprimez cette ancienne version ou déplacez-la pour résoudre ce problème.

Vous avez la confiance ? Compilez curl par vous-même !

La dernière version accessible depuis le code source est la 8.4.0-DEV. Il n’y a absolument aucune garantie que le dernier code disponible inclue le correctif pour la vulnérabilité dont nous avons parlé, mais si vous n’avez pas peur de gérer la compilation vous-même, vous aurez la version la plus à jour possible au 11 octobre.

Dans cette section, nous allons voir comment compiler curl sur un Mac M1 exécutant macOS Ventura. L’équipe de développement dirigée par Daniel Stenberg (badger sur GitHub) a effectué un travail remarquable pour simplifier la compilation de curl sur différents systèmes d’exploitation.

Dans la documentation, vous trouverez toute une section sur la compilation et l’installation pour Mac. Ces instructions ont fonctionné sans le moindre problème pour nous. Remarque : pour que cela fonctionne, vous devez d’abord installer les outils de ligne de commande de Xcode.

Pour compiler curl, j’ai donc exécuté la commande suivante :

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

J’ai ensuite confirmé avec la commande suivante :

./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]

Enfin, placez cette version de curl dans un dossier ~/bin local ou un emplacement prioritaire dans votre variable PATH par rapport à la version curl par défaut dans l’attente d’une mise à jour de votre système d’exploitation/distribution. Une fois cette mise à jour disponible, nous vous suggérons de l’installer et de supprimer vos autres exemplaires pour éviter tout problème si de nouvelles vulnérabilités venaient à apparaître.