Alibaba Cloudは、Container Service for Kubernetes (ACK) のrunC脆弱性CVE-2019-5736を修正しました。 このトピックでは、以前のバージョンの影響と脆弱性の修正方法について説明します。
背景情報
Docker、containerd、またはその他のrunCベースのコンテナーに使用されるrunCランタイムに脆弱性があります。 攻撃者は、ホストのrunCバイナリを上書きし、その結果、特定のコンテナー内でコマンドをrootとして実行する機能を悪用することで、ホストのrootアクセスを取得できます。 このようなコンテナにはdocker execをアタッチできるため、攻撃者はコンテナに対する書き込み権限を持ちます。
詳しくは、「CVE-2019-5736」をご参照ください。
影響
- ACK:
18.09.2より前のバージョンのDockerを使用するDocker SwarmクラスターおよびKubernetesクラスターが影響を受けます。
- ユーザー定義のDocker/Kubernetesランタイム:
18.09.2より前のDockerバージョンまたは1.0-rc6より前のrunCバージョンを使用するランタイムが影響を受けます。
修正
Alibaba Cloudは、ACKクラスター1.11または1.12で使用されるDockerバージョンのこの脆弱性を修正しました。 他のクラスターでは、次の方法を使用して脆弱性を修正できます。
- Dockerをアップグレードします。 Dockerのバージョンを18.09.2以降にアップグレードします。 これにより、コンテナの切断やビジネスの中断が発生します。
- runCのみのアップグレード (Docker 17.06用) 。 Dockerエンジンのアップグレードによるビジネスの中断を回避するには、次の手順を実行して各クラスターノードのrunCバイナリをアップグレードします。
- 次のコマンドを実行してdocker-runcを見つけます。 ほとんどの場合、docker-runcは /usr/bin/docker-runcパスにあります。
which docker-runc - 次のコマンドを実行して、現在のrunCをバックアップします。
mv /usr/bin/docker-runc /usr/bin/docker-runc.orig.$(日付-1秒) - 次のコマンドを実行して、固定runCをダウンロードします。
curl -o /usr/bin/docker-runc -sSL https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/runc/docker-runc-17.06-amd64 - 次のコマンドを実行してdocker-runcを実行可能にします。
chmod + x /usr/bin/docker-runc - 次のコマンドを実行して、runCが期待どおりに機能するかどうかをテストします。
docker-runc -v # runcバージョン1.0.0-rc3 # コミット: fc48a25bde6fb041aae0977111ad8141ff396438 # spec: 1.0.0-rc5 docker run -it -- rm ubuntu echo OK - オプション: ACKクラスターのGPUノードの場合、nvidia-runtimeをインストールするには、次の手順を実行する必要があります。
- 次のコマンドを実行して、nvidia-container-runtimeを見つけます。 ほとんどの場合、nvidia-container-runtimeは /usr/bin/nvidia-container-runtimeパスにあります。
nvidia-container-runtime - 次のコマンドを実行して、現在のnvidia-container-runtimeをバックアップします。
mv /usr/bin/nvidia-container-runtime /usr/bin/nvidia-container-runtime.orig.$(日付-1秒) - 次のコマンドを実行して、固定されたnvidia-container-runtimeをダウンロードします。
curl -o /usr/bin/nvidia-container-runtime -sSL https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/runc/nvidia-container-runtime-17.06-amd64 - 次のコマンドを実行して、nvidia-container-runtimeを実行可能にします。
chmod + x /usr/bin/nvidia-container-runtime - 次のコマンドを実行して、nvidia-container-runtimeが期待どおりに機能するかどうかをテストします。
nvidia-container-runtime -v # runcバージョン1.0.0-rc3 # commit: fc48a25bde6fb041aae0977111ad8141ff396438-dirty # spec: 1.0.0-rc5 docker run -it -- rm -e NVIDIA_VISIBLE_DEVICES=すべてのubuntu nvidia-smi -L # GPU 0: テスラP100-PCIE-16GB (UUID: GPU-122e199c-9aa6-5063-0fd2-da009017e6dc)説明 このトピックでは、テストはGPU P100を使用するノードで実行されます。 テスト方法は、GPUモデルによって異なります。
- 次のコマンドを実行して、nvidia-container-runtimeを見つけます。 ほとんどの場合、nvidia-container-runtimeは /usr/bin/nvidia-container-runtimeパスにあります。
- 次のコマンドを実行してdocker-runcを見つけます。 ほとんどの場合、docker-runcは /usr/bin/docker-runcパスにあります。