編集者注: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 をこれらのコンテナー レジストリと統合する手順:
- Docker Scout と Docker Hub の統合
- Docker Scout と JFrog Artifactory の統合
- Docker Scout と AWS Elastic Container Registry の統合
注: コンテナー レジストリが現在サポートされていない場合は、後で説明する CLI でローカル評価方法を使用する必要があります。
ステップ2:分析するリポジトリを選択し、分析を開始します
Docker Scout はデフォルトですべてのローカル イメージを分析しますが、リモート リポジトリ内のイメージを分析するには、Docker Scout イメージ分析を有効にする必要があります。 これは、Docker Hub、Docker Scout ダッシュボード、および CLI から実行できます。 概要ガイドでその方法をご覧ください。
- コマンドを使用して Docker アカウント
docker login
にサインインするか、Docker デスクトップの [ サインイン ] ボタンを使用します。 - 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)。
結果のリストには、このポリシーに違反するすべての画像が含まれています — つまり、上記の重大度の高い CVE (CVE-2023-38545) の影響を受けやすいバージョンの curl が含まれています。
手順 4: curl 依存関係が導入されている場所を特定する
「脆弱なバージョンのcurlなし」ポリシーを満たしていないリスト内の各画像について、タグ(例:「最新」)をクリックしてレイヤービューを開きます。
レイヤービューは、コンテナイメージの構成を分解して、脆弱なバージョンのcurlが導入されている場所を理解するのに役立ちます。
通常、これは次の 2 つの場所のいずれかになります。 イメージが構築される基本イメージは、libcurl がパッケージの依存関係として導入されているアプリケーション上またはアプリケーション内で構築されます。
手順 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]
個々のコンテナー イメージで識別された すべての CVE を理解する場合は、次のコマンドを実行します。 この方法では、コンテナー レジストリで Docker Scout を有効にする必要はありませんが、分析するイメージが多数ある場合は少し時間がかかります。
docker scout cves [OPTIONS] [IMAGE|DIRECTORY|ARCHIVE]
ステップ 2: おすすめを表示する
Docker Scout の推奨事項を使用して、使用可能な修復パスを把握できます。 具体的には、既知の脆弱性を削除する基本イメージの更新プログラムを検出できます。
docker scout recommendations [IMAGE]
さらに詳しく
- GitHubの問題を介して、curlプロジェクトのメンテナからの直接の更新に従ってください。
- Docker Scout の詳細については 、docs.docker.com/scout を参照してください。
- Docker Scout GA の発表: ソフトウェア サプライ チェーンのための実用的なインサイトをご覧ください。