概要

containerd v2.1.6 は 2.1 系列のパッチリリースで、(1) CRI のエラーログに出る URL のクエリパラメータを全面的に赤塗り(redact)する変更と、(2) 同梱 runc を v1.3.4 に更新する変更が入っています。

変更内容(何が変わったか)

  • CRI ログ赤塗りの強化
    • CRI の PullImage / ListImages / ImageStatus / RemoveImage で、エラー発生時にログ出力する err をサニタイズする処理が追加されました(SanitizeError)。
    • *url.Error を含むエラーの場合、URL を net/url でパースし、クエリパラメータを全て [REDACTED] に置換してからエラーメッセージ中の URL を差し替えます(クエリが無い場合は変更しません)。
  • ランタイム(runc)更新
    • script/setup/runc-versionv1.3.3v1.3.4 に更新されました(リリースバイナリ同梱の runc 更新に相当)。
  • 付随するメンテ(依存関係・CI)(本ノートの主題は上の2点)
    • 例:github.com/containernetworking/plugins を v1.9.0 に更新、golang.org/x/crypto を v0.45.0 に更新(Go 1.23 サポートを落とす旨を明記)、CI の Go ツールチェーン更新、CIFuzz Actions の Ubuntu 24.04 対応。

背景(なぜこの変更が必要か)

  • 機密情報の漏えいリスク(CRI 経由のエラー文字列)
    • containerd 側の問題提起として、「レジストリが返すエラー本文に、署名付き URL(クエリに署名/資格情報が入る)が含まれうる。Kubernetes + containerd 構成では、イメージプル失敗時に kubelet がそのエラーをイベントに載せてしまい、結果として署名 URL が露出しうる」という報告があります(#5453)。
    • これを受け、当該 issue を直す目的で「CRI のエラーログから URL クエリを赤塗りする」修正が入っています(#12491 → release/2.1 へチェリーピック #12547)。
  • runc 更新の理由
    • containerd 側の更新 PR では、runc v1.3.4 への更新が「CVE-2025-52881 の緩和パッチで入り込んだ回帰(tmpfs マウントで mode= が不適切に適用される)」の修正を含む、と説明されています(#12593)。

影響(運用者/利用者/開発者への影響、注意点、移行)

  • 運用者
    • 良い点:イメージプル失敗時のログ(および関連するエラー文字列)に含まれる URL のクエリ値が [REDACTED] 化され、署名付き URL 等の露出リスクを下げます。
    • 注意:デバッグ時に「実際のクエリ値(署名トークン等)」が見えなくなるため、原因調査の手順(再現環境・追加ログ・レジストリ側ログ等)を見直す必要が出る場合があります。
  • 利用者
    • imagePullSecrets 等を使う私設レジストリ/署名 URL 付きバックエンド(例:S3)での障害時に、エラー文字列がそのまま露出するリスク低減が期待されます。
  • 開発者
    • サニタイズ対象は *url.Error を含むエラーで、URL のクエリ部分のみを置換します(パスやヘッダ由来の機密、URL 以外に埋め込まれたトークン等は対象外)。

用語メモ(用語の軽い説明)

  • CRI: kubelet がコンテナランタイム(例:containerd の CRI プラグイン)とやり取りするためのインターフェース。
  • kubelet: 各ノードで動作し、イメージプル失敗などをイベントとして記録するコンポーネント。
  • runc: OCI Runtime。containerd がコンテナプロセスを生成・起動する際に利用する実装の一つ。
  • クエリパラメータ: URL の ?key=value&... の部分(署名付き URL ではここに資格情報や署名が入ることがある)。
  • imagePullSecrets: レジストリ認証情報を Pod に渡す仕組み(プライベートレジストリ利用時など)。

参考リンク

  • https://github.com/containerd/containerd/releases/tag/v2.1.6
  • https://github.com/containerd/containerd/pull/12547
  • https://github.com/containerd/containerd/pull/12491
  • https://github.com/containerd/containerd/issues/5453
  • https://github.com/containerd/containerd/pull/12618
  • https://github.com/containerd/containerd/pull/12593
  • https://github.com/containerd/containerd/issues/12484
  • https://github.com/containerd/containerd/pull/12659
  • https://github.com/containerd/containerd/pull/12639
  • https://github.com/containerd/containerd/pull/12626
  • https://github.com/containerd/containerd/pull/12633