Skip to main content

cURLをアップデートする方法

2023年10月11日

0 分で読めます

2023年10月3日、curlチームはlibcurlとcurlの両方に影響する重大度の高い脆弱性について、修正プログラムの公開予定を事前発表しました。

Snyk製品は、脆弱なパッケージやコンテナの特定と修正に役立ちます。しかし、今回の脆弱性は、多くの開発者が日常的に使うコマンドラインツールcurlに影響します。また、curlは多くのオペレーティングシステムに同梱されているため、システム上でアップデートする方法について、いくつかのヒントをご紹介します。

OS別:cURLのアップデート方法

このセクションでは、各種オペレーティングシステムでのバージョン確認方法とアップグレード方法をご紹介します。事前に確認しておけば、バージョン8.4.0のリリース後すぐにアップグレードできます。

macOSでcURLをアップデートする

注: このセクションでは、M1 Macで最新バージョンのmacOSを実行している場合に、最新バージョンのcurlを使用する方法を説明します。Intel Macや古いバージョンのmacOSでは、同じ手順で動作しない場合があります。

macOS Ventura(13.5.2)以降には、curlが標準でインストールされています。ただし、バージョンは古く、8.1.2です。標準搭載のcurlには既知の脆弱性があるため、より新しいバージョンをインストールして、デフォルトとして設定することをSnykは推奨します。

朗報です。以下の手順に従って最新バージョンにアップデートしておけば、curl 8.4.0のリリース後もスムーズにアップデートできます。

macOSで最も広く使われているサードパーティ製パッケージマネージャーはHomebrewです。Homebrewで利用できるcurlの最新バージョンは8.3.0で、9月中旬にリリースされました。

次のコマンドを実行して、Homebrewでcurlをインストールします。

brew install curl

まだ作業は終わりではありません。これは「keg only」インストールと呼ばれるものです。Homebrewは、macOSに標準搭載されているユーティリティを上書きしたり置き換えたりしないように動作します。そのため、システムのデフォルトではなく、Homebrewでインストールしたcurlを使うことを明示する必要があります。Homebrewの実行ファイルへのパスが、システムのPATHの先頭になるように設定します。macOSでのHomebrewのデフォルトのインストール先は/opt/homebrewです(brew --prefixコマンドでHomebrewのパスを確認できます)。次のコマンドを使い、brewのプレフィックスを指定してHomebrewのパスをPATHの先頭に追加できます。

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

注: 以前のバージョンのHomebrewでは異なるパスが使われていました。また、以前のバージョンのmacOSではzshではなくbashが使われていました。

新しいターミナルウィンドウを開いて次のコマンドを実行すると、正しいバージョンのcurlを使っているか確認できます。

curl --version

次のように表示されます。

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

Homebrewでcurl 8.4.0が利用可能になったら、brew install curlコマンドを再度実行するだけで、最新バージョンを入手できます。

Homebrewでバージョン8.4.0がリリースされたら、この記事を更新します。

WindowsでcURLをアップデートする

Windows 10(ビルド1803)以降にはcurlがプリインストールされていますが、バージョンは古いものです。curlがインストールされているか、またどのバージョンを使っているかを確認するには、コマンドプロンプトを開きます。スタートメニューをクリックし、キーボードでcmdと入力します。コマンドプロンプトでcurl --versionを実行すると、curlのインストール状況とバージョンを確認できます。8.4.0未満の場合はアップデートが必要です。

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

もう一つ確認したいのは、Windowsにプリインストールされたcurlを使っているのか、別途インストールしたcurlを使っているのかという点です。コマンドプロンプトでwhere curlを実行して確認してください。結果に表示されたパスにC:\Windows\System32が含まれていれば、プリインストール版のcurlを参照しています。

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

curlがインストールされているか、どのバージョンを使っているか、プリインストール版か別途インストールしたものかを確認できれば、最新バージョンへのアップデートに必要な情報がそろいます。プリインストール版のcurlはMicrosoftが提供・管理しているため、安全にアップデートするにはMicrosoftが公開するWindows Updateを使う必要があります。公式アップデートを確認するには、スタートメニューをクリックし、「Windows Update」と入力して、「更新プログラムのチェック」を選択します。設定アプリが開き、Windows Updateの画面が表示されます。「更新プログラムのチェック」ボタンをクリックしてMicrosoftが公開した最新の更新プログラムを取得してください。修正済みバージョンのcurlが含まれている可能性があります。

公式のWindows Update以外にも、最新バージョンをアップデートしてプリインストール版の代わりに使う方法はいくつかあります。どの方法でもPATH環境変数の変更が必要です。変更に不安がある場合は、前述のとおり公式のWindows Updateを待つことをおすすめします。

Windowsでcurlを新しいバージョンにインストールする方法はいくつかあります。

Windowsでcurlをインストールまたはアップデートする最も簡単で手早い方法は、Wingetを使うことです。

Wingetを使ってcURLをインストールする

コマンドプロンプトでwinget install curl.curlを実行します。ネイティブのwingetパッケージディレクトリを使ってcurlがインストールされ、ユーザーのPath環境変数にも自動的に追加されます。ただし、curl --version,を実行すると、新しくインストールしたバージョンではなく、システムにプリインストールされたcurlが使われます。

WingetがユーザーのPath変数に追加したcurlの値を見つけてコピーします。次に、システムPath変数に最優先(「C:\Windows\system32」より上)で追加します。次のような設定になります。

PATHのエントリが表示されたWindowsの「環境変数の編集」ダイアログ。cURLのインストールフォルダーが選択されています。

設定が済んだら、コマンドプロンプトに戻り、refreshenvを実行して環境変数の変更を反映します。完了したらcurl --versionを実行し、Wingetでインストールした最新バージョンのcurlが使われていることを確認します。

Chocolateyを使ってcURLをインストールする

まだインストールしていない場合は、まずChocolateyをインストールします。手順についてはChocolateyのドキュメントをご覧ください。インストールが完了し、使用できる状態になったら、管理者としてコマンドプロンプトまたはターミナルを開き、次のコマンドを実行します。

choco install curl
Chocolateyでcurlをインストールし、パッケージのインストールスクリプトを実行するよう促すWindows管理者用コマンドプロンプト

ただし、まだ作業は終わりではありません。curl --versionを実行すると、以前の古いバージョンが表示されることに気づくでしょう。これを修正するには、システム環境変数を更新する必要があります。スタートメニューをクリックし、システム環境変数の編集と入力して、最初の項目を選択します。「システムのプロパティ」ウィンドウが開いたら、環境変数...ボタンをクリックすると、環境変数というタイトルの新しいウィンドウが開きます。このウィンドウでシステム環境変数セクションを探し、変数列にあるPathの項目を見つけます。

Path変数が選択され、セミコロンで区切られた値が表示されているWindowsのシステム環境変数ダイアログ。

編集...ボタンをクリックして値を編集し、ChocolateyのエントリC:\ProgramData\chocolatey\binを見つけます。そのエントリを選択し、上へ移動ボタンでリストの先頭に移動してから、OKをクリックします。

コマンドプロンプトまたはターミナルに戻り、refreshenvを実行して環境変数の変更を反映します。その後、再度curl --versionを実行すると、アップデートされたバージョンが使われていることを確認できます。また、where curlを実行すると、マシンにインストールされているcurlを2つ確認できます。最初に表示されるのが新しいバージョンのインストール先、2番目がシステムのインストール先です。これで新しいバージョンのcurlを使う準備が整いました。

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

LinuxでcURLをアップデートする

curl --versionを実行して脆弱なバージョンを使っていることがわかった場合は、修正版が入手可能になった時点でシステムをアップデートできます。

Linuxでcurlをアップデートする方法は、ディストリビューションが使用するパッケージマネージャーによって異なります。以下のコマンドを参考に、お使いのディストリビューションに合った方法で進めてください。一般的には、パッケージマネージャーでパッケージインデックスのキャッシュを更新してから、新しいバージョンをインストールします。ディストリビューション別の手順は次のとおりです。

  • DebianやUbuntuなど、aptベースのディストリビューションの場合:

    • インデックスを更新: apt-get update

    • 最新バージョンをインストール: apt-get upgrade curl

  • snapパッケージの場合(主にUbuntu):

    • 最新バージョンをインストール: snap install curl

  • RHEL、Rocky、Fedoraなど、dnfを使うディストリビューションの場合:

    • アップデートを確認: dnf check-update

    • 最新バージョンをインストール: dnf install curl

  • Alpineでapkを使う場合:

    • インデックスを更新: apk update

    • 最新バージョンをインストール: apk add curl

アップグレード版を入手するには、各ディストリビューションのパッケージリポジトリが更新されている必要があります。お使いのディストリビューションに適したコマンドを実行した後、curl --version,を実行しても8.4.0と表示されない場合は、PATHを確認し、他のバージョンが優先されていないか確かめてください。または、curl - Downloadから、お使いのプラットフォーム用にコンパイル済みのバイナリを入手できます。

$ 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 …

上記の例では、古いバージョンのコピーが~/bin/curlにあります。このパスがPATHの先頭にあるため、そちらが実行されています。問題を解決するには、古いバージョンを削除するか、PATHから取り除いてください。

腕に覚えがある方は、curlを自分でビルドしてみましょう!

ソースからビルドした場合、最新のビルドはバージョン8.4.0-DEVになります。最新のコードに重大な脆弱性の修正が含まれている保証はありませんが、ソースからのビルドに慣れている方なら、10月11日にいち早く最新バージョンを入手できます。

このセクションでは、macOS Venturaを実行するM1 Macでのビルド方法を説明します。Daniel Stenberg(GitHubではbadger)率いる開発チームは、curlをさまざまなOSで簡単にビルドできるよう、見事な取り組みを行っています。

インストールに関するドキュメントには、Macでのビルドとインストールについてのセクションがあり、私たちの環境でもそのまま問題なく動作しました。注: この手順を実行するには、Xcodeのコマンドラインツールをインストールしておく必要があります。

curlをビルドするために、次のコマンドを実行しました。

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

次に、以下のコマンドでビルドを確認しました。

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

新しくコンパイルしたcurlは、ローカルの~/binディレクトリなど、ディストリビューションやオペレーティングシステムのデフォルトのcurlよりPATHの先にある場所に配置できます。ディストリビューションまたはオペレーティングシステムからアップデートが提供されたら、そちらへの切り替えをおすすめします。また、今後脆弱性が見つかった場合に備えて、独自に配置したコピーは削除してください。

キャプチャー・ザ・フラッグを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、キャプチャー・ザ・フラッグの課題の解き方を学びましょう。