概要
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 を差し替えます(クエリが無い場合は変更しません)。
- CRI の
- ランタイム(runc)更新
script/setup/runc-versionがv1.3.3→v1.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)。
- containerd 側の更新 PR では、runc v1.3.4 への更新が「CVE-2025-52881 の緩和パッチで入り込んだ回帰(tmpfs マウントで
影響(運用者/利用者/開発者への影響、注意点、移行)
- 運用者
- 良い点:イメージプル失敗時のログ(および関連するエラー文字列)に含まれる URL のクエリ値が
[REDACTED]化され、署名付き URL 等の露出リスクを下げます。 - 注意:デバッグ時に「実際のクエリ値(署名トークン等)」が見えなくなるため、原因調査の手順(再現環境・追加ログ・レジストリ側ログ等)を見直す必要が出る場合があります。
- 良い点:イメージプル失敗時のログ(および関連するエラー文字列)に含まれる 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.6https://github.com/containerd/containerd/pull/12547https://github.com/containerd/containerd/pull/12491https://github.com/containerd/containerd/issues/5453https://github.com/containerd/containerd/pull/12618https://github.com/containerd/containerd/pull/12593https://github.com/containerd/containerd/issues/12484https://github.com/containerd/containerd/pull/12659https://github.com/containerd/containerd/pull/12639https://github.com/containerd/containerd/pull/12626https://github.com/containerd/containerd/pull/12633