セキュリティ アドバイザリ: 深刻度の高い Curl の脆弱性

編集者注:curl 8.4.0のリリースに続いてこの投稿は2023年10月11日に更新され、脆弱性に関する詳細と、影響を受けるバージョンのcurlへの依存関係を発見した場合にDocker Scoutを使用してこの問題を修正する方法に関する情報が追加されました。


URLを使用してデータを転送するための人気のあるコマンドラインツールおよびライブラリである curlのメンテナは、2023年10月11日にcurl8.4.0をリリースしました。 このバージョンには、2つの一般的な脆弱性と露出(CVE)の修正が含まれており、そのうちの1つは、curlメンテナが「高」の重大度と評価し、「おそらく長い間で最悪のcurlセキュリティ上の欠陥」と説明しています。 

CVE ID は次のとおりです。 

  • CVE-2023-38545:SOCKS5 ヒープバッファオーバーフロー、重大度 HIGH (libcurl と curl ツールの両方に影響します)
  • CVE-2023-38546:ファイルなしのクッキーインジェクション、重大度低(libcurlにのみ影響し、ツールには影響しません)

これらのCVEがどのように悪用されるかについての詳細は、アドバイザリとともに公開されています。 しかし、curlメンテナのDaniel Stenbergも、SOCKS5のサポートの特定の実装を通じて脆弱性がどのように発生したかについての ブログ投稿 を公開しました。

この投稿では、 Docker Scout を使用して、コンテナイメージのcurlに依存しているかどうかを理解する方法について説明します。 また、依存関係が導入された場所と、curl を 8.4.0 に更新する方法に関するガイダンスも提供します。   

明るい青のデジタル背景に黒い南京錠

私は脆弱ですか?

curlに依存しているからといって、必ずしもアプリケーションでエクスプロイトが可能になるとは限りません。 しかし、Docker Scoutは、イメージがcurlに依存しているかどうか、CVEがどのように悪用可能であるか、および最新バージョンにアップグレードする方法(依存関係または悪用可能な実装がある場合)を説明するのに役立ちます。  

すべての画像を評価する最も簡単な方法 

すべてのイメージを評価する最も簡単な方法は、コンテナー レジストリに対して Docker Scout を有効にすることです。 

ステップ1:ドッカースカウトを有効にする

Docker Scoutは現在、Docker Hub、JFrog Artifactory、AWS Elastic Container Registryをサポートしています。 Docker Scout をこれらのコンテナー レジストリと統合する手順:

注: コンテナー レジストリが現在サポートされていない場合は、後で説明する CLI でローカル評価方法を使用する必要があります。

ステップ2:分析するリポジトリを選択し、分析を開始します

Docker Scout はデフォルトですべてのローカル イメージを分析しますが、リモート リポジトリ内のイメージを分析するには、Docker Scout イメージ分析を有効にする必要があります。 これは、Docker Hub、Docker Scout ダッシュボード、および CLI から実行できます。 概要ガイドでその方法をご覧ください

  1. コマンドを使用して Docker アカウント docker login にサインインするか、Docker デスクトップの [ サインイン ] ボタンを使用します。
  2. Docker CLI docker scout repo enable コマンドを使用して、既存のリポジトリで分析を有効にします。
$ docker scout repo enable --org <org-name> <org-name>/scout-demo

ステップ3:scout.docker.com を訪問する 

scout.docker.com ホームページで、[脆弱なバージョンの curl なし] というポリシー カードを見つけ、[詳細の表示] を選択します (図 1)。 

カールスカウト図1
図 1: 脆弱なバージョンの curl が存在するかどうか、および存在する場所を特定するのに役立つポリシー カードを含む Docker Scout ダッシュボード。

結果のリストには、このポリシーに違反するすべての画像が含まれています — つまり、上記の重大度の高い CVE (CVE-2023-38545) の影響を受けやすいバージョンの curl が含まれています。

スカウトポリシー脆弱なバージョンのカールなし
図 2: 影響を受けるバージョンの curl ライブラリを含むことでポリシーに違反するイメージの一覧を示す Docker Scout。

手順 4: curl 依存関係が導入されている場所を特定する

「脆弱なバージョンのcurlなし」ポリシーを満たしていないリスト内の各画像について、タグ(例:「最新」)をクリックしてレイヤービューを開きます。

レイヤービューは、コンテナイメージの構成を分解して、脆弱なバージョンのcurlが導入されている場所を理解するのに役立ちます。

通常、これは次の 2 つの場所のいずれかになります。 イメージが構築される基本イメージは、libcurl がパッケージの依存関係として導入されているアプリケーション上またはアプリケーション内で構築されます。

スカウトポリシーの画像のスクリーンショット
図 3: 脆弱なバージョンの curl を導入する基本イメージ レイヤーを示す Docker Scout です。

手順 5: 修復パスを選択する

画像レイヤービューの結果によって、最初のアクションコースが決まります。 ただし、curl はほとんどの OS 基本イメージで配布されているため、基本イメージの更新から始めることをお勧めします。

イメージで最新のベース イメージ タグが使用されている場合は、新しいビルドを (ローカルまたはパイプラインで) 開始し、新しいイメージをレジストリにプッシュして、手順 3 に戻ることができます。

ステップ3に戻っても、 ベースイメージレイヤーにポリシー違反と警告が表示される場合は、上流のメンテナがまだcurlバージョンの更新に取り組んでいることが原因である可能性があります。 

手順 3 に戻っても、アプリケーション レイヤーでポリシー違反と警告が表示される場合は、アプリケーション コードが依存している curl のバージョンを手動でバンプしてからビルドして再度プッシュする必要があります。

代替 CLI 方式

手順 1: コンテナー イメージを評価する

別の方法は、Docker Scout CLI を使用してローカル コンテナー イメージを分析および評価することです。

この docker scout policy コマンドを使用して、コマンドラインで Docker Scout の組み込みポリシー ( 脆弱なバージョンの curl なしを含む) に対してイメージを評価できます。 

docker scout policy [IMAGE] --org [ORG]
スカウト結果コンテナ画像評価
図 4: Docker Scout コマンドを実行して "脆弱なバージョンの curl なし" ポリシーに対してコンテナー イメージを評価した結果を示す Docker Scout。

個々のコンテナー イメージで識別された すべての CVE を理解する場合は、次のコマンドを実行します。 この方法では、コンテナー レジストリで Docker Scout を有効にする必要はありませんが、分析するイメージが多数ある場合は少し時間がかかります。 

docker scout cves [OPTIONS] [IMAGE|DIRECTORY|ARCHIVE]

ステップ 2: おすすめを表示する

Docker Scout の推奨事項を使用して、使用可能な修復パスを把握できます。 具体的には、既知の脆弱性を削除する基本イメージの更新プログラムを検出できます。

docker scout recommendations [IMAGE]
スカウト推薦コマンドの結果
図 5: ドッカー スカウト レコメンデーション コマンドの結果を示す Docker Scout です。 一部のアップストリームコンテンツプロバイダーは、安定したビルドへの修正をまだ公開していない可能性があることに注意してください。 最先端のバージョンへの移行を検討することをお勧めします。

さらに詳しく