Skip to main content

cURL のアップデート方法

著者:
Micah Silverman

Micah Silverman

wordpress-sync/feature-screenshot-mockup

2023年10月11日

0 分で読めます

2023 年 10 月 3 日、curl チームは、libcurlcurl の両方に影響を与える重大度の高い脆弱性に対する保留中の修正プログラムについて事前告知しました。 

Snyk 製品を使用すると、脆弱なパッケージやコンテナを特定して修正できますが、この脆弱性は、多くの開発者が日常的に使用しているコマンドラインツールである curl に影響を与えます。また、このツールは多くのオペレーティングシステムとともに配布されているため、システムでのアップグレード方法についてヒントを提供することが有益であると判断しました。

お使いの OS で cURL をアップデートするには

このセクションでは、さまざまなオペレーティングシステムのバージョンチェックとアップグレードに関するアドバイスを提供します。これを事前に把握しておくと、8.4.0 バージョンがリリースされたときのアップグレードを円滑化できます。

macOS での cURL のアップデート

注: このセクションでは、M1 Mac で実行されている最新バージョンの MacOS での最新バージョンの curl の使用について説明します。Intel Mac または旧バージョンの MacOS の場合、効果は異なることがあります。

macOS Ventura (13.5.2) 以降では、curl がデフォルトでインストールされます。ただし、それは旧バージョンの curl (8.1.2) です。curl の組み込みバージョンには既知の脆弱性があるため、新しいバージョンをインストールし、これをデフォルトとして設定することをお勧めします。

幸い、これらの手順に従って最新バージョンにアップデートしておくと、curl 8.4.0 がリリースされたときに再度アップデートする準備が整います。

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

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

brew install curl

これで終わりではありません。これは「ケグのみ」インストールと呼ばれるものです。Homebrew では、macOS にデフォルトで付属しているユーティリティの上書きやオーバーライドを防ぐよう考慮されています。そのため、システムのデフォルトではなく Homebrew がインストールしたバージョンの curl を使用したいことを明示的に表現する必要があります。これを行うには、Homebrew 実行可能ファイルのパスがシステムパスの先頭にあることを確認します。macOS での homebrew インストールのデフォルトの場所は /opt/homebrew です (homebrew のパスは brew --prefix コマンドで確認できます)。次のコマンド (brew プレフィックスを使用) を実行して、パスの先頭に homebrew のバージョンを追加できます。

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 installcurl コマンドを再度実行するだけで最新バージョンを入手できます。 

この投稿は、Homebrew バージョン 8.4.0 のリリース時に更新されます。

Windows での cURL のアップデート

Windows 10 (ビルド 1803) 以降には、curl がプリインストールされていますが、最新バージョンではありません。curl の有無と使用中の cur のバージョンをテストするには、コマンドプロンプトを開く必要があります。「スタート」メニューをクリックして、キーボードで「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

もう 1 つ確認する必要があるのは、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 の公式アップデートを確認するには、「スタート」メニューをクリックし、「Windows Update」と入力して、「更新プログラムの確認」オプションを選択します。設定アプリが開き、Windows Update ビューが表示されます。「更新プログラムのチェック」ボタンをクリックして、Microsoft からリリースされた最新のアップデートを取得すると、パッチ適用済みバージョンの curl が含まれる可能性があります。

最新バージョンにアップデートして、プレインストール済みバージョンの代わりにそれを使用するオプションは、公式の Windows Update 以外にもいくつかあります。これらのオプションはすべて PATH 環境変数の変更を伴うため、それを行うことに抵抗がある場合は、上記のように公式の Windows Update を待つ必要があります。

新しいバージョンの curl は、次に示す方法で Windows にインストールできます。 

Windows で curl をインストール/アップデートする最もすばやく簡単な方法は、Winget を使用することです。

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

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

Winget によってユーザーパス変数に追加された curl 値を見つけてコピーします。次に、その値をシステムパス変数に優先度が最も高いものとして追加します (「C:\\Windows\\system32」の上)。次のように表示されます。

blog-fix-curl-environ-var

完了したら、コマンドプロンプトに戻り、「refreshenv」を実行して、環境変数の変更を取得します。それが完了したら、「curl --version」を実行して、Winget によってインストールされた最新バージョンの curl が使用されていることを確認します。

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

まず、Chocolatey をまだインストールしていない場合はインストールします。これについて詳しくは、Chocolatey のドキュメントをご確認ください。インストールして使用する準備が整ったら、管理者としてコマンドプロンプト/ターミナルから次のコマンドを実行できます。

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

ただし、まだ終わりではありません。「curl --version」を実行すると、curl のバージョンが依然として以前のバージョン/旧バージョンとして報告されることがわかります。この問題を修正するには、システム環境変数をアップデートする必要があります。「スタート」メニューをクリックして「システム環境変数の編集」と入力し、最初のオプションを選択します。「システムのプロパティ」ウィンドウが開いたら、「環境変数...」ボタンをクリックして、「環境変数」という新しいウィンドウを開きます。このウィンドウの「システム環境変数」セクションで、「変数」列の「Path」エントリを見つけて選択します。

blog-fix-curl-system-var-path

編集...」ボタンをクリックして、chocolatey のエントリ「C:\\ProgramData\\chocolatey\\bin」を見つけます。エントリを選択して、「上へ」ボタンを使用してエントリをリストの一番上に移動し、「OK」をクリックします。

コマンドプロンプト/ターミナルに戻り、「refreshenv」と入力して、環境変数に対して行った変更で更新します。その後、「curl --version」を再び実行します。アップデート後のバージョンが使用されていることがわかります。また、「wherecurl」を実行して、マシンにインストールされている 2 つのcurl インスタンスを確認することもできます。1 つ目は新しいバージョンのインストール場所、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 が表示されない場合は、パスをチェックして、その前に他のバージョンがインストールされていないことを確認します。または、curl - ダウンロードに移動して、お使いのプラットフォーム用にコンパイルされたバイナリを見つけることができます。

$ 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」にあり、それが最初にパスに置かれていたため選択されています。この問題を解決するには、旧バージョンを削除するか、パスから削除してください。

一歩踏み込んで curl を独自にビルドする

ソースからビルドを行う場合の最新バージョンは 8.4.0-DEV になります。最新のコードに高度な脆弱性に対する修正が含まれているという保証はありませんが、ソースからのビルドに慣れている場合は、絶対的な最新バージョンを 10 月 11 日に最初に入手できるようになります。

このセクションでは、MacOS Ventura を実行する M1 Mac 上でのビルドについて見ていきます。Daniel Stenberg 氏 (GitHub の badger) が率いる開発者チームは、さまざまな OS 上での curl のビルドを容易にする機能の開発に大きく貢献しています。

インストールドキュメントには、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 よりも前に置くことができます。アップデートが入手可能になったら、それを採用し、将来の脆弱性に備えて不正なコピーを削除することをお勧めします。

wordpress-sync/feature-screenshot-mockup

セキュリティチャンピオンプログラムの構築方法

Snykは、セキュリティチャンピオンプログラムを成功させた、または失敗した20人以上のセキュリティリーダーとのインタビューを実施しました。このガイドを参照し、開発者を中心とした効果的なセキュリティチャンピオンプログラムの進め方を学びましょう。