runc リグレッション - docker-1.13.1-108 - CVE-2016-8867、CVE-2020-14298、および CVE-2020-14300

Public Date: June 23, 2020, 7:00 pm
Updated -
Resolved Status
Important Impact

エグゼクティブサマリー

Red Hat がリリースした、Red Hat Enterprise Linux 7 Extras に含まれる特定のバージョンの Docker によって、以前修正されたセキュリティー上の不具合が複数再発し、新しい脆弱性も発見されました。Red Hat は該当のバージョンを 2020 年 1 月上旬にリリースし、2020 年 2 月上旬のリリースで問題は修正されました。Red Hat Product Security チームは、この問題の影響度を「重要な影響」と評価しました。脆弱なバージョンの Docker を使用している場合は、新しいバージョンにアップグレードするようにしてください。 

以下のバージョンの Red Hat 製品が影響を受けます。

  • Red Hat Enterprise Linux 7 Extras
  • Red Hat Enterprise Linux Atomic Host (バージョン 7.7.3.1 および 7.7.4)

以下の Red Hat 製品およびサービスは影響を受ける可能性があります。これらの製品には Docker のインストール依存関係があり、修正されたバージョンがリリースされるまでの短期間に、Red Hat Enterprise 7 Extras チャンネルから脆弱なバージョンがインストールされた可能性があります。

  • Red Hat Ceph Storage 2
  • Red Hat Ceph Storage 3
  • Red Hat OpenStack Platform 10 (*)
  • Red Hat OpenStack Platform 13
  • Red Hat OpenShift Container Platform 3.11
  • Red Hat Quay
  • Microsoft Azure OpenShift v3

現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断するには、以下の「診断」セクションを参照してください。 さらに、自動修正の Ansible Playbook も以下で提供されます。

* Red Hat OpenStack Platform 10 では、Docker の機能はテクノロジープレビューとして提供されました。 

テクニカルサマリー

エラータ RHBA-2020:0053 にて 2020 年 1 月 8 日にリリースされた Red Hat Enterprise Linux 7 Extras リポジトリーの Docker パッケージの更新には、以前のエラータで追加された複数のパッチが存在しない脆弱なバージョンの runc が含まれていたため、複数のバグやセキュリティー修正のリグレッションが発生しました。

この更新によって、セキュリティーの問題が 3 つ発生しました。その 2 つは、以前修正されたセキュリティー問題のリグレッションです (CVE-2020-14298 および CVE-2020-14300)。3 つ目は、Red Hat Enterprise Linux 7 Extras のこれまでの Docker パッケージには影響しなかった、新しいセキュリティーの問題です (CVE-2016-8867)。

3 つの問題の影響度はすべて 「重要な影響」 と評価されました。

技術的な詳細および軽減策

CVE-2020-14298

この CVE は、CVE-2019-5736 に対する修正のリグレッションに割り当てられました。CVE-2019-5736 は、RHSA-2019:0304 によって Red Hat Enterprise Linux 7 Extras の Docker パッケージで対処済みでした。今回の問題によって、同じホスト上で実行されているコンテナーホストやその他のコンテナーで、悪用されたコンテナーによる不正使用が可能になります

この問題の影響は、SELinux の Enforcing モードを使用すると軽減されます。SELinux ポリシーは、特定のコンテナーに属さないホストシステムのファイルや他のコンテナーに属するファイルが、コンテナーのプロセスによって上書きされないようにします。ホストでさらに特権を昇格するには、SELinux を迂回または無効化できる別のカーネルの不具合を悪用する必要があります。さらに、この問題の既知の悪用方法では、docker-runc バイナリーの上書きが必要になります。バイナリーを読み取り専用ファイルシステムに格納すると、上書きを防ぐことができ、悪用を阻止することができます。Red Hat Enterprise Linux Atomic Host 7 は、システムバイナリーに読み取り専用ファイルシステムを使用するため、この問題は軽減されます。

CVE-2020-14300

この CVE は、CVE-2016-9962 に対する修正のリグレッションに割り当てられました。CVE-2016-9962 は、RHSA-2017:0116 によって Red Hat Enterprise Linux 7 Extras の Docker パッケージで対処済みでした。今回の問題によって、同じホスト上で実行されているコンテナーホストやその他のコンテナーで、悪用されたコンテナーによるさらなる不正使用が可能になります

この問題の影響は、SELinux の Enforcing モードを使用すると軽減されます。SELinux ポリシーは、特定のコンテナーに属さないホストシステムのファイルや他のコンテナーに属するファイルが、コンテナーのプロセスによって上書きされないようにします。ホストでさらに特権を昇格するには、SELinux を迂回または無効化できる別のカーネルの不具合を悪用する必要があります。

CVE-2016-8867
アンビエント機能の不適切な設定が原因で、コンテナー内の権限のない root 以外のプロセスが想定外の機能で実行され、そのコンテナー内部での権限を root に昇格することが可能になります。 この問題が当初 2016 年に報告されたときは、当時の Red Hat Enterprise Linux 7 Extras に同梱されていたバージョンの Docker パッケージは影響を受けませんでした。 

リグレッションによって、docker-1.13.1-108.git4ef4b30.el7 パッケージは前述のコンテナー内での権限昇格に対して脆弱になりました。 この特定のビルドのみにリグレッションが含まれ、このバージョンのみが問題の影響を受けます。

この問題は、--cap-add および --cap-drop オプションを使用して、コンテナー内でプロセスが使用できる機能を制限すると、軽減することができます。しかし、このような制限は root プロセスと root 以外のプロセスの両方に適用されるため、必要な動作を維持しながら除外できる機能をコンテナーごとに判断する必要があり、権限の昇格を防ぐことができない可能性があります。そのため、Red Hat はこの軽減策を適用する代わりに、固定の Docker パッケージをインストールすることを推奨します。

背景情報

Red Hat は、2020 年 1 月 8 日に docker-1.13.1-108.git4ef4b30.el7 が含まれる RHBA-2020:0053 をリリースしました。その直後、docker-1.13.1-108.git4ef4b30.el7 には複数のリグレッションが含まれていることが判明し、runc は Red Hat 固有のブランチではなく、マスターブランチからビルドされたことが調査中に判明しました。そのため、同梱されたパッケージに主要なパッチ (バグ修正、強化機能、およびセキュリティー修正) が含まれていませんでした。

Red Hat は、2020 年 2 月 4 日に docker-1.13.1-109.gitcccb291.el7_7 が含まれる RHBA-2020:0427 をリリースしました。runc は適切なブランチから再ビルドされたため、前回不足していたパッチはすべて含まれていました。このバージョン以降、リグレッションは発生または再発していません。

Red Hat は 2020 年 6 月 23 日に docker-1.13.1-162.git64e9980.el7_8 が含まれる RHSA-2020:2653 をリリースしました。この更新には、前回リリースされた docker-1.13.1-161.git64e9980.el7_8 (RHSA-2020:1234) よりも新しいセキュリティー修正は含まれていません。また、docker-1.13.1-109.gitcccb291.el7_7 よりも新しい CVE-2020-14298、CVE-2020-14300、または CVE-2016-8867 に関連する修正も含まれていません。この 3 つの CVE はすべて docker-1.13.1-109.gitcccb291.el7_7 によって修正されています。このエラータは、docker-1.13.1-108.git4ef4b30.el7 パッケージによって発生したリグレッションについて、お客様に広く認識していただくためにリリースされました。当初、この問題はセキュリティーアドバイザリー (RHSA) ではなく、バグ修正アドバイザリー (RHBA) で対応されました。また、このエラーターでセキュリティースキャンツールの問題について広くお知らせする目的もあります。

製品への影響

脆弱なバージョンの Docker が同梱された Red Hat 製品は、Red Hat Enterprise Linux Atomic Host バージョン 7.7.3.1 および 7.7.4 と、Red Hat Enterprise Linux 7 Extras のみです。しかし、Red Hat Enterprise Linux 7 Extras の Docker パッケージに依存するその他の製品やサービスも影響を受ける可能性があります。Red Hat Enterprise Linux 7 Extras に依存するこれらの製品の Docker パッケージを更新し、脆弱性を軽減する必要があります。現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断するには、以下の「診断」セクションを参照してください。

OpenShift Container Platform OCP 3.11

OCP 3.11 では、SELinux が設定で有効化され、Enforcing モードはインストール手順の一部であるため、CVE-2020-14298 および CVE-2020-14300 は OCP 3.11 ではデフォルトで軽減されます。
脆弱なバージョンの Docker が含まれる OCP 3.11 のインストールは CVE-2016-8867 の影響を受けますが、各コンテナー内での権限の昇格に制限されるため、脆弱性の影響は軽減されます。

2020 年 1 月 8 日から 2020 年 2 月 4 日の間に 3.11 クラスターをインストールまたはアップグレードした場合は、脆弱なバージョンの Docker がインストールされている可能性が高いため、速やかに確認してください。

Red Hat Ceph Storage バージョン 2 および 3

Red Hat Ceph Storage バージョン 3 は Red Hat Enterprise Linux 7 Extras リポジトリーの Docker パッケージを使用します。Docker パッケージは Ceph Storage 内で使用され、Red Hat Ceph Storage Dashboard のインストール時に、Grafana や Prometheus などのコンテナーを使用して、アプリケーションを作成、デプロイ、および実行します。
 
Red Hat Ceph Storage バージョン 2 をコンテナーイメージとしてデプロイするときに、Red Hat Ceph Storage バージョン 2 も Red Hat Enterprise Linux 7 Extras リポジトリーの Docker を使用します。

Red Hat Ceph Storage 2 および 3 では、デフォルトで SELinux の Enforcing モードが有効になっているため、CVE-2020-14298 および CVE-2020-14300 が軽減されます。しかし、脆弱なバージョンの Docker を使用してデプロイされた両バージョンの Ceph Storage のコンテナーは、CVE-2016-8867 の影響を受けます。

Red Hay Quay

Red Hat Quay のインストールプロセスでは、Red Hat Enterprise Linux 7 Extras リポジトリーを有効にし、Red Hat Quay のコンテナーイメージを実行するためのコンテナーランタイムとして Docker をインストールします。  SELinux はデフォルトで有効であるため、CVE-2020-14298 および CVE-2020-14300 の影響は軽減されます。3 つ目の CVE-2016-8867 の脆弱性は、Red Hat Quay コンテナーなどの、そのシステム上で稼働しているコンテナー内に存在します。

Red Hat OpenStack Platform バージョン 10 および 13

Red Hat OpenStack 10 と Red Hat OpenStack 13 の両方で Red Hat Enterprise Linux 7 Extras リポジトリーが有効であり、このリポジトリーから Docker がインストールされます。Red Hat OpenStack バージョン 10 内の Docker およびコンテナーの使用は、テクノロジープレビューの機能です。Red Hat OpenStack バージョン 13 内で Docker およびコンテナーを使用すると、すべてのサービスがコンテナー (Docker に依存する) として実行されるため、よりコストが高くなります。

これらのサービスによって OpenStack インフラストラクチャー全体が管理されるため、コンテナーエスケープが悪用されると大きな影響を受けます。幸いなことに、Red Hat OpenStack のデフォルト設定では SELinux が Enforcing モードで実行されるため、コンテナーエスケープの可能性が軽減されます。さらに、オーバークラウドサービスによって使用されるイメージは信用できるため、悪用のリスクは低くなります。

サービスへの影響

Red Hat は、以下のサービスでは脆弱でないバージョンの Docker が実行されることを確認しました。そのため、以下のサービスはこれらの脆弱性の影響を受けません。

    •    Red Hat OpenShift Dedicated v3
    •    Red Hat OpenShift Dedicated v4
    •    Red Hat OpenShift Online
    •    Red Hat Managed Integration
    •    Quay.IO
    •    cloud.redhat.com
    •    Microsoft Azure OpenShift v4

Microsoft Azure OpenShift v3

バージョン 16 および 17 の Microsoft Azure OpenShift v3 クラスターをお使いのお客様は、定期的な更新が行われるため、これらの脆弱性の影響を受けないことが確認されています。バージョン 15 を実行している 2 種類の古いクラスターは、前述の OpenShift Container Platform 3.11 の説明にあるように、部分的に影響を受けます。

    •    CVE-2020-14298 および CVE-2020-14300 は SELinux によって軽減されます。
    •    CVE-2016-8867 の脆弱性は存在しますが、脆弱性の影響は各コンテナー内での権限昇格に制限されます。

Red Hat は Microsoft と協力して、影響を受けるお客様にご連絡いたします。

影響を受ける製品の更新

影響のあるバージョンの Red Hat 製品をご使用のお客様は、エラータが入手可能になり次第、該当製品を更新することが強く推奨されます。利用可能な更新を早急に適用し、適切であると思われる軽減策を有効にしてください。弊社の認定クラウドプロバイダーパートナー経由で Red Hat 製品をお使いのお客様は、クラウドプロバイダーに詳細をお問い合わせください。

製品パッケージアドバイザリー/更新
Red Hat Enterprise Linux 7 ExtrasdockerRHSA-2020:2653

診断

現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断するための、脆弱性検出スクリプトをご用意しました。正規のスクリプトであることを確認する場合は、GPG 分離署名 もダウンロードします。

システムの脆弱性の判断

バージョン 1.0

脆弱性検出スクリプトは、現在サポートされる Red Hat Enterprise Linux バージョンを対象としています。検出スクリプトは、Red Hat Enterprise Linux 上のレイヤード製品でも使用できます。レイヤード製品でスクリプトを実行できる権限が必要です。

また、簡単なシェルコマンドを使用して、インストールされた Docker パッケージのバージョンを確認することもできます。

$ rpm -q docker

出力されたバージョンが docker-1.13.1-108.git4ef4b30.el7 である場合は、この問題に対して脆弱である可能性があります。

Ansible Playbook

また、Ansible Playbook「CVE-2020-14297-14300-update_fixit--2020-06-23-1248_0.yml」は以下で使用できます。この Playbook により、影響を受ける Docker パッケージが更新されます。この Playbook を使用するには、更新するホストを HOSTS エクストラ変数で指定します。

ansible-playbook -e HOSTS=container_host,dev01 CVE-2020-14297-14300-update_fixit--2020-06-23-1248_0.yml

正規の Playbook であることを確認するには、GPG 分離署名 をダウンロードします。

軽減策の自動化

バージョン 1.0

よくある質問:

問: 更新された Docker パッケージをインストールした後に再起動が必要なものはありますか?
答: `yum update` の実行中に Docker デーモンは再起動され、実行中のコンテナーはすべて停止されます。`yum update` を実行する前に稼働していたコンテナーをすべて再起動する必要があります。OpenShift Container Platform 3.11 の Docker を更新する場合は、以下のガイドを参照してください。

https://docs.openshift.com/container-platform/3.11/upgrading/os_upgrades.html

問: すでにバージョンが docker-1.13.1-109.gitcccb291.el7_7 または docker-1.13.1-161.git64e9980.el7_8 の Docker パッケージを使用していますが、docker-1.13.1-162.git64e9980.el7_8 をすぐインストールして問題に対応する必要はありますか?
答: すぐ対応する必要はありません。CVE-2016-8867、CVE-2020-14298、および CVE-2020-14300 はすべて docker-1.13.1-109.gitcccb291.el7_7 で対処済みです。RHSA-2020:2653 に含まれる更新は、これらの問題がユーザーとツールで広く認識されるようリリースされました。詳細は上記の「背景情報」を参照してください。

問: Red Hat OpenShift Container Platform OCP 4.x は影響を受けますか?
答: Red Hat OpenShift Container Platform 4.x は、Docker ではなく CRI-O コンテナーエンジンを使用するため、このリグレッションの影響は受けません。  Red Hat Enterprise Linux 7 をワーカーノードで実行することは可能ですが、ワーカーノードはこの脆弱性の影響を受けない CRI-O でインストールされます。

問: Red Hat OpenShift Container Storage (OCS) は影響を受けますか?
答: OCS 4.x は OCP 4.x をベースで使用し、OCS 3.x は OCP 3.x をベースで使用します。そのため、OCP は OCS の影響度をカバーします。

問: Red Hat Enterprise Linux 8 は影響を受けますか?
答: Red Hat Enterprise Linux 8 はこのリグレッションの影響を受けません。RHEL 8 には脆弱なバージョンな Docker が同梱されたことがありません。

問: 他のベンダーの Docker パッケージも CVE-2020-14298 および CVE-2020-14300 の影響を受けますか?
答: これらの CVE は、Red Hat Enterprise Linux 7 Extras から Red Hat によって提供された Docker パッケージに固有するセキュリティーリグレッションに割り当てられました。そのため、これらの CVE は、他のベンダーによって提供された Docker ビルドには適用されません。同様に Docker Inc. によって提供されたアップストリームビルドや、他の Linux ディストリビューションに含まれるアップストリームビルドには適用されません。CentOS などの Red Hat Enterprise Linux のソースコードをベースとするプロジェクトは適用対象となる可能性はあります。

参考資料

この問題によってリグレッションが発生した 2 つのセキュリティー脆弱性の詳細については、以下を参照してください。

runc - 悪意のあるコンテナーブレイクアウト - CVE-2019-5736
On-entry container attack - CVE-2016-9962