containerdコミュニティはGHSA-36xw-fx78-c5r4の脆弱性を明らかにしました。 脆弱性のCVE (Common Vulnerabilities and Exposures) 識別子はCVE-2020-15257です。 コンテナがホストと同じネットワーキング名前空間を共有し、コンテナのUIDが0の場合、攻撃者はcontainerd-shim APIを使用してホスト内のcontainerd-shimプロセスを制御し、高い特権で攻撃を開始できます。 このトピックでは、脆弱性の影響、原因、および予防策について説明します。
CVE-2020-15257の脆弱性の重大度は中であり、脆弱性の共通脆弱性スコアリングシステム (CVSS) スコアは5.2である。
影響
containerdコミュニティは、containerd 1.3.9および1.4.3の脆弱性を修正しました。 Container Service for Kubernetes (ACK) のすべてのクラスターがこの脆弱性の影響を受けます。 ホストネットワークを使用するポッドをクエリするには、次のkubectlコマンドを実行します。
kubectl get pods -A -o json |
jq -c '.items[] | select(.spec.hostNetwork==true) |[.metadata.namespace, .metadata.name]'脆弱性の説明
containerdとcontainerd-shimは、抽象ソケットを使用して互いに通信します。 コンテナがホストと同じネットワーク名前空間にあり、UIDが0の場合、攻撃者はホスト内のcontainerd-shimプロセスにルートユーザーとしてアクセスできます。 その結果、攻撃者はコンテナをエスケープし、containerd-shim APIを使用して、高い特権で攻撃を開始できます。
Kubernetesクラスターのランタイムとして、containerdは基になるrunCコンテナーを管理します。 containerdにはデーモンが含まれ、オンプレミスのUNIXソケットを介してgRPCサービスインターフェイスを公開します。 これにより、containerdはコンテナのライフサイクルを管理できます。
containerd-shimはcontainerdのコンポーネントです。 containerdプロセスとcontainerdプロセスのデーモンを分離するために使用されます。 containerd-shimを介してrunCインターフェイスを呼び出して、コンテナを管理できます。
予防策
特権エスカレーション攻撃の確率を最小限に抑えるには、Net、Mount、IPC、PID、UTSの5つのコア名前空間でアプリケーションを実行する必要があります。 ホストの名前空間をコンテナーと共有するほど、攻撃される可能性が高くなります。 ポッドでホストネットワークモードを使用しないでください。 次の方法で、ホストネットワークモードの使用を制限できます。
ポッドセキュリティポリシー (PSP) 機能を有効にします。 PSPでhostNetworkパラメーターを設定して、指定した名前空間のポッドがホストネットワークを使用しないようにすることができます。 ACKを使用すると、ACKコンソールでPSPを設定できます。 詳細については、「ACKポッドセキュリティポリシーの設定と適用」をご参照ください。
gatekeeperコンポーネントをインストールします。 コンポーネントの詳細については、「gatekeeper」をご参照ください。 コンポーネントのインストール方法の詳細については、「オープンポリシーエージェントの例」をご参照ください。
ホストネットワークモードを使用する必要がある場合は、ポッドでsecurityContextパラメーターを設定して、コンテナーを非ルートユーザーとして起動することをお勧めします。 次に、allowPrivilegeEscalationパラメーターをfalseに設定します。 次のコードブロックは例です。
hostNetwork: true #Your containers must use host networking due to business requirements.
containers:
- name: foo
securityContext:
runAsUser: 12345
allowPrivilegeEscalation: false