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をインストールします。
まだ作業は終わりではありません。これは「keg only」インストールと呼ばれるものです。Homebrewは、macOSに標準搭載されているユーティリティを上書きしたり置き換えたりしないように動作します。そのため、システムのデフォルトではなく、Homebrewでインストールしたcurlを使うことを明示する必要があります。Homebrewの実行ファイルへのパスが、システムのPATHの先頭になるように設定します。macOSでのHomebrewのデフォルトのインストール先は/opt/homebrewです(brew --prefixコマンドでHomebrewのパスを確認できます)。次のコマンドを使い、brewのプレフィックスを指定してHomebrewのパスをPATHの先頭に追加できます。
注: 以前のバージョンのHomebrewでは異なるパスが使われていました。また、以前のバージョンのmacOSではzshではなくbashが使われていました。
新しいターミナルウィンドウを開いて次のコマンドを実行すると、正しいバージョンのcurlを使っているか確認できます。
次のように表示されます。
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未満の場合はアップデートが必要です。
もう一つ確認したいのは、Windowsにプリインストールされたcurlを使っているのか、別途インストールしたcurlを使っているのかという点です。コマンドプロンプトでwhere curlを実行して確認してください。結果に表示されたパスにC:\Windows\System32が含まれていれば、プリインストール版のcurlを参照しています。
curlがインストールされているか、どのバージョンを使っているか、プリインストール版か別途インストールしたものかを確認できれば、最新バージョンへのアップデートに必要な情報がそろいます。プリインストール版のcurlはMicrosoftが提供・管理しているため、安全にアップデートするにはMicrosoftが公開するWindows Updateを使う必要があります。公式アップデートを確認するには、スタートメニューをクリックし、「Windows Update」と入力して、「更新プログラムのチェック」を選択します。設定アプリが開き、Windows Updateの画面が表示されます。「更新プログラムのチェック」ボタンをクリックしてMicrosoftが公開した最新の更新プログラムを取得してください。修正済みバージョンのcurlが含まれている可能性があります。
公式のWindows Update以外にも、最新バージョンをアップデートしてプリインストール版の代わりに使う方法はいくつかあります。どの方法でもPATH環境変数の変更が必要です。変更に不安がある場合は、前述のとおり公式のWindows Updateを待つことをおすすめします。
Windowsでcurlを新しいバージョンにインストールする方法はいくつかあります。
Windows用パッケージマネージャーを使う(macOSのHomebrewのようなもの):
Windowsでcurlをインストールまたはアップデートする最も簡単で手早い方法は、Wingetを使うことです。
Wingetを使ってcURLをインストールする
コマンドプロンプトでwinget install curl.curlを実行します。ネイティブのwingetパッケージディレクトリを使ってcurlがインストールされ、ユーザーのPath環境変数にも自動的に追加されます。ただし、curl --version,を実行すると、新しくインストールしたバージョンではなく、システムにプリインストールされたcurlが使われます。
WingetがユーザーのPath変数に追加したcurlの値を見つけてコピーします。次に、システムPath変数に最優先(「C:\Windows\system32」より上)で追加します。次のような設定になります。

設定が済んだら、コマンドプロンプトに戻り、refreshenvを実行して環境変数の変更を反映します。完了したらcurl --versionを実行し、Wingetでインストールした最新バージョンのcurlが使われていることを確認します。
Chocolateyを使ってcURLをインストールする
まだインストールしていない場合は、まずChocolateyをインストールします。手順についてはChocolateyのドキュメントをご覧ください。インストールが完了し、使用できる状態になったら、管理者としてコマンドプロンプトまたはターミナルを開き、次のコマンドを実行します。

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

編集...ボタンをクリックして値を編集し、ChocolateyのエントリC:\ProgramData\chocolatey\binを見つけます。そのエントリを選択し、上へ移動ボタンでリストの先頭に移動してから、OKをクリックします。
コマンドプロンプトまたはターミナルに戻り、refreshenvを実行して環境変数の変更を反映します。その後、再度curl --versionを実行すると、アップデートされたバージョンが使われていることを確認できます。また、where curlを実行すると、マシンにインストールされているcurlを2つ確認できます。最初に表示されるのが新しいバージョンのインストール先、2番目がシステムのインストール先です。これで新しいバージョンのcurlを使う準備が整いました。
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から、お使いのプラットフォーム用にコンパイル済みのバイナリを入手できます。
上記の例では、古いバージョンのコピーが~/bin/curlにあります。このパスがPATHの先頭にあるため、そちらが実行されています。問題を解決するには、古いバージョンを削除するか、PATHから取り除いてください。
腕に覚えがある方は、curlを自分でビルドしてみましょう!
ソースからビルドした場合、最新のビルドはバージョン8.4.0-DEVになります。最新のコードに重大な脆弱性の修正が含まれている保証はありませんが、ソースからのビルドに慣れている方なら、10月11日にいち早く最新バージョンを入手できます。
このセクションでは、macOS Venturaを実行するM1 Macでのビルド方法を説明します。Daniel Stenberg(GitHubではbadger)率いる開発チームは、curlをさまざまなOSで簡単にビルドできるよう、見事な取り組みを行っています。
インストールに関するドキュメントには、Macでのビルドとインストールについてのセクションがあり、私たちの環境でもそのまま問題なく動作しました。注: この手順を実行するには、Xcodeのコマンドラインツールをインストールしておく必要があります。
curlをビルドするために、次のコマンドを実行しました。
次に、以下のコマンドでビルドを確認しました。
新しくコンパイルしたcurlは、ローカルの~/binディレクトリなど、ディストリビューションやオペレーティングシステムのデフォルトのcurlよりPATHの先にある場所に配置できます。ディストリビューションまたはオペレーティングシステムからアップデートが提供されたら、そちらへの切り替えをおすすめします。また、今後脆弱性が見つかった場合に備えて、独自に配置したコピーは削除してください。
キャプチャー・ザ・フラッグを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、キャプチャー・ザ・フラッグの課題の解き方を学びましょう。
