シンボリックリンク交換攻撃 - runc - (CVE-2021-30465)
エグゼクティブサマリー
Red Hat は、runc に存在する不具合について認識しています。この不具合によって、コンテナーをデプロイできる攻撃者はコンテナーからホストシステムへエスケープできる可能性があります。この問題には、セキュリティー上の影響度が「重要な影響」の CVE-2021-30465 が割り当てられました。SELinux が Enforcing モードで実行されている場合、この影響は軽減されます。
以下のバージョンの Red Hat 製品が直接影響を受けます。
Red Hat Enterprise Linux 8
Red Hat OpenShift Container Platform 4.x
Red Hat Enterprise Linux 7
Red Hat OpenShift Container Platform 3.x
さらに、Red Hat Enterprise Linux プラットフォームでサポートされるすべての Red Hat 製品が影響を受ける可能性もあります。これには、Red Hat Enterprise Linux からパッケージを取得する製品が含まれます。 これらの製品環境で、基礎となる Red Hat Enterprise Linux の runc または docker パッケージが最新の状態であるようにしてください。
現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断するには、以下の「診断」セクションを参照してください。
テクニカルサマリー
runc で発見された脆弱性により、コンテナーからのエスケープ (脱出) が可能になり、ホストシステムにアクセスできるようになります。
この脆弱性は、Red Hat Enterprise Linux (RHEL) 8 で利用可能な runc と runc に依存するすべてのコンテナーツールパッケージに影響します。OpenShift Container Platform (OCP) 4.x も cri-o 経由で runc を使用するため、影響を受けます。
この脆弱性は、Extras チャンネルから取得する、Red Hat Enterprise Linux 7 で利用可能な runc および runc パッケージの両方に影響します。Red Hat Enterprise Linux 7 Extras から取得したこれらのパッケージに依存する OpenShift Container Platform (OCP) 3.x も影響を受けます。
軽減策
SELinux が Enforcing モードで container-selinux ポリシーを使用している場合、この脆弱性の影響は軽減されます。RHEL 7 および 8 ならびに OpenShift Container Platform 3.x および 4.x では、container-selinux ポリシーはデフォルトでインストールされ、有効になっています。
影響を受けるバージョンの RHEL をご使用のお客様は、エラータが利用可能になり次第、RHEL 8 チャンネルおよび RHEL 7 Extras チャンネルから RPM の更新を適用することが強く推奨されます。
影響のあるバージョンの OpenShift Container Platform をご使用のお客様は、エラータが入手可能になり次第、アップグレードすることが強く推奨されます。
OpenShift Online (OSO) または OpenShift Dedicated (OSD) をお使いのお客様は、すべてのクラスターのすべてのホストで SELinux が Enforcing モードで実行され、有効になっています。近日中に行われるメンテナンスでセキュリティーパッチが利用できる予定であるため、この問題の OSO および OSD への影響は軽減されることが予想されます。
技術情報
runc パッケージはシンボリックリンク交換攻撃に対して脆弱です。攻撃者は無害を装うコンテナー設定を要求し、結果的にバインドマウントによりホストシステムはコンテナーにマウントされます。
runc パッケージは、コンテナーを実行するためにスタンドアロンで使用できますが、通常は他のパッケージがコンテナーを実行するために使用されます。RHEL 8 では、runc はコンテナツールモジュールパッケージの podman によって使用されるため、runc への依存により脆弱になります。 OCP 4 では、runc は cri-o パッケージによって使用されるため、脆弱になります。RHEL 7 では、runc は docker パッケージによって組み込まれるため、この問題に対して脆弱になります。OCP 3 では、デフォルト設定で docker パッケージが使用されるため、影響を受けます。OCP 3 は、docker の代わりに cri-o を使用して設定できるため、cri-o を使用する場合でも影響を受けます。
コンテナーが起動され、runc が別のコンテナー (シンボリック交換攻撃を実行する) と共有されるボリューム内にマウントする状況では、TOCTTOU (time-of-check-to-time-of-use) によりシンボリックリンクでマウントのターゲットを交換することで、runc を操ってコンテナーのルートファイルシステム外部にマウントすることが可能になります。
しかし、これは MS_SLAVE の伝播が「/」に適用され、マウント名前空間内で行われるため (コンテナーの namespace 内部の「ホスト側のマウント」で、ホスト上には表示されない)、これだけでは効果はありません。これを悪用するには、マウントされたホストパスのサブパスを後続のマウントのソースとして使用する、追加のマウントエントリーが設定に必要です。
製品への影響
OpenShift Container Platform
OpenShift Container Platform の場合、ボリュームのソースであるトップレベル (ウェルノウン) のディレクトリー (例: var/lib/kubelet/pods/$MY_POD_UID/volumes/kubernetes.io~empty-dir) へのシンボリックリンクを作成し、そのシンボリックインクをマウントのターゲットとして使用することで、この問題の悪用が可能になります。
マウントのソースは攻撃者が制御するディレクトリーになるため、後続のマウントが実行されるソースディレクトリーは攻撃者が制御するディレクトリーになります。攻撃者は最初に「/」へのシンボリックリンクをボリューム名を持つ悪意のあるソースディレクトリーに配置します。コンテナーの後続のマウントはバインドマウントを使用して「/」をコンテナーにマウントします。
SELinux が Enforcing モードで container-selinux ポリシーを使用している場合、この脆弱性の影響は軽減されます。OpenShift Container Platform 3.x および 4.x では、container-selinux ポリシーはデフォルトでインストールされ、有効になっています。
サービスへの影響
OpenShift Online/Dedicated
OpenShift Dedicated (OSD) では、お客様ごとに 1 つ以上の専用クラスターがあり、これらのクラスターは共有されません。 そのため、影響はお客様ごとの使用範囲に限定されます。
OpenShift Online (OSO) または OpenShift Dedicated (OSD) をお使いのお客様は、すべてのクラスターのすべてのホストで SELinux が Enforcing モードで実行され、有効になっているため、影響が軽減されます (詳細は「よくある質問」を参照してください)。
攻撃者がコンテナーをデプロイできる場合のみ、この脆弱性の悪用が可能になります。OSD でコンテナーをデプロイできるのは、認証および承認されたユーザーのみです。 信用できるコンテナーのみをデプロイすることが推奨されます (信用できるソースからであることを検証できる、Heal Index [6] が OK であるなど)。
Red Hat Developer Sandbox
別パッケージの推移的な依存関係により、Red Hat Developer Sandbox には脆弱なパッケージが存在します。そのパッケージは不必要で使用されていないため、サービスは影響を受けません。近日中に行われるメンテナンスでそのパッケージは削除される予定です。
Red Hat OpenShift API Management
Red Hat OpenShift API Management のコードベースには脆弱なパッケージが存在します。マネージドサービスの管理者のみがコンテナーをデプロイでき、デプロイメントの前に信用が検証されます。サービスは影響を受けず、リスクも低くなります。近日中に行われるメンテナンスでそのパッケージはアップグレードされる予定です。
影響を受ける製品の更新
影響のあるバージョンの Red Hat 製品をご使用のお客様は、エラータが入手可能になり次第、該当製品を更新することが強く推奨されます。利用可能な更新を直ちに適用し、適切であると思われる軽減策を有効にしてください。
製品 | バリアント | コンポーネント | アドバイザリー/更新 |
OpenShift Enterprise 3 | 3.11 | runc | [1] |
OpenShift Enterprise 3 | 3.11 | docker | [1] |
OpenShift 4 | 4.7 | runc | [1] |
OpenShift 4 | 4.6 | runc | [1] |
OpenShift 4 | 4.5 | runc | [1] |
Red Hat Enterprise Linux 7 | runc | [1] | |
Red Hat Enterprise Linux 7 | docker | [1] | |
Red Hat Enterprise Linux 8 | z-stream | container-tools:1.0/runc | [1] |
Red Hat Enterprise Linux 8 | z-stream | container-tools:rhel8/runc | [1] |
Red Hat Enterprise Linux 8 | z-stream | container-tools:2.0/runc | [1] |
Red Hat Enterprise Linux 8 | z-stream | container-tools:3.0/runc | [1] |
[1] 更新の公開後にアドバイザリー/更新のリンクが追加されます。
[2] Red Hat Enterprise Linux Extended Update Support サブスクリプションとは何ですか?
[3] Advanced mission critical Update Support (AUS) とは何ですか?
[4] Red Hat Enterprise Linux for SAP Solutions サブスクリプションとは何ですか?
[5] このパッチを取得するには、有効な 延長ライフサイクルサポート (ELS) サブスクリプションが必要です。 お持ちのアカウントに有効な ELS サブスクリプションがない場合は、Red Hat の営業部門または営業担当者に お問い合わせ ください。
[6] Red Hat Enterprise Linux のベースイメージを使用する製品コンテナー。この不具合の修正を追加するために、ベースイメージが更新されます。コンテナーが最新の状態であるようにしてください。Red Hat Container Catalog の一部である Container Health Index を使用すると、Red Hat コンテナーのセキュリティー状態を確認できます。
[7] RHEL チャンネルからパッケージを取得する製品。 これらの製品環境で、基礎となる Red Hat Enterprise Linux の runc または docker パッケージが最新の状態であるようにしてください。
診断
以下の脆弱性検出スクリプトを使用すると、現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断できます。正規のスクリプトであることを確認する場合は、GPG 分離署名 もダウンロードします。検証にGPG 署名を使用する方法 と手順は、カスタマーポータルで確認できます。
よくある質問:
問: SELinux はこの脆弱性を軽減しますか。
答: 脆弱性の悪用は可能ですが、SELinux が Enforcing モードで実行されていれば脆弱性の影響は軽減されます。攻撃者は、SELinux ラベルを持つコンテナープロセスにホストファイルシステムをマウントする可能性があります。SELinux は、ラベルが許可しない ファイルやソケットへのアクセスを阻止します。それでも、この脆弱性を悪用して、ホストオペレーティングシステムの機密性、整合性、または可用性に、ある程度の影響を与えることは可能です。
問: この脆弱性を悪用できる可能性はどの程度でしょうか。
答: 信用できないユーザーがコンテナーを実行できたり、信用できるユーザーが信用できないコンテナーをデプロイできる環境であれば、この問題の影響を受ける可能性が高くなります。
謝辞
Red Hat は、本問題を報告したアップストリームの Open Containers Security Team に感謝します。アップストリームは、この不具合を発見した研究者は Etienne Champetier 氏であると認識しています。
Comments