Skip to main content

libcurl と curl で重大度の高い脆弱性が発覚 (CVE-2023-38545)

著者:
Hadas Bloom
Hadas Bloom
Tal Dromi
Micah Silverman
Micah Silverman
feature-curl-vuln

2023年10月4日

0 分で読めます

更新日: 2023 年 10 月 11 日

本日 6 時 (UTC)、cURL のメンテナーは、特定の構成と前提条件を持つシステムに影響を及ぼす可能性のある、重大度の高いヒープベースのバッファオーバーフロー (概念実証初期通知) を緩和するために、curllibcurl の 8.4.0 バージョンをリリースしました。

このゼロデイ脆弱性は、C/C++、cargo、cocoapods、npm、NuGet、pip、pub、および Alpine、Debian、RHEL などの各種 Linux ディストリビューションを含む (ただし、これらに制限されない) 複数の管理および非管理オープンソースエコシステムのパッケージに存在していました。

これはここ数年curl に見つかった重大度の高い初の脆弱性です (最後に見つかったのは 2021 年初頭)。

blog-curl-vuln-chart
cURL の脆弱性テーブルのスクリーンショット

影響を受けた curl/libcurl のバージョン (2020 年 3 月以降) は以下のとおりです。

  • 影響を受けたバージョン: libcurl 7.69.08.3.0

  • 影響を受けていないバージョン: libcurl < 7.69.0 および >= 8.4.0

攻撃の複雑性は高く、特定のシナリオのみトリガーが可能です。メンテナーの投稿「curl におけるヒープオーバーフローの発生方法」で説明されているように、この脆弱性を利用するには、脆弱なライブラリから制御されていないサーバーや侵害されたサーバーにアクセス (HTTP リダイレクト経由で悪用) するか、ホスト名解決が有効になっている SOCKS5 プロキシ経由で攻撃者が制御する URL を使用して脆弱な状態を引き起こす必要がありますが、その場合でも文字セットのヒープオーバーフローは限定的です。最新システムでのヒープオーバーフローを任意のコード実行 (ACE) に変換することは極めて難しいため、この攻撃は非常に複雑です。

脆弱性が公開・追跡されたので、Snyk のレポート機能を使用して影響を受けるプロジェクトを確認できます。レポートを見るには、組織を選択し、サイドバーで「レポート」を選択します。問題の詳細の下の「+フィルターを追加」を選択し、「CVE」を選択して次の CVE の番号を入力します。CVE-2023-38545

blog-curl-vuln-filter
フィルタでビューを絞り込んで CVE-2023-38545 を見つける

このブログは、新しい情報が入り次第、更新されます。

更新日: 2023 年 10 月 4 日

2023 年 10 月 3 日、長年 curl のメンテナーを務め、原作者でもある Daniel Stenberg 氏は、LinkedInX (旧 Twitter) で、「過去数年間に curl で発見された最悪のセキュリティ問題」を修正する curl バージョン 8.4.0 のリリースに関して投稿しました。過去に curl のメンテナーは、curl に対して報告された脆弱性に関連する大半のリスクを過小評価するよう主張してきたため、この問題は真剣に受け止める必要があります (最近の事例は、記事「CVE の欠点は CVE-2020-19909 が元凶」で紹介しています)。この特殊な事例では、リスクに対して「厳重注意」するよう警告しています。

メンテナーによると、修正バージョン 8.4.0 は、2023 年 10 月 11 日の 06:00 UTC 頃にリリースされる予定です。

本日 (2023 年 10 月 4 日)、脆弱性情報を含めるために使用される CVE が GitHub ディスカッションで発表されました。

CVE-2023-38545は、libcurlcurl の両方に影響を与える重大度の高い問題に割り当てられます。CVE-2023-38546 に割り当てられた重大度の低い追加の問題 (libcurl のみに影響) も修正されます。

現在わかっていること

cURL は一般的なプロジェクトで、libcurl ライブラリ (URL 転送に使用) と curl のコマンドラインツール (URL を使用したデータの取得と送信に使用) の両方を提供しています。cURL は 27 年前に初めてリリースされ、1996 年以降広く使用されています。 

Snyk は Linux ディストリビューションのすべてをサポートしてはいませんが、多くは libcurl を使用しているため、潜在的な影響は広範囲に及びます。

対策準備

  • コンテナとパッケージの使用状況を事前に確認して、エクスポージャを測定します。

  • curl がインストールされているホストを特定し、それがどのようにインストールされたかを判断します。

  • 使用中の curl のバージョンを curl --version で確認します。

エクスポージャの測定

libcurl の修正バージョンのリリースに先立って、影響が及ぶ可能性のあるオープンソースのプロジェクトやコンテナイメージを Snyk を使って速やかに発見できます。 

Snyk App UI のサイドバーにある「依存関係」に移動します。「依存関係」ビューに移動したら、依存関係のフィルターを拡張して「curl」と入力します。個々のバージョンを選択することも、「すべて選択」ショートカットにチェックを入れ、フィルターの外側をクリックして結果を確認することもできます。これにより、選択した libcurl バージョンを持つすべてのプロジェクトが表示されます。プロジェクトや依存関係をさらに参照してリスクを評価し、先に修正すべきものを優先することができます。

curl がインストールされているホストを特定する

多くのオペレーティングシステムはデフォルトで curl がインストールされていますが、インストール場所はオペレーティングシステムとインストール方法によって異なります。curl がインストールされており、パスにあるかどうかを確認するには、curl --version を実行します。

エラーが返されなかった場合は、パスで最初に見つかった curl のバージョンが表示されます。場合によっては、複数の場所にインストールされていることもあります。たとえば Apple コンピュータはデフォルトで /usr/bin/curl にインストールされていますが、Homebrew 経由でインストールされる場合もあります。バージョンがパスのどこにあるかを確認するには、which curl を実行します。macOS/Linux ベースのオペレーティングシステムでは、以下の場所を検索してください。

  • /bin/curl

  • /usr/bin/curl

  • /usr/local/bin/curl

  • /opt/homebrew/opt/curl

更新が必要なすべてのインスタンスを確認してから、新しいバージョンに更新してください。

アップデートがリリースされた際の対応方法

リリース日 (2023 年10 月 11 日 06:00 UTC 頃) に、バージョン 8.4.0 へ更新できるよう準備しておいてください。新しいバージョンが利用可能になると、さらに詳細な情報を入手できるため、脆弱性についての追加情報をこのブログに投稿します (その後のブログへのリンクも追加していきます)。

虚弱なパッケージとコンテナを更新する

プロジェクトやコンテナのイメージの更新準備のために収集した情報を使って、libcurl の修正バージョンをインストールしてください。異なるエコシステムや Linux のディストリビューションでは、影響を受けるパッケージの使用がこの期間の後に更新され、修正プログラムは段階的に提供される場合があります。たとえば、メンテナーによってアップストリームの修正を待ってからコンテナイメージやパッケージのアップデートをリリースする場合も、パッチを適用する場合もあります。いずれの場合も、Snyk では問題の発見・修正を支援できます

デバイス上の curl を更新する

curl バイナリの修正バージョンが利用可能になったら、インストールしたバージョンを更新してください。アップデートに関する役立つヒントは別のブログで投稿します。curl のインストール方法は複数あり、更新方法はオペレーティングシステムによって異なります。 

Snyk の役割

Snyk は重大度の高いアップストリームの問題に対する勧告のプレースホルダーを公開しました。プレースホルダーのコンテンツは、さらに情報が入り次第、更新されます。 

Snyk のセキュリティ専門家はリリースの更新、脆弱性の情報、ソーシャルメディアでのチャットなどを積極的に追跡し、入手したデータをお客様に提供しています。さらに、影響を受けるダウンストリームのパッケージについても追加調査を行っています。新しい情報は必要に応じてこのブログでお伝えします。

カテゴリー: