すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:脆弱性修正: CVE-2020-15257

最終更新日:Nov 11, 2024

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