リモートアーティファクトの整合性検証の確認

リモートファイルは、信頼できるチェックサムや署名で検証してから使用してください。

説明

Dockerfile でリモートファイルをダウンロードする際、入手元と整合性を検証しないと、改ざんされたファイルをイメージに含めるおそれがあります。HTTPS は通信を保護しますが、期待したアーティファクトであることまでは確認しません。

ADD 自体が誤った選択ではありません。対応する Dockerfile では、ADD --checksum でリモート HTTP ファイルの SHA-256 を検証できます。curl や wget で取得した場合も検証が必要です。

想定される影響

  • 改ざんされた実行ファイルや設定がイメージに含まれ、実行時に使われるおそれがあります。
  • URL の内容が更新されると、同じ Dockerfile でもビルド結果が変わる場合があります。

対処方法

  • 信頼できる配布元を使い、期待するチェックサムや署名を独立して確認したうえで、取得したファイルを検証してください。
  • ADD --checksum または明示的なダウンロード・検証コマンドを使い、検証失敗時はビルドを停止してください。必要な展開処理と一時ファイル削除も明示してください。

例

JAVA_BUILD_IMAGE ビルド引数には、tar を備えたサポート中の Linux Java ベースイメージを指定してください。非推奨となった openjdk イメージを入力に置き換えています。example.com の URL とチェックサムは例示用なので、実際の入手元と検証済みの値に変更してください。

変更前

dockerfile
ARG JAVA_BUILD_IMAGE
FROM ${JAVA_BUILD_IMAGE}

ADD https://example.com/app.tar.gz /opt/app/

変更後

dockerfile
ARG JAVA_BUILD_IMAGE
FROM ${JAVA_BUILD_IMAGE}

ADD --checksum=sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \
    https://example.com/app.tar.gz /tmp/app.tar.gz
RUN mkdir -p /opt/app \
    && tar -xzf /tmp/app.tar.gz -C /opt/app \
    && rm /tmp/app.tar.gz

補足:

  • 変更前: チェックサムを検証せずに取得します。この ADD はリモートのアーカイブを自動展開しません。
  • 変更後: ADD --checksum で検証してから明示的に展開し、一時ファイルを削除します。例示用チェックサムをそのまま使用しないでください。

参考資料