説明
NET_ADMIN や SYS_TIME などの Linux capability は、ネットワーク設定やシステム時刻の変更など、特定の特権操作を許可します。不要な capability を追加すると、アプリケーションを侵害した攻撃者が実行できる操作が増えます。
影響範囲は capability、名前空間、ホストアクセス設定によって異なります。既定の capability もすべてのアプリケーションに必要とは限らないため、併せて確認してください。
想定される影響
侵害されたプロセスが不要なネットワーク・システム操作を行ったり、他の隔離上の弱点を悪用したりするおそれがあります。一方、検証せずに必要な権限を削除すると、機能が停止する場合もあります。
対処方法
- securityContext.capabilities.add から不要な capability を削除してください。
- 可能な場合は drop: [ALL] を使い、必要な capability だけを追加してください。例外の目的と範囲を明確にしてください。
- 非 root 実行と権限昇格の防止も設定し、必要な機能が動作することを検証してください。
例
追加 capability の有無を比較する Pod の例です。実際の対象 Pod に変更を適用し、イメージに必要な権限を確認してください。
変更前
yaml
apiVersion: v1
kind: Pod
metadata:
name: pod2
spec:
containers:
- name: app
image: images.my-company.example/app:v4
securityContext:
allowPrivilegeEscalation: false
capabilities:
add: ["NET_ADMIN", "SYS_TIME"]
NET_ADMIN と SYS_TIME を追加しています。allowPrivilegeEscalation: false は、すでに付与した capability を削除しません。
変更後
yaml
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: app
image: images.my-company.example/app:v4
securityContext:
allowPrivilegeEscalation: false
追加 capability を指定していません。ランタイムの既定の capability をすべて削除する設定ではないため、drop も別途確認してください。